Jmeter 简单入门
JMeter 是 Apache 组织开源的一款纯 Java 编写的压力测试软件。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来也扩展到其他测试领域。包括 FTP、SMTP、TCP、JMS、数据库等等。
准备工作
Jmeter 要求使用 Java8 以上的 JDK 版本,如果你使用的版本低于 8,那么需要先更新 JDK 版本并且正确配置了 JAVA_HOME
才能正常使用 Jmeter。
下载安装
建议下载 Jmeter 最新版本,目前官网最新版本是5.1.1。下载二进制压缩包之后解压即可。
修改配置
Jmeter 默认是语言是英语,如果你想切换成中文的话可以在配置文件中修改,将 bin/jmeter.properties
中的 #language=en
注释去掉,en
改为 zh_CN
。
打开 GUI 界面
直接运行 bin 目录下的启动脚本
- Mac: bin/jmeter
- Windows: bin/jmeter.bat
说明
Jmeter GUI 是给用户编写以及调试测试计划的,实际执行压测任务的时候需要是 CLI 模式(命令行模式)运行,官方说法 Don't run load test using GUI mode !
使用 CLI 模式,可以生成包含结果的 CSV(或XML)文件,并让 JMeter 在测试结束时生成 HTML 报告。默认情况下,JMeter 会在运行时提供负载测试的摘要。你还可以在测试期间使用 Backend Listener 获得实时结果。
如何构建一个 web 测试计划
本节以构建一个简单的测试计划为例:模拟 5 个用户同时请求 2 个接口,循环两次,总请求数是 5 x 2 x 2 = 20.
添加线程组
根据我们的计划需求,填写的参数分别为:
- 线程数:5
- Ramp-up:1
- 循环次数:2
线程组参数
- 取样器错误后执行的动作:
- 继续:正常往下执行,相当于忽略了错误
- 启动下一进程循环:终止当前循环,开始下一循环
- 停止线程:停止当前线程,其他线程继续执行
- 停止测试:当前执行的采样器结束后,停止测试计划
- 立即停止测试:立即停止测试计划
- 线程数:也就是用户数,并发数,指的是同时发出多少个请求
- Ramp-up 时间:线程启动时间,指的是在多长时间内将全部线程启动完成。设置为 0 表示立即启动所有线程。
- 循环次数:循环执行多少次,如果勾选了前面的“永远”,那么将会一直执行。
- 延迟创建线程直到需要:当线程需要执行的时候,才会被创建。如果不勾选此选项,所有线程在开始时就全部被创建。
- 调度器
- 持续时间:整个测试计划持续的时间。
- 启动延迟:测试计划启动后,会被延迟启动,时间为选项填入的时间。
添加第一个 HTTP 请求
右键点击“线程组”->“添加”->“取样器”->“HTTP 请求”。这里用 GitHub 的 API 来做示例:https://api.github.com/users/WhiteDG
使用同样的方式添加第二个 HTTP 请求:https://api.github.com/users/WhiteDG/repos
添加监听器,查看测试结果
如果你需要独立查看每一个请求的测试结果,你可以为每一个请求都添加监听器,如果你只需要查看总的测试结果,则只需要为线程组添加监听器。这里为了演示,我们都加上一个最简单的“察看结果树”。
右键点击“线程组”->“添加”->“监听器”->“察看结果树”,对两个 HTTP 请求也用同样的方式加上监听器。
GUI 执行测试计划
测试计划编写完成后,按快捷键 Ctrl+s
保存,保存到 bin 目录,命名为 demo.jmx,然后点击 执行
按钮,即可开始测试,测试过程中可以通过 “选项”->“日志查看”
来查看 Jmeter 执行日志。
执行结果如下:
CLI 模式执行测试计划
前面说到 Jmeter GUI 只是用来编写和调试测试计划,实际执行测试计划要用 CLI 模式,才能获取最佳的测试结果,下面就用 CLI 模式来执行前面写好的测试计划,并且生成测试报告。在执行之前,首先了解一下 CLI 模式。
CLI 模式
参数
- -n: 指定 Jmeter 使用 CLI 模式运行
- -t: 指定编写完成的测试计划脚本( jmx 文件)
- -l: 指定记录样本结果的 JTL 文件的名称
- -j: 指定 Jmeter 运行日志输出文件
- -r: 在指定的服务器(JMeter property “remote_hosts”)上运行测试计划
- -R: 在指定的多个远程服务器上运行测试计划
- -g: 仅生成报告仪表盘
- -e: 测试完成后生成报告仪表板
- -o: 指定测试报告输出的位置,文件夹不得存在或为空
- -H: 指定代理服务器主机名或IP地址
- -P: 指定代理服务器端口
执行命令
为了方便演示,这里将结果全部保存在 bin 目录下的 result 文件夹
1
./jmeter -n -t demo.jmx -l result/result.jtl -j result/log/jmeter.log -e -o result/report