0%

Jmeter压力测试使用指南

一、安装java

1、访问Java官网,下载jdk-12_windows-x64_bin.zip安装包
2、环境变量配置

1
2
3
JAVA_HOME   D:\Program Files\jdk-12
CLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
Path %JAVA_HOME%\bin

二、安装Jmeter

访问Apache官网,在页面上找到zip压缩包apache-jmeter-5.1.1.zip并下载,解压即安装,本文解压路径为G:\软件\apache-jmeter-5.1.1\bin

三、汉化Jmeter

方法一:

方法二:
打开Jmeter安装目录apache-jmeter-5.1.1\bin,找到jmeter.properties文件
将第37行修改为:

1
language=zh_CN

去掉前面的#,重启Jmeter后就是中文界面了。

四、创建测试计划

打开cmd窗口,切换到G:\软件\apache-jmeter-5.1.1\bin目录,运行命令:

1
jmeter

4.1 添加测试计划

4.2 添加线程组

在“创业股测试计划”上右键 【添加】–>【线程(用户)】–>【线程组】。

这里的线程可以理解成一个访客。
设置线程数和循环次数,这里设置线程数为10000(个用户),循环5次(每个用户访问5次),等同于50000次访问。

4.3 添加请求类型

4.3.1 设置http请求默认值
4.3.2 添加HTTP请求

如下图,添加http请求:

选择请求方式,添加接口路径,如果是POST提交方式,且以json方式提交数据,在下方选择消息体数据,填写json参数即可。

4.3.3 添加HTTP头部信息

在我们刚刚创建的线程组上右键 【添加】–>【配置元件】–>【HTTP信息头管理器】。
因为我们要传输的数据为json,所以设置一个 Content-Type:application/json

4.4 添加断言

添加一个简单的200响应断言:

添加一个返回结果断言:
比如返回结果:"Result":1

4.5 添加察看结果树

在线程组上右键 【添加】–>【监听器】–>【察看结果树】。
在察看结果树窗口中可以看到每一次请求,和每一次请求传递的参数值,可以指定将每次请求的结果存入到某一个文件路径。

4.6 添加汇总报告

英文名:Summary Report,在线程组上右键 【添加】–>【监听器】–>【汇总报告】,在汇总报告窗口中可以指定将每次请求的结果存入到某一个文件路径。

报告详解:
Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间
Median:中位数,也就是 50% 用户的响应时间
90% Line:90% 用户的响应时间
Note:关于 50% 和 90% 并发用户数的含义,请参考下文
http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html
Min:最小响应时间
Max:最大响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数
Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

五、设置动态参数

5.1 生成时间戳

找到”Tools”菜单 > 函数助手对话框,时间参数格式:

1
2
3
4
5
6
${__time(yyyy-MM-dd HH:MM:SS,)}  //返回:2019-04-18 10:04:549
${__time(yyyy-MM-dd HH:MM:ss,)} //返回:2019-04-18 10:04:54
${__time(yyyy-MM-dd,)} //返回:2019-04-18
${__time(,)} //返回:1555554692145,默认该公式精确到毫秒级别,13位数
${__time(/1000,)} //返回:1555554735,该公式精确到秒级别,10位数
${__time(YMDHMS,)} //返回:20190418-103524

调试好想要的参数格式后,点击测试计划,在右侧的“用户定义的变量”中,添加一个变量,名称为nowtime,值如:${__time(yyyy-MM-dd HH:MM:SS,)}
然后可以在参数中加入这个变量:${nowtime},如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"Username": "jmetertest${auto_increment}",
"Usertype": 0,
"RegisterationTime": "${nowtime}",
"ProxyPlatformID": "GuanYong001",
"Person": {
"name": "欧阳${auto_increment}",
"gender": 0,
"ID": "332623198507235699",
"phoneNum": "1521668****",
"address": "上海市徐汇区XX路XX号XX室",
"nation": "中国"
},
"Company": {
"name": "XXX科技有限公司",
"creditcode": "91330104MA2CETR334",
"contactpersion": "欧阳",
"contactphone": "1521668****"
}
}
5.2 定义随机数

如同5.1节中,在函数助手对话框中,选择系统函数__Random,填写一个范围的最小值和最大值,点击生成,如${__Random(1,200,)},将产生1~200之间的随机数。

5.3 定义自增变量

