Jmeter应用文档(循环怎么用)
根底用法
-
批改语言
- Jmeter之界面语言设置
- 上面应用简体中文的命名进行阐明
-
关上日志
- 启动后,右上角有个黄色的感叹号图标,点击即可关上即时日志
- 如果没有看到重启下jmeter,局部操作(如长期批改语言)可能导致图标隐没
界面模式
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================
-
GUI模式:关上jmeter时,能够看到控制台打印了下面这段文字
- GUI指客户端界面
- 能够看到外面提醒不要应用GUI进行测试
- 只有在创立和调试的时候应用
-
CLI模式:即非GUI模式
- jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
-
新建一个文件夹,按住”shift”,点击右键,能够看到”在此处关上Powershell窗口”
- 将jmeter执行命令行输出窗口即可运行
- 运行日志会在以后文件夹下自动生产一个jmeter.log,用于记录具体日志
参数 | 示例 | 阐明 |
---|---|---|
jmeter | D:\apache-jmeter-5.5\bin\jmeter | jmeter启动门路 |
-n | -n | 用CLI模式运行 |
-t | -t D:\demo\abc.jmx | 测试文件门路 |
-l | -l D:\demo\adb.csv | 执行后果记录,每一行是每个步骤执行汇总信息 |
-e | -e | -o的固定搭配 |
-o | -o D:\demo\report\ | 汇总报告目录,测试完结后会生成html报告,会主动创立目录 |
- 示例
- D:\apache-jmeter-5.5\bin\jmeter -n -t D:\demo\abc.jmx -l -l D:\demo\adb.csv -e -o D:\demo\report\
起步
创立的构造如下
* 测试计划
* 线程组
* 查看后果树
* 汇总报告
* 用户定义的变量
* 循环控制器
* 调试取样器
- 关上Jmeter界面,按下面的构造创立流程
-
创立线程组
- 右键”测试计划” > “增加” > “线程(用户)” > “线程组”
- 右键”线程组”能够看到菜单,下方列举一些通用的内容阐明
- 减少”查看后果树”
- 减少”汇总报告”
-
减少”用户定义的变量”
- 界面里随便增加一些参数名称和值(如:name,LaoXu;age,30;)
-
减少”循环控制器”
- 循环次数设置为”3″
- 右键”循环控制器”,减少”调试取样器(Debug Sampler)”
- 保留
- 点击”查看后果树”,关上后果界面
-
点击菜单的绿色”播放”键
- “查看后果树”界面中就能看到有3项记录了
-
点击其中一项
- 点击 “响应数据” > “Response Body”
- 能够看到打印着刚刚设置在”用户定义变量”里的参数名称和值
// 右键"线程组"显示的菜单(节选)
* 增加
* 取样器
* HTTP申请 // http测试
* 调试取样器(Debug Sampler) // 用于查看用户变量,调试循环控制器时很有用
* BeanShell取样器 // BeanShell脚本,能够用于清理参数,复制等
* ...其余插件取样器 // 其余插件可提供丰盛的取样器
* 逻辑控制器
* IF控制器 // 判断管制,如有未登录用户先调用登录接口进行登录
* 事务控制器 // 步骤比拟多的状况下,能够别离放入事务控制器,这样就能开展缩放便于管理
* 循环控制器 // 循环
* While控制器 // 循环的一种,能够搭配"CSV文件"
* ForEach控制器 // 循环的一种,能够搭配"用户定义变量"
* 定时器
* 固定定时器 // 期待时长
* 配置原件
* 用户定义的变量 // 用户本人设置的变量,在取样器中能够应用${xxx}形式替换(取样器须要反对,不是所有取样器都能用)
* CSV Data Config // CSV数据文件设置,能够与"While控制器"搭配应用
* 监听器
* 查看后果树 // 查看取样器执行后果
* 汇总报告 // 汇总后果,如成功率、均匀时长等
循环管制
- 取样器”HTTP申请”中,很多中央能够应用${xxx}的形式替换参数
- 上面解说如何应用应用配置进行循环
用户定义变量 + ForEach控制器
创立的构造如下
* 测试计划
* 线程组
* 查看后果树
* 汇总报告
* 用户定义的变量
* ForEach控制器
* 调试取样器
-
用户定义的变量
- 增加几个变量,以”_x”结尾(从1开始,且须要间断)
-
举例
- user_id_1 , 10
- user_id_2 , 20
-
ForEach控制器
- 输出变量前缀:”user_id”
- 输入变量名: “user”
-
运行后能够后果如下方
- 能够看出,取样器中取到了用户定义里的参数
- 而后按程序,获取到对应前缀的值,并复制到新的变量
* 调试取样器
* user=10
* user_id_1=10
* user_id_2=20
* 调试取样器
* user=20
* user_id_1=10
* user_id_2=20
CSV文件 + While循环
- CSV设置较简单,除非万不得已倡议应用 [ 用户定义变量 + ForEach控制器 ] 的组合
-
应用CSV会遇到几个问题
-
CSV读取由其余控制器管制
- 网上大部分文章是将线程组循环次数设置得和CSV行数雷同,这样就做不到再管制循环
- 将CSV放在While控制器外部,这样就能够在While控制器外再套上其余循环
-
文件结束符为”< EOF >”
-
当”遇到文件结束符再次循环?”设置为”True”
- 读取不到EOF,数据会始终循环
- 在While控制器的条件中不能应用EOF作为判断条件
-
当”遇到文件结束符再次循环?”设置为”False”
- 同个线程同个CSV只能读取一次,只有无论怎么设置,读取到的都是EOF
-
当”遇到文件结束符进行线程?”设置为”True”
- 循环一次读取到结束符时,程序就进行了,前面的步骤就不能执行了
- 循环完结后,循环的参数值不会主动革除
-
-
一个CSV读取单元构造如下
* BeanShell取样器
* While控制器
* CSV数据文件设置
* IF控制器
* 调试取样器
-
BeanShell取样器
- 清理应用到的参数值,防止参数被其余步骤设置过,影响进入While控制器
- 参数值见下方CSV文件
vars.remove("id");
vars.remove("name");
vars.remove("age");
-
While控制器
- 将增加在csv开端的”end”作为自定义的结束符,作为判断条件
${__groovy("${id}"!="end")}
-
CSV数据文件设置
- 文件名:文件门路,点击前面的”浏览…”抉择csv文件
- 文件编码:UTF-8
- 变量名称:id,name,age
-
疏忽首行:True
- 即疏忽”id,name,age”这行,倡议CSV文件里加上头,防止工夫久了忘记
-
遇到文件结束符再次循环?:True
- 这样就能嵌套其余循环,或者CSV重复读取
- 遇到文件结束符进行线程?:False
id,name,age
1,张三,18
3,李四,33
5,王八,8
end
-
IF控制器
- While循环器相似do…while循环,即先执行后判断
- 最初一次循环时三个参数读取到的别离是end,EOF,EOF
- 所以加上这个条件过滤,防止报错
${__groovy("${id}"!="end")}
-
调试取样器
- 进行打印,查看参数值
-
这样就是一个残缺的单元
- 能够重复执行,或嵌套循环,如下所示
* 测试计划
* 线程组
* 查看后果树
* 汇总报告
* <CSV单元> // 执行CSV
* <CSV单元> // 再次执行CSV不受影响
* 循环控制器 // 循环n次仍然可行
* <csv单元>
教训
定时器
- 定时器与程序无关,同层级肯定是定时器先执行
// 以下两种程序,都是先执行定时,再执行取样器
* 固定定时器
* 调试取样器
---
* 调试取样器
* 固定定时器
- 定时器会流传到上面的层级
// 所有调试取样器都要期待3秒后执行,因为定时器会流传
* 固定定时器(3秒)
* While控制器
* 调试取样器
- 多个定时器会叠加
// 期待6秒执行第1个,期待6秒执行第2个
* 固定定时器(3秒)
* 调试取样器
* 固定定时器(3秒)
* 调试取样器
-
解决方案
- 在定时器下层减少事务福安里奇
- 在减少一个取样器,因为定时器不能独自存在,如果没有取样器会间接跳过
* 事务管理器
* 固定定时器
* 调试取样器 // 可替换成任意取样器,作用是使定时器失效
发表回复