作者:Yunga
简介
Apache JMeter是一款纯Java的开发测试工具,它可以用于服务器压力测试,可以方便的获取来自不同压力下的性能指标。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证返回结果是否符合期望。总而言之就是很强大。
环境搭建
当前JMeter最新版为5.2.1,官网描述需要Java8以上,所以我们直接到官网下载最新版JDK即可,JDK下载地址:
https://www.oracle.com/java/technologies/javase-downloads.html
JMeter下载地址:
https://jmeter.apache.org/download_jmeter.cgi
下载完成安装好JDK后,直接解压JMeter目录,如图所示:
这里提前将插件管理器装上,方便之后扩展更多的功能,下载地址:
https://jmeter-plugins.org/install/Install/
下载完成后将plugins-manager
放到JMeter目录下的lib/ext/下即可。
完成上述步骤环境搭建就算完成了,接下来就可以运行JMeter了。
使用教程
1. 启动JMeter
终端执行jmeter.sh脚本即可,启动后界面如下:
同时可以在终端看到一段如下提示:
这里提到,在测试的时候不要用GUI模式,需要通过执行命令来进行测试,GUI界面是配置测试用例的时候用的,同时说到可以增加Java的堆内存来满足我们的测试需求,在进行并发很大的测试的时候,需要开更多的Java线程则需要修改此项。
2. 测试计划
点击这个图标,填写测试计划名称和一些描述信息来创建一个测试计划。
在这里可以定义一些全局变量,在计划中的其他位置可以直接通过${name}
的使用这些变量:
3. 线程组
JMeter的线程组分为3种类型:
3.1 setUp Thread Group
前置线程组,主要用于完成测试前置的一些功能,比如用户登录之类的,当执行计划开启时,首先会执行这个线程组内的计划任务。
3.2 Thread Group
常规线程组,大多数测试用例都是配置在这里的,一个线程组我们可以看作是一组虚拟用户,线程组中的每个线程可以当作是一个虚拟用户,可以在线程组中配置多个线程来模拟大量用户。
3.3 tearDown Thread Group
后置线程组,在这里主要是完成一些测试完成之后的收尾工作,比如用户登出,数据库连接断开等等。
3.4 线程组设置
在这里可以配置当用例发生错误之后的线程组的行为:
- Number of Threads(要并发的用户数量)
- Ramp-up period( 要在多长时间内启动这么多个用户)
- Loop Count (任务的循环次数)
3.5 线程组总结
所有的线程组都可以创建多个,并且都是相互独立的,可以勾选执行计划配置中的Run Thread Groups consecutively(i.e.one at time)
,来控制是否需要顺序执行线程组。
4. 测试用例
4.1 创建用例
有很多种用例,这里创建的是Http Request
,ThreadGroup->Add->Simpler->Http Request。
如图所示,可以对Http请求的各种参数进行设置。
4.2 结果断言
JMeter内置很多种断言工具,可以通过点击测试用例,Add->Assertions来创建,下面以Json Assertion为例,如图:
可以设置需要断言的Json路径,已经期望得到的结果,支持正则表达式,勾选Invert assertion
后请求如果返回的不是期望结果,本次请求将视为失败,在请求结果中会显示为红色,并在聚合报告中统计为失败。 (结果查询和聚合报告会在后文中讲到)
4.3 前后置处理器
顾名思义就是在请求发起前和请求发起后执行。在后置处理器中,常通过View Results Tree
来观察请求的结果,通过结果查询可以方便的配置断言逻辑以及断言方式。 View Results Tree
界面如下:
当请求的结果断言不通过或http请求失败时,结果会显示为红色。
4.4 聚合报告
通过Add->Listener->Summary Report可以创建聚合报告监听器,示例如图:
聚合报告中反应了很多测试数据,这些正是我们所关心的数据:
-
- Label:即用例的名字。
- Samples:取样次数,即我们的用例执行了多少次,也就是我们设置的线程数以及循环次数 。
- Average:平均响应时间,即单个Request的平均响应时间。
- Median:中位数,也就是50%用户的响应时间。
- 90%Line:90%用户的响应时间。
- Min:最小响应时间。
- Max:最大响应时间。
- Error%:错误率——错误请求数/请求总数。
- Throughput:吞吐量,默认情况下表示每秒完成的请求数(Request per Second)。
- KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec。
这里需要注意,每次测试数据在报告之中是累加的,在完成一组测试之后要记得清理结果。
测试报告
JMeter是自带测试报告生成机制的,在我们通过上述方式创建好测试用例之后,保存会生成一个 .jmx
文件,在之后的测试中只需要导入这个脚本即可再次进行之前的测试,同时可以复制到任何地方使用,非常方便。
以命令行执行脚本: shell script jmeter -n -t ./xxx/name.jmx -l ./xxx/name.jtl -e -o ./xxx/name/reports
通过执行以上命令启动测试计划,将结果存入.jtl
文件,并且同时输出测试报告。
JMeter的测试报告数据非常丰富,它以采集数据生成了各种图表可以更加直观的观察我们的测试数据。除了聚合报告中提到的数据,它还包含了各用例响应时间随时间的走势图等等。