Jmeter-非GUI命令行模式详解
1.背景说明:
JMeter执行方式有两种,一种是GUI模式,一种是非GUI模式。
GUI模式就是界面模式,非GUI模式就是命令行模式。GUI模式主要用来编写和调试脚本用的,接口的性能测试最好是采用命令行模式,因为该模式可以和其它框架进行对接,进行自动化测试平台的集成。
2.应用场景
- 无需交互界面或受环境限制(图形化界面消耗更多资源,如CPU和内存,容易使压力机达到瓶颈,从而影响测试结果)
- 远程或分布式执行(同时生成更多的压力请求,达到客户端能模拟大并发请求的目的)
- 持续集成,通过shell脚本或批处理命令把脚本配置到Jenkins上实现持续集成,生成的测试结果可被报表生成模块直接使用,便于生成报告
3.优点
- 节约系统资源:无需启动界面,节约系统资源
- 便捷快速:仅需启动命令行,输入命令便可执行
- 易于持续集成:可通过shell脚本命令执行
4.参数详解
--?
打印命令行选项并退出
-h, --help
打印使用信息并退出
-v, --version
打印版本信息并退出
-p, --propfile <参数>
要使用的 jmeter 属性文件
-q, --addprop <参数>
额外的 JMeter 属性文件
-t, --testfile <参数>
要运行的 jmeter 测试(.jmx)文件
-l, --logfile <参数>
将样本记录到的文件
-i, --jmeterlogconf <参数>
jmeter 日志配置文件(log4j2.xml)
-j, --jmeterlogfile <参数>
jmeter 运行日志文件 (jmeter.log)
-n, --nongui
在 nongui 模式下运行 JMeter
-s, --server
运行 JMeter 服务器
-H, --proxyHost <参数>
为 JMeter 设置代理服务器以使用
-P, --proxyPort <参数>
设置 JMeter 使用的代理服务器端口
-N, --nonProxyHosts <参数>
设置非代理主机列表(例如 *.apache.org|localhost)
-u, --username <参数>
为 JMeter 使用的代理服务器设置用户名
-a, --password <参数>
为 JMeter 使用的代理服务器设置密码
-J, --jmeterproperty <参数>=<值>
定义额外的 JMeter 属性
-G, --globalproperty <参数>=<值>
定义全局属性(发送到服务器)
例如 -Gport = 123
或 -Gglobal.properties
-D, --systemproperty <参数>=<值>
定义附加系统属性
-S, --systemPropertyFile <参数>
附加系统属性文件
-f, --forceDeleteResultFile
在开始测试之前强制删除现有的结果文件和网络报告文件夹(如果存在)
-L, --loglevel <参数>=<值>
[category=]level 例如 jorphan=INFO、jmeter.util=DEBUG 或 com.example.foo=WARN
-r, --runremote
启动远程服务器(在 remote_hosts 中定义)
-R, --remotestart <参数>
启动这些远程服务器(覆盖 remote_hosts)
-d, --homedir <参数>
要使用的 jmeter 主目录
-X, --remoteexit
在测试结束时退出远程服务器(CLI 模式)
-g, --reportonly <参数>
仅从测试结果文件生成报告仪表板
-e, --reportatendofloadtests
负载测试后生成报告仪表板
-o, --reportoutputfolder <参数>
报表仪表板的输出文件夹
5.常用命令
对于负载测试,您必须在此模式下(不带 GUI)运行 JMeter 以从中获得最佳结果。
参数 | 解释 |
---|---|
-n | 指定JMeter 以非GUI模式运行 |
-t | 指定要运行的 JMeter 测试脚本文件 |
-l | 指定结果文件路径(jtl或csv) 参数为:结果文件路径,如果路径不存在时,不会自动创建 |
-j | 指定 运行日志文件的名称 参数为:日志路径,路径不存在时,不会自动创建,同时将日志输出至控制台 |
-r | 设置分布式(远程)执行,在 jmeter.properties中属性“ remote_hosts ”指定的服务器中运行测试 |
-R | 指定分布式(远程)服务器列表,在指定的远程服务器上运行测试 |
-g | 指定测试结果文件路径,仅用于生成测试报表 参数为:CSV文件 |
-e | 设置测试完成后生成测试报表 |
-o | 指定测试报表生成的文件夹。文件夹不得存在或为空 |
-H | 指定代理服务器主机名或 IP 地址 |
-P | 指定代理服务器端口号 |
-X | 运行完脚本后自动停止 jmeter-server |
6.示例
- 执行测试脚本,指定结果及日志路径
F:\apache-jmeter-5.2.1\bin>jmeter -n -t Test.jmx -l result.jtl -j test.log
Creating summariser <summary>
Created the tree successfully using Test.jmx
Starting standalone test @ Fri Nov 05 23:35:08 CST 2021 (1636126508900)
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary = 200 in 00:00:11 = 17.7/s Avg: 115 Min: 16 Max: 315 Err: 0 (0.00%)
Tidying up ... @ Fri Nov 05 23:35:20 CST 2021 (1636126520426)
... end of run
summary+ 是开始这个时点的报告。
summary= 是总结它之前的报告,呈现出的是当前时点之前总的情况,通常是均值。
最后一个summary=是本次压测总的情况,如果脚本按时正常结束的话,最后一次summary里面的值应该和你从GUI打开聚合报告或概括报告的值一致。
结果文件类型为 jtl 或 csv,可通过JMeter的聚合报告浏览结果文件,查看最终的结果,如下所示:
- 运行测试并生成测试报告
jmeter -n -t Test.jmx -l D;\Result.jtl -e -o D:\Jmeter-Report
运行上述命令后,会在D:\Jmeter-Report目录下生成一个HTML性能测试报告。此处需要注意的是,每一次执行,必须确保JMeter-Report目录下是空的,没有任何其他文件,同时.jtl文件也不能存在,运行后的整体目录结果如下:
进入JMeter-Report目录下,打开index.html,可以看到完整的性能测试报告:
- 分布式(远程)执行默认服务器列表
在 jmeter.properties中属性“ remote_hosts ”指定的服务器中运行测试
jmeter -n -t JMeter分布式测试示例.jmx -r -l report\01-result.csv -j report\01-log.log
命令行窗口输出如下所示:
执行机命令行输出如下所示:
执行机(Slave)端的日志文件默认生成在用户目录下。
若出现如下图所示情况,请检查:网络是否畅通、服务器域名(IP)及端口是否正确、执行机是否启动 jmeter-server.bat 或 jmeter-server
- 分布式(远程)执行指定服务器列表
jmeter -n -t Test.jmx -R 192.168.90.130:1099,192.168.90.173:1099 -l D;\Result.jtl -e -o D:\Jmeter-Report
通过-R参数,指定远程负载机,当然,能够运行成功的前提是负载机上的jmeter-server.bat正常启动。