JMeter 非 GUI 方式的常用参数和执行方式。
基本命令语法
bash
jmeter -n -t [测试脚本.jmx] -l [结果文件.jtl] [其他选项]
-n :启动非 GUI 方式(必选)
-t :指定要执行的 JMX 测试计划文件
-l :将采样结果输出到指定的 JTL 文件
常用参数
-n
启用非 GUI 方式,不启动图形界面。
-t
指定测试脚本文件途径,如 -t test.jmx。
-l
测试结果输出的 JTL 文件途径,如 -l result.jtl。建议使用 .jtl 后缀。
-j
JMeter 自身运行日志文件途径,如 -j jmeter.log。不指定时默认输出到 jmeter.log。
-e
测试结束后自动生成 HTML 报告,需配合 -o 一起使用。
-o
存放 HTML 报告的目录,该目录必须不存在或为空,如 -o ./report。可和 -f 配合强制清空。
-f
强制删除已经存在的 JTL 结果文件和报告目录,以便重新运行。
-R
指定远程 slave 节点列表,多个节点用逗号分隔,如 -R 192.168.1.10:1099,192.168.1.11:1099。此时 master 只负责收集,不执行测试。
-r
启动所有在 jmeter.properties 中配置的远程 slave 节点。
-H / -P
设置代理主机和端口,用于通过代理发起测试。如 -H proxy.com -P 8080。
-J属性名
向测试脚本传入自定义属性,可在脚本中通过 ${__P(属性名, 默认值)} 动态引用。
如 -Jthreads=100 -Jduration=300。
-L
设置日志级别,可选值如 ERROR、WARN、INFO、DEBUG(需大写)。如 -LDEBUG。
典型使用示例
1. 最简单的执行
bash
jmeter -n -t my_test.jmx -l result.jtl
仅运行脚本并保存原始结果。
2. 执行并直接生成 HTML 报告
bash
jmeter -n -t my_test.jmx -l result.jtl -e -o ./report
报告目录 ./report 必须为空或不存在。如果重复执行可加上 -f 强制包括:
bash
jmeter -n -t my_test.jmx -l result.jtl -e -o ./report -f
3. 命令行动态传入线程和循环次数
先在 JMX 中使用函数 ${__P(threads, 10)} 和 ${__P(loops, 1)} 定义变量,然后执行:
bash
jmeter -n -t dynamic.jmx -Jthreads=200 -Jloops=50 -l result.jtl
4. 分布式执行
启动所有已配置的远程 slave:
bash
jmeter -n -t test.jmx -r -l result.jtl
只指定部分远程机器:
bash
jmeter -n -t test.jmx -R 10.0.0.5:1099,10.0.0.6:1099 -l result.jtl
5. 通过代理网络执行
bash
jmeter -n -t test.jmx -H proxy.company.com -P 8080 -l result.jtl
6. 在 CI/CD 中的典型用法(如 Jenkins)
bash
rm -rf result.jtl report/
jmeter -n -t api_test.jmx -l result.jtl -e -o report
然后归档 report 目录或使用性能插件分析 JTL 即可。
注意事项
正式压测必须使用非 GUI 方式:GUI 会消耗大量客户端资源,导致测试结果失真,仅用于脚本开发和调试。
结果文件格式建议设为 CSV:在 user.properties 中配置 jmeter.save.saveservice.output_format=csv,比 XML 更省资源且便于处理。
调整 JVM 堆内存:大并发下需修改 jmeter 或 jmeter.bat 中的 HEAP 参数(如 -Xms2g -Xmx4g),避免内存溢出。
配合服务器监控:分析短板时不能只看 JMeter 报告,需同时监控 CPU、内存、IO、网络等标准。
操作系统途径差别:Linux/macOS 使用 jmeter 命令,Windows 使用 jmeter.bat,保证 JMETER_HOME/bin 已在环境变量中或使用绝对途径。