命令行执行
- 自动化执行:将性能测试集成到持续集成/持续交付(CI/CD)流程中,实现自动化执行。
- 批量执行:需要在多个环境、配置或数据集上执行多个测试计划。
- 远程执行:在远程服务器上执行性能测试,例如分布式测试环境或云服务器。
- 资源优化:在资源受限的环境中运行测试,例如模拟大量用户并发访问。
- 性能监控:实时监控性能指标并将数据导出到外部监控工具进行处理和展示。
GUI 执行
- 单个测试执行:只需要执行单个测试计划,无需自动化或批量执行。
- 实时调试和修改:需要实时调试和修改测试计划,例如在测试执行过程中发现问题并需要即时修改脚本。
- 小规模测试:进行小规模的性能测试,模拟少量用户并发访问。
这些情况只是一般性的指导,具体使用命令行执行还是 GUI 执行取决于你的具体需求和情况。在做出决策时,考虑自动化需求、批量执行需求、远程执行需求、资源限制、性能监控以及实时调试和修改的需求,选择适合的执行方式。
注意:
当进行压力测试时,是否需要在图形用户界面(GUI)上执行压测取决于项目的规模和并发量。对于小项目或并发量较低的情况,可以直接在GUI上运行测试。如果压测机的数量较多或者压测机的配置高于被压测机,也可以通过GUI运行测试。这在面试过程中,有些人可能会错误地认为压力测试一定需要使用非GUI方式,但这是片面的观点。
另外,如果用户要求满足1万个并发用户运行测试,这将需要较高的服务器配置才能支撑。在这种情况下,我们可以将服务器配置写入性能测试报告中,并提供最大并发数的建议供用户参考。这样用户就能了解到服务器配置对于满足并发需求的重要性,并可以根据报告中的建议进行决策。
一、使用信息
帮助
jmeter -h
参数信息(也就是第二大点)
jmeter.bat(Windows)/jmeter.sh(Linux) -?
GUI
jmeter.bat(Windows)/jmeter.sh(Linux)
非 GUI
jmeter.bat(Windows)/jmeter.sh(Linux) -n -t test-file [-p property-file] [-l results-file] [-j log-file] -e -o [Path to output folder]
-n: 指定以非GUI模式运行JMeter。这意味着JMeter将在命令行中执行测试计划,而不会打开图形用户界面。
-t test-file: 指定要运行的测试文件。你需要提供测试计划文件的路径和名称。
-p property-file(可选): 指定属性文件,用于加载JMeter的配置。属性文件可以包含自定义的配置参数。
-l results-file(可选): 指定结果文件的路径和名称,用于保存测试结果。测试结束后,JMeter将结果保存为 CSV 格式的文件。
-j log-file(可选): 指定日志文件的路径和名称,用于记录JMeter的日志信息。
-e -o [Path to output folder]: 生成报告。使用这两个选项可以指定生成HTML报告的输出文件夹的路径。JMeter将根据测试结果生成一个包含图表和统计数据的HTML报告。
总结起来,这个命令的作用是在非GUI模式下运行指定的JMeter测试文件,并将测试结果保存为CSV文件。然后,根据这些结果生成一个包含图表和统计数据的HTML报告。请注意,[Path to output folder] 是一个占位符,你需要替换为实际的输出文件夹的路径。确保指定的路径是有效的,并且你有足够的权限在该位置创建文件和文件夹。
举例说明
jmeter.bat(Windows)/jmeter.sh(Linux) -n -t test.jmx -l results.jtl -j jmeter.log -e -o report
-n: 指定以非 GUI 模式运行 JMeter。
-t test.jmx: 指定要运行的测试文件为 test.jmx。该文件应该是一个 JMeter 测试计划的 XML 文件,它包含了你要执行的测试脚本和配置。
-l results.jtl: 指定结果文件的路径和名称为 results.jtl。在测试执行期间,JMeter 会将结果以 CSV 格式写入到这个文件中。
-j jmeter.log: 指定日志文件的路径和名称为 jmeter.log。JMeter 会将日志信息写入到这个文件中,包括错误信息、警告和其他运行时日志。
-e -o report: 生成报告。使用 -e 选项告诉 JMeter 在执行结束后生成报告,-o report 则指定了报告的输出文件夹为 report。在这个例子中,报告将生成在当前工作目录下的 report 文件夹中。
CSV文件转换为HTML 报告
jmeter.bat(Windows)/jmeter.sh(Linux) -g [csv results file] -o [path to output folder (empty or not existing)]
-g [csv results file]: 指定要生成报告的 CSV 结果文件。你需要提供一个已经存在的 CSV 文件作为输入,该文件包含了 JMeter 测试的结果数据。
-o [path to output folder (empty or not existing)]: 指定报告的输出文件夹路径。你可以提供一个空的文件夹路径或者一个不存在的文件夹路径,JMeter 将在指定的路径下生成报告。
举例说明
Windows: jmeter.bat -g results.csv -o report
Linux: jmeter.sh -g results.csv -o report
-g results.csv: 指定要生成报告的 CSV 结果文件为 results.csv。你需要将实际的 CSV 结果文件路径和文件名替换为 results.csv。
-o report: 指定报告的输出文件夹为report。在这个例子中,报告将生成在当前工作目录下的report文件夹中。
设置代理服务器
jmeter.bat(Windows)/jmeter.sh(Linux) -H [your.proxy.server] -P [your proxy server port]
-H [your.proxy.server]: 这个参数用于指定代理服务器的主机名或 IP 地址。你需要将 [your.proxy.server] 替换为实际的代理服务器主机名或 IP 地址。
-P [your proxy server port]: 这个参数用于指定代理服务器的端口号。你需要将 [your proxy server port] 替换为实际的代理服务器端口号。
举例说明
Windows: jmeter.bat -H [your.proxy.server] -P [your proxy server port]
Linux: jmeter.sh -H [your.proxy.server] -P [your proxy server port]
-H [your.proxy.server]: 指定代理服务器的主机名或IP地址。你需要将[your.proxy.server]替换为实际的代理服务器主机名或 IP 地址。
-P [your proxy server port]: 指定代理服务器的端口号。你需要将[your proxy server port]替换为实际的代理服务器端口号。
启动Jmeter服务器,用于分布式压测(即远程启动)
jmeter-server.bat(Windows)/jmeter-server(Linux)
Windows:jmeter-server.bat
Linux:./jmeter-server
举例说明
jmeter -n -t testplan.jmx -R 192.168.0.101,192.168.0.102
-n 表示以非GUI模式运行JMeter,-t testplan.jmx 指定要运行的测试计划文件。
-R 后跟着要连接的JMeter服务器的IP地址或主机名,多个服务器之间用逗号分隔。
在这个例子中,JMeter将连接到IP地址为192.168.0.101和192.168.0.102的两台服务器上执行负载测试。
jmeter -n -t testplan.jmx -r
-r 表示 JMeter 将在本地机器上启动一个服务器实例,并将其作为一个远程服务器来执行负载测试。这对于简化分布式负载测试的设置很有用,因为你不需要单独启动远程服务器实例。
二、命令行选项
打印命令行选项并退出
该选项不需要参数
jmeter --?
打印使用信息并退出
打印使用信息并退出
jmeter -h 或 --help
打印版本信息并退出
该选项不需要参数
jmeter -v 或 --version
指定要使用的Jmeter属性文件
参数是属性文件的路径。
jmeter -p 或 --propfile /path/to/my.properties
添加额外的 JMeter 属性文件
参数是属性文件的路径。
jmeter -q 或 --addprop /path/to/extra.properties
指定要运行的JMeter测试文件(.jmx)
参数是测试文件的路径。
jmeter -t 或 --testfile /path/to/mytest.jmx
将样本记录到指定的文件
参数是日志文件的路径。
jmeter -l 或 --logfile /path/to/results.jtl
指定 JMeter 的日志配置文件(log4j2.xml)
参数是配置文件的路径。
jmeter -i 或 --jmeterlogconf /path/to/log4j2.xml
以非 GUI 模式运行JMeter
该选项不需要参数
jmeter -n 或 --nongui
运行JMeter服务器
该选项不需要参数
jmeter -s 或 --server
设置代理服务器的代理方案
参数是代理方案的名称
jmeter -E 或 --proxyScheme https
设置 JMeter 使用的代理服务器
参数是代理服务器的主机地址
jmeter -H 或 --proxyHost proxy.example.com
设置 JMeter 使用的代理服务器端口
参数是端口号
jmeter -P 或 --proxyPort 8080
设置非代理主机列表
参数是非代理主机的列表,使用|分隔多个主机。
jmeter -N 或 --nonProxyHosts *.apache.org|localhost
设置 JMeter 使用的代理服务器用户名
参数是用户名
jmeter -u 或 --username myusername
设置 JMeter 使用的代理服务器密码
参数是密码
jmeter -a 或 --password mypassword
定义额外的 JMeter 属性
参数是属性名称和属性值的组合,使用=分隔
jmeter -J 或 --jmeterproperty myproperty=value
定义全局属性(发送到服务器)
参数是属性名称和属性值的组合,使用=分隔。
jmeter -G 或 --globalproperty port=123 或 jmeter -G global.properties
定义额外的系统属性
参数是属性名称和属性值的组合,使用=分隔。
jmeter -D 或 --systemproperty myproperty=value
指定额外的系统属性文件
参数是属性文件的路径
jmeter -S 或 --systemPropertyFile /path/to/system.properties
在启动测试之前强制删除现有的结果文件和 Web 报告文件夹(如果存在)
这个选项不需要参数
jmeter -f 或 --forceDeleteResultFile
设置日志级别
参数是日志类别和级别的组合,使用=分隔。
jmeter -L 或 --loglevel jorphan=INFO 或 jmeter -L 或 --loglevel jmeter.util=DEBUG
启动远程服务器(根据 remote_hosts 定义)
该选项不需要参数
jmeter -r 或 --runremote
启动指定的远程服务器(覆盖 remote_hosts)
参数是远程服务器的主机名或IP地址,使用英文逗号分隔多个服务器。
jmeter -R 或 --remotestart server1,server2
使用指定的 JMeter 主目录
参数是主目录的路径
jmeter -d 或 --homedir /path/to/jmeter
在测试结束时退出远程服务器(非 GUI 模式)
这个选项不需要参数
jmeter -X 或 --remoteexit
仅生成报告仪表板
参数是结果文件的路径
jmeter -g 或 --reportonly /path/to/results.jtl
在负载测试后生成报告仪表板
该选项不需要参数
jmeter -e 或 --reportatendofloadtests
指定报告仪表板的输出文件夹
参数是输出文件夹的路径
jmeter -o 或 --reportoutputfolder /path/to/report
根据我们自身需要进行取用。我们通过gui进行相关脚本配置完成后,并成功运行,常见命令行输入如下:
jmeter -n -t test_cmd.jmx -l test.jtl
注意:我的jmx文件,是放在桌面下的,这里应该-n -t 应该是绝对路径,生成的jtl文件也应该是绝对路径,再写该文章的时候,发现一个问题,若不配置参数绝对路径,就不会出现打印的摘要信息。
运行效果,如图:
-
summary + 1 in 00:00:00 = 5.2/s Avg: 49 Min: 49 Max: 49 Err: 0 (0.00%) Active: 1 Started: 1 Finished: 0
:这是测试第一行摘要信息。它显示在过去的 0 秒内执行了 1 个请求,平均每秒执行 5.2 个请求。其中,平均响应时间为 49 毫秒,最短响应时间为 49 毫秒,最长响应时间为 49 毫秒。错误数为 0,表示没有发生错误。当前活跃线程数为 1,已启动线程数为 1,已完成的线程数为 0。 -
summary + 1132 in 00:00:26 = 43.3/s Avg: 45 Min: 16 Max: 113 Err: 0 (0.00%) Active: 2 Started: 2 Finished: 0
:这是测试第二行摘要信息。它显示在过去的 26 秒内执行了 1132 个请求,平均每秒执行 43.3 个请求。其他指标和前面的摘要信息类似。 -
summary = 1133 in 00:00:26 = 43.0/s Avg: 45 Min: 16 Max: 113 Err: 0 (0.00%)
:这是整个测试的总体摘要信息。它显示在过去的 26 秒内执行了 1133 个请求,平均每秒执行 43.0 个请求。其他指标和前面的摘要信息类似。 -
summary + 167 in 00:00:04 = 44.1/s Avg: 45 Min: 17 Max: 79 Err: 0 (0.00%) Active: 0 Started: 2 Finished: 2
:这是测试第三行摘要信息。它显示在过去的 4 秒内执行了 167 个请求,平均每秒执行 44.1 个请求。其他指标和前面的摘要信息类似。 -
summary = 1300 in 00:00:30 = 43.1/s Avg: 45 Min: 16 Max: 113 Err: 0 (0.00%)
:这是测试第四行的总体摘要信息。它显示在过去的 30 秒内执行了 1300 个请求,平均每秒执行 43.1 个请求。其他指标和前面的摘要信息类似。 -
Tidying up ... @ August 8, 2023 3:34:33 PM CST (1691480073810)
:这表示 JMeter 正在进行一些清理操作,释放资源。时间戳表示清理操作开始的时间。 -
... end of run
:这表示测试运行结束
会在桌面生成两个文件一个是log文件、jtl文件。
需要注意的是:在我们通过命令行执行的时候,一定注意时间
不然会一直发送请求,就完全没有参考意义的。
查看jtl文件,如图:
察看结果树需要注意的是,再我们导入jtl文件时,是没有响应内容的。如图:
可以配置如下:
1.在bin目录下user.properties追加配置:
jmeter.save.saveservice.output_format=xml
jmeter.save.saveservice.response_data=true
jmeter.save.saveservice.samplerData=true
jmeter.save.saveservice.requestHeaders=true
jmeter.save.saveservice.url=true
jmeter.save.saveservice.responseHeaders=true
2.在bin目录下修改配置,搜索jmeter.save.saveservice.response_code和jmeter.save.saveservice.samplerData。如图:
注意:在非GUI模式下,是默认不保存的。修改完配置后重启,再此导入即可见响应信息内容
当生成 JMeter 自带的 HTML 报告时,该报告通常以原生的 HTML 格式呈现,对于非技术人员或开发人员来说可能不太友好。建议需要整理一个正式的书面报告,进行适当的整理和提取关键信息,以便更好地传达测试结果和性能分析。
-
生成 HTML 报告:使用 JMeter 的命令行选项
-e -o testfile
生成 HTML 报告。这将在指定的testfile
目录下生成报告文件。 -
报告整理:打开生成的 HTML 报告,并浏览其中的信息。根据你的需求和目标,选择要在书面报告中呈现的关键信息。
-
截图选取:根据报告中的图表和数据,选择适当的部分进行截图。这些截图可以是性能趋势图、响应时间分布图、吞吐量图等。确保截图清晰可读,并与报告内容相符。
-
写入报告:在书面报告中,使用文字描述性地解释每个截图所展示的内容和观察结果。可以提供一些关键指标的解释,例如平均响应时间、吞吐量、错误率等。
-
结论和建议:根据测试结果和观察,提供一份结论和建议部分,总结系统的性能表现,并提出优化建议或改进措施。
通过整理和提取关键信息,并结合截图和文字解释,你可以为非技术人员或开发人员提供一份更易于理解和阅读的报告,以便更好地传达测试结果和性能分析,并提供有针对性的建议。
jmeter -n -t test_cmd.jmx -l test.jtl -e -o testfile
效果如图:
其他命令常见的如开启jmeter服务、远程启动相关命令,至于其他根据自己需要。