编写测试用例
通过 GUI 编写测试用例 jmx文件,通过 CLI 执行
jmx: 用 xml 格式保存的 JMeter 项目每个组件有其作用域
例如 view result tree,在HTTP请求下则只显示当前请求的结果,在线程组下则显示当前线程组内所有请求的结果
操作后记得点击保存
0. 添加测试计划
描述了JMeter执行的一系列步骤,包括一个或多个线程组、逻辑控制器、取样器、监听器、断言等
配置
独立运行每个线程组
控制线程组的执行顺序
添加用户定义的变量
添加一些全局的变量,例如服务器的ip和port
可在测试计划中直接添加
也可单独添加
1. 添加线程组
线程组是测试的基本单位,定义并发数、持续时间等。
一个线程模拟一个用户,线程组表示用户组
在测试计划
中添加
线程属性
线程数
虚拟用户数,默认为1,表示访问被测系统的用户数
Ramp-Up时间
设置线程需要多长时间全部启动
100个线程在10s内启动,1s启动10个
循环次数
默认为1,表示一个线程完成一次请求后停止运行。如果选择永远则表示不停的循环调用
2. 添加取样器
取样器 是 JMeter 的核心组件,模拟了用户执行的操作,包括 HTTP 请求、TCP 请求、FTP 请求、JDBC 请求等
填写接口信息
保存 jmx
3. 添加HTTP信息头管理器
点击添加按钮,输入请求头名称和值,点击保存,再点击运行
4. 添加断言
用于验证服务器的响应是否符合预期。
常见的断言类型包括响应断言 和 JSON 断言:
- 响应断言包括:文本、响应代码、响应头、响应时间等。
- JSON 断言允许用户指定 JSON 路径表达式并验证 JSON 响应是否符合该表达式。
响应断言
响应码断言
响应文本断言
JSON断言
验证 JSON 格式响应的一种断言方式。允许用户指定 JSON 路径表达式并验证 JSON 响应是否符合该表达式
- 正则表达式没有前后的
/
- 添加到某个请求下面,针对该请求的响应
5. 添加监听器
用于收集测试结果并生成报
查看结果树
线程组或HTTP请求下添加
线程组下,监听线程组中所有请求的数据
HTTP请求下,监听当前请求的数据
查看请求响应数据
聚合报告
线程组或HTTP请求下添加
提供有关事务、响应时间、吞吐量和错误率的信息
样本
请求次数
平均值【重点】
可理解为RT-response time 响应时间
平均响应时间,单位毫秒
中位数
响应时间的中位数,单位毫秒
90%百分位
90%的请求的响应时间小于该数值,单位是毫秒
吞吐量【重点】
throughput 即 RPS
每秒请求个数
6. 运行测试计划,查看测试报告
场景
提取token给其他线程组用
通过A线程组中的登录接口获取token,给B线程组中的请求使用
1. 添加 JSON 提取器
登录请求作用域下
根据响应的结构添加 JSON Path
Names of created variables
保存提取 token 的变量
JSON Path expressions
JSON提取表达式
Math No.
如果有多个匹配值,用哪个
2. 添加 BeanShell 后置处理程序
登录请求作用域下
多个token需要将其保存到CSV文件中传递
Parameters
JMeter 将该值传递给 BeanShell 的 Parameters 变量或 bsh.args 数组。即将 JMeter 的 mytoken 变量的值(保存的token)传递给 BeanShell 的 Parameters 变量或 bsh.args 数组,这样就可以在 BeanShell 的脚本中获取到 token 了
注意区分 JMeter 变量和 BeanShell 变量的区别
Script
1
2
3
4
5
6
7
8
9
10
11
12
13try {
FileWriter fstream = new FileWriter("/home/lfp/JMeter/token.csv", true); // true 表示追加模式写入
BufferedWriter out = new BufferedWriter(fstream);
// 这里日志拼接要用`+`号
// 其他引用变量的方法:
// log.info("111==>"+vars.get("mytoken"));
// log.info("222==>"+bsh.args[0]);
out.write(Parameters + '\n');
out.close();
fstream.close();
} catch (Exception e) {
log.error("Error writing to file: ", e);
}
3. 其他线程组引用
1. 添加 CSV Data Set Config
线程组作用域下
Filename
找到保存 token 的 csv 文件
Varaible Names
保存token的csv没有表头,这里需要添加表头字段来引用
Ignore first line
保存token的csv没有表头,这里选 False
2.添加HTTP信息头管理器
线程组作用域下
通过刚才设置的表头字段引用 token
4.每次执行时清空 token
保存token的脚本用的追加方式,每次执行需要手动清空,可以在测试计划的最开始添加一个初始化线程组
测试计划需要勾选独立运行每个线程组
Script
1
2
3
4
5
6
7
8
9try {
FileWriter fstream = new FileWriter("/home/lfp/JMeter/token.csv", false);
BufferedWriter out = new BufferedWriter(fstream);
out.write(""); // 写入空字符串,即清空文件
out.close();
fstream.close();
} catch (Exception e) {
log.error("Error clearing file: ", e);
}
CLI
启动 jmeter 时输出
1 | Don't use GUI mode for load testing !, only for Test creation and Test debugging. |
通过GUI配置 jmx,通过CLI执行
1 | jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder] |
n
指定CLI模式
t
指定jmx文件地址
l
指定测试结果文件
j
指定运行日志文件
e
测试结束后生成报告
o
指定报告保存目录
测试结束后会在该目录下生成html格式的报告,点击
index.html
在浏览器打开
1 | jmeter -n -t /home/lfp/JMeter/获取设备列表.jmx -l log.jtl -j run.log -e -o /home/lfp/JMeter/report/ |