Jmeter-非GUI命令行模式详解

1.背景说明:

JMeter执行方式有两种,一种是GUI模式,一种是非GUI模式。
GUI模式就是界面模式,非GUI模式就是命令行模式。GUI模式主要用来编写和调试脚本用的,接口的性能测试最好是采用命令行模式,因为该模式可以和其它框架进行对接,进行自动化测试平台的集成。

2.应用场景

  1. 无需交互界面或受环境限制(图形化界面消耗更多资源,如CPU和内存,容易使压力机达到瓶颈,从而影响测试结果)
  2. 远程或分布式执行(同时生成更多的压力请求,达到客户端能模拟大并发请求的目的)
  3. 持续集成,通过shell脚本或批处理命令把脚本配置到Jenkins上实现持续集成,生成的测试结果可被报表生成模块直接使用,便于生成报告

3.优点

  1. 节约系统资源:无需启动界面,节约系统资源
  2. 便捷快速:仅需启动命令行,输入命令便可执行
  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.示例

  1. 执行测试脚本,指定结果及日志路径
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的聚合报告浏览结果文件,查看最终的结果,如下所示:
在这里插入图片描述

  1. 运行测试并生成测试报告
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,可以看到完整的性能测试报告:
在这里插入图片描述

  1. 分布式(远程)执行默认服务器列表
    在 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
在这里插入图片描述

  1. 分布式(远程)执行指定服务器列表
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正常启动。