在线程组上右键 【添加】>【配置元件】>【计数器】。

添加完成后,可以在参数中引用变量名:${auto_increment},如5.1节中的参数引用。

5.4 读取CSV文件

第一种读取方式:
新建文件test.txt,文件内容如下:

1
2
3
4
5
aaa,111
bbb,222
ccc,333
ddd,444
eee,555

在函数助手对话框中,选择系统函数__CSVRead,在第一个参数中,填写文件路径,第二个参数填写第几列数据,注意列数是从0开始计的。
读取规则:
一行数据为一组数据,一行多列数据用逗号隔开,多线程(访客)访问时,一行数据分配给一个线程。在参数中引用,如:
${__CSVRead(F:\软件\apache-jmeter-5.1.1\test_plan\test.txt,1)},读取第2列数据。

1
2
3
4
5
6
"Company": {
"name": "XXX科技有限公司${__CSVRead(F:\软件\apache-jmeter-5.1.1\test_plan\test.txt,1)}",
"creditcode": "91330104MA2CETR334",
"contactpersion": "欧阳",
"contactphone": "1521668****"
}

在察看结果树中,查看每次请求,可以看到每次请求的参数name就会带上CSV文件中的内容,以达到每次请求参数数据不一样。

第二种读取方式:
在线程组上右键【添加】>【配置元件】>【CSV数据文件设置】

在参数中引用,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"Username": "jmetertest${auto_increment}",
"Usertype": 0,
"RegisterationTime": "${nowtime}",
"ProxyPlatformID": "GuanYong001",
"Person": {
"name": "欧阳${auto_increment}",
"gender": 0,
"ID": "332623198507235699",
"phoneNum": "1521668****",
"address": "上海市徐汇区XX路XX号XX室${tmpName}",
"nation": "中国${tmpNum}"
},
"Company": {
"name": "XXX科技有限公司${__CSVRead(F:\软件\apache-jmeter-5.1.1\test_plan\test.txt,1)}",
"creditcode": "91330104MA2CETR334",
"contactpersion": "欧阳",
"contactphone": "1521668****"
}
}

其中addressnation字段,每个线程发起请求时,参数都会去文件中取相应字段的数据,一次一行数据。

六、执行测试计划

只有在调试测试计划时使用GUI模式。要运行实际压力测试,推荐使用CLI模式。
这里执行的命令为:

1
jmeter -n -t ../test_plan/copyright_chain.jmx -l ../test_plan/result/result.txt -e -o ../test_plan/webreport

说明:
test_plan/copyright_chain.jmx 为测试计划文件路径
test_plan/result/result.txt 为测试结果文件路径
test_plan/webreport 为web报告保存路径。

jmeter命令参数:
-n 指定JMeter将以cli模式运行
-t [指定测试计划的JMX文件路径,包括文件名]。
-l [指定样本结果存放路径,包括文件名]。
-j [指定日志文件存放路径,包括文件名]。
-r 在JMeter属性“ remote_hosts ” 指定的服务器中运行测试
-R [远程服务器列表]在指定的远程服务器中运行测试
-G [CSV文件的路径]仅生成报告仪表板
-e 负载测试后生成报告仪表板
-o 测试完成后生成报告仪表板的存放路径,此文件夹不能已经存在
该脚本还允许您指定可选的防火墙/代理服务器信息:
-H [代理服务器主机名或IP地址]
-P [代理服务器端口]

七、查看测试报告

八、Jmeter目录结构解析

JMeter 属性在jmeter.properties中定义
https://blog.csdn.net/jinganglong123/article/details/76427544

九、Jmeter执行顺序

配置元素
预处理器
计时器
取样
后处理器(除非SampleResult为null)
断言(除非SampleResult为null)
监听器

参考:
https://blog.csdn.net/u012111923/article/details/80705141 JMeter性能测试,完整入门篇
https://blog.csdn.net/relax_hb/article/details/72831287
https://www.cnblogs.com/stulzq/p/8971531.html
https://www.cnblogs.com/summer-mm/p/7717812.html
https://www.cnblogs.com/st-leslie/p/5185376.html
https://blog.csdn.net/lluozh2015/article/details/73863851 时间变量参数
https://blog.csdn.net/u012111923/article/category/7738266
https://www.cnblogs.com/jaychang/p/7022071.html Result结果断言