Jmeter逻辑控制器
可以控制samplers(采样器)的执行顺序。控制器需和采样器一起使用,否则没有意义。在控制器下的所有采样器都会被当成一个整体,执行时也会一起被执行。Jmeter逻辑控制器可对元件的执行逻辑进行控制,除一次控制器外,还可以嵌套其他种类的逻辑控制器。
分类:
·控制测试计划执行过程中节点的逻辑执行顺序,如Loop Controller(循环控制器)、If Controller(IF 控制器)
· 对测试计划中的脚本进行分组,如Simple Controller(简单控制器)、事务控制器
· 控制该控制器下元件的执行次数,如 Throughput Controller(吞吐量控制器)
· Runtime(second):默认1,不填则默认0,当为0时表示不执行其节点下的元件
· Runtime控制器用来控制执行时间长度,不控制运行次数
· 性能测试中,当某特定业务需要执行特定时长时,可用Runtime控制器。单位是秒。
· 在不同num时选择控制器下的对应数字位不同sampler
· 一般用在模拟多线程同时操作不同请求的测试场景。
· 事务控制器下的操作要么全部成功,要么失败。
· Total Executions:按吞吐量值指定执行次数。吞吐量值的单位是”次“
· Percent Executions:按百分比来指定执行次数。吞吐量单位是”%”
· 吞吐量:可以是任意整数,若小于等于0,则一次也不执行
· Per User:勾选则按虚拟用户数(线程数)来计算执行次数,若不勾选则按所有的虚拟用户数来计算。
· Percent Executions执行次数=线程数*循环次数*吞吐量%,循环次数=线程组循环次数*循环控制器循环次数。
线程组
有关完整的JMeter用户线程组,请参见图4.2。
JMeter用户线程组
中文模式下显示可能更直观,如图:
运行结果,执行5次,每次间隔1秒,循环次数为1。
HTTP请求默认值有何用?它用于新建http请求时“已经在HTTP Request Defaults元素中指定了此值,因此不必设置Server Name字段”。如下图:
添加聚合报告,如图:
聚合报告中,Average指的是平均响应时间,单位是毫秒,
Throughput是指我们常说的吞吐量。
登录接口实例
新建“测试计划”,名称默认为“测试计划”。
添加“线程组”,名称默认为“线程组”。
添加“取样器”——“HTTP请求”。
线程组名称填写“登录”,填写“协议”:http,填写“服务器名称或IP”:47.92.127.***,填写端口号“8180”,HTTP请求的方法选择“POST”,路径为IP接口名,如果是根目录,则直接填写“/”,如果不是则填写具体路径,比如“/api/doc/login2”,在参数中参考下图表格中添加参数。
为线程组添加“监听器”——“查看结果树”。
执行“启动”按钮后,可以查看取样器结果、请求和响应数据。
线程组添加“监听器”——“用表格查看结果”,可以看到连接时间最大值1.065秒,均在3秒范围内(用户体验最佳)。
将返回的响应数据比对接口文档,基本一致。
{"code":200, "api":"/doc/login2", "data": {"api_os_code":"", "api_os_model":"", "api_version_code":null, "api_login_time":1606706241, "api_client_ip":"60.28.***.18", "oauth_token_secret":"520cb280f8ec2551343794ed9b1ba603", "validtime":1607311041, "oauth_token":"ff3390cec2ef56c012774276f916a0d0", "uid":"1008", "uuid":"ODT5698b49b09d03", "oid":"OF120105", "name":"zhangsan", "sex":1, "type":2, "mobile":"", "email":"zhangsan@test.com", "is_verified":"2", "avatar":"/data/upload/2020/0416/13/5e97ee6be07cd.jpg", "im_username":"oim0000001008", "im_nickname":"zhangsan", "status":1, "department":["\u90d1\u6d4b\u8bd5\u673a\u6784"], "comment":"\u5218\u533b\u751f\uff0c\u533b\u5b66\u535a\u58eb\uff0c10\u5e74\u7ecf\u9a8c","grade":"\u4e3b\u4efb\u533b\u5e08", "worktime":"\u5de5\u4f5c\u65f6\u95f4", "speciality":"\u4e13\u4e1a\u64c5\u957f\u547c\u5438", "careerList":[], "addressList":[{ "title":"\u8054\u7cfb\u5730\u5740","content":"\u5730\u5740"}], "contactList":[{"title":"\u8054\u7cfb\u65b9\u5f0f","content":"\u8054\u7cfb\u4fe1\u606f"}],"certificationList":["\u8bc1\u4e66\u4fe1\u606f"],"prizeList":["\u83b7\u5956\u4fe1\u606f"],"statistics":[],"account":{"basic":null,"cards":false},"im_password":"3376718bd94336e4d3a01de0d6cdf79d","ftpconfig":{"ip":"47.92.127.107","port":"3224","user":"ftpuser","pass":"12345_abc&"}}, "message":"Success"}
创建用户接口
但是响应请求返回401,判断应该是token问题。
解决的办法:
查看oauth_token和oauth_token_secret获取得不对,
用正则表达式
"oauth_token":"(.+?)"
此外检查到api_type没有添加,
解决的办法:
api_type 取1
从查看结果树中查看结果返回了绿色成功200。
以上实现了1个用户的测试场景,下面5个用户同时:
设置线程数=用户数,有两处需要设置:HTTP请求的线程组和HTTP请求默认值的线程组。
添加到5,都可以成功。
查看结果树:
聚合报告:
汇总报告:
作者:枫叶