草庐IT

Jmeter之接口测试

Ashley zhao 2023-12-16 原文

1. 添加token和Cookie

其他业务都是依赖于登录成功而执行的。所以获取登录成功后的token和Cookie。结合Fidder或者wireshark进行抓包。

1.1 添加token方法

添加“HTTP token管理器”,添加正则表达式,并在需要token的地方进行引用即可。如下图;

token
token=(.*)” data-id=`$1$`


1.2. 添加Cookie方法

方法一:可直接在最前面加“HTTP Cookie管理器”,不填写数据;
方法二:添加“HTTP Cookie管理器”,添加正则表达式,并在需要Cookie的地方进行引用即可。如下图;

cooike
JSEESSIONID=(.*);Path=/futureloan 
`$1$`


2. 概念

接口测试步骤:接口文档解析、接口用例编写、使用工具执行接口测试用例
请求头详解:

  1. Accept: application/json, text/plain, / 告诉服务器我可以接收的内容类型(Content-types)
  2. Accept-Encoding: gzip, deflate 接收的压缩格式。例如 Accept-Encoding: gzip, deflate;DEFLATE和GZIP理解为两种压缩算法
  3. Accept-Language: en-US,en;q=0.9,zh;q=0.8,zh-CN;q=0.7 浏览器接收的语言,其实也就是用户在什么语言地区,例如简体中文的就是 Accept-Language: zh-CN
  4. Authorization: Bearer ee85ed4e-d0e0-4465-bb81-31aaff1e33765 这个是我自己在代码中设置的请求头,这个字段存储用户的登陆认证信息,用于服务端校验
  5. Connection: keep-alive
    告诉服务器这个user agent(通常就是浏览器)想要使用怎样的连接方式。值有keep-alive和close。http1.1默认是keep-alive。
    keep-alive就是浏览器和服务器的通信连接会被持续保存,不会马上关闭,而close就会在response后马上关闭。(我们说HTTP是无状态的,跟这个是否keep-alive没有关系,不要认为keep-alive是对HTTP无状态的特性的改进)
  6. Host:被请求服务器的域名或IP地址,如果不是通用端口,还包含该端口s号。
    例如:Host: www.some.com:182
    设置服务器域名和TCP端口号,如果使用的是服务请求标准端口号,端口号可以省略
    Host: en.wikipedia.org:8080
    Host: en.wikipedia.org
  7. Referer: http://appm.com:12080/
    Referer 首部包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。
    组成:协议+域名+端口号+路径+参数(注意,不包含 hash值)
    例子:http://test.com:1998/home
    在以下几种情况下,Referer 不会被发送:
    来源页面采用的协议为表示本地文件的 “file” 或者 “data” URI;
    当前请求页面采用的是非安全协议,而来源页面采用的是安全协议(HTTPS);
    直接输入网址或通过浏览器书签访问;
    使用 JavaScript 的 Location.href 或者是 Location.replace();
    使用 html5 中 noreferrer
    用途:服务端一般使用 Referer 首部识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等,还有个常见的用途是图片防盗链。
    防盗链原理是:当用户访问网页时,referer就是前一个网页的URL;如果是图片的话,通常指的就是图片所在的网页。当浏览器向服务器发送请求时,referer就自动携带在HTTP请求头了。图片服务器根据这个请求头判断,如果 referer 不是自己的服务器,就将其拦截。
  8. Origin: http://appmanagement.cdt.test.cq.ctc.com:12080
    请求首部字段 Origin 指示了请求来自于哪个站点。该字段仅指示服务器名称,并不包含任何路径信息。除了不包含路径信息,该字段与 Referer 首部字段相似。
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36
    用户的客户端信息,如上代表系统是Windows 10 浏览器是Chrome(谷歌)
2.1 正则表达式提取器


$1$匹配第一个()中的值**



正则表达式之头提取器


匹配不到与边界,所以去掉有边界的匹配:




2.2 提取器

3. 实例

3.1 微信平台实例
3.1.1 接口文档

1)登录

2)入参和返回值

3.1.2 测试方案设计


3.1.3测试用例设计

3.2 批量注册账户

3.2.1 注册接口文档


3.2.2 使用CSV Data Set Config

1)创建一个.txt文件,里面写需要上传的账户信息;
2)创建一个CSV Data Set Config

写上需要上传的(.CSV文件)文件名;
文件首行列表名用英文逗号隔开;
默认忽略第一行:True;

3)填写参数化的参数(Mobilephone)

3.3 批量上传文件实例

1)创建一个.CSV文件,里面写需要上传的每个文件的大小、名称和路径;
2)创建一个CSV Data Set Config

写上需要上传的(.CSV文件)文件名;
文件首行列表名用英文逗号隔开;
默认忽略第一行:True;


3)填写参数化的参数(Parameter和Files Upload)

4. web登录脚本录制

4.1 环境设置



4.2 优化录制

1. 设置代理并启动录制



2. 录制脚本优化规则

过滤后的脚本

3. 添加察看结果树并运行

看回放结果:

4. 进行参数化优化

账户可以进行参数化
使用CSV Data Set Config,创建一个.txt文件,里面写需要上传的账户信息;

4.3 app脚本录制

4.3.1 环境设置

4.3.2 脚本联调

有关Jmeter之接口测试的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  3. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  4. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  5. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  6. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  7. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  8. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  9. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

  10. ruby-on-rails - 如何调试 cucumber 测试? - 2

    我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element

随机推荐