jmeter非GUI模式
jmeter非gui使用模式
1、JMeter的非GUI模式说明
之前,我们在启动JMeter时,一直会有一个黑色命令行窗口,窗口中提示了如下的信息:
1 | properties |
信息中提示:
1、不要使用 GUI 模式进行负载测试! GUI 模式仅用于测试创建和测试调试。
2、对于负载测试,使用非 GUI 模式。
非 GUI 模式启动方式:jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
3、可以增加Java虚拟机的堆空间,以满足您的测试需求。
在JMeter批处理文件中修改当前环境变量:HEAP=”-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m”。
说明:
Java虚拟机在执行Java程序的过程中,会把它所管理的内存划分为若干个不同的数据区域。主要包括:程序计数器、虚拟机栈、本地方法栈、Java堆、方法区(运行时的常量池)。
如下如图所示:
而Java Heap内存,简单的说是用来存放new出来的对象和数组。也就是负责运行时数据的存放,由JVM的自动管理。
在做负载测试时,Java Heap内存空间,调整的大一些,可以避免因Java堆内存不足,而终止测试的情况。如报错:java.lang.OutOfMemoryError: Java heap space。
2、为什么使用非GUI模式运行JMeter
使用GUI方式启动JMeter,在运行线程较多的测试时,会造成内存和CPU的大量消耗,导致客户机卡死。
所以做一般的接口测试、脚本调试、压力测试脚本编写等操作时,我们都会选用GUI模式,因为这里不会涉及到压力测试,只是调试脚本,我们本身关注的也是结果是否通过。而在进行负载测试时,都是使用命令行模式执行脚本,来减少因系统资源的消耗,对测试结果的影响。
并且命令行方式支持在多个环境下使用,可以在Windows系统的dos环境下,也可以在Linux环境上执行。
命令行模式优点:
1、图形化界面消耗更多资源,如CPU和内存,容易使压力机达到瓶颈,从而影响测试结果。
2、图形化界面不支持大型的负载测试和性能测试,并发较大时,JMeter会崩溃。
3、命令行方式可以把脚本配置到Jenkins上实现持续集成,做成自动化测试。通过shell脚本或批处理命令均可执行,测试结果可生成报表,可被直接使用生成图形化报告。
4、支持远程或分布式执行。
3、使用非GUI模式运行JMeter
(1)非GUI模式运行JMeter步骤
1)确定执行路径
执行命令前要检查当前目录是否是%JMeter_Home%\bin目录。
如果 JMeter 脚本不在当前目录,需要指定完整的路径。
如果要把执行的结果保存在其他地方,也要指定完整的路径。
命令中不指定测试计划与测试结果的路径时,测试计划只在当前目录中查找,测试结果默认都是在执行JMeter命令所在的目录下生成。
2)执行命令
例如,上面日志中提示的命令方式,如下:
jmeter -n -t [testplan jmx file] -l [results file] -e -o [Path to web report folder]
参数解释:
-n:表示non gui mode,就是非图形化模式。
-t:指定JMX脚本路径,即test plan(测试计划)。后面跟需要运行的JMeter 脚本的路径和脚本名称。
-l:指定结果文件路径。
后面跟输出结果文件路径和结果文件名称。
1)若没有指定指定结果文件路径,则自动创建,可以生成.csv文件或者.jtl文件。
2)若只写脚本名称,则默认是在当前目录查找或创建。
-e:设置测试完成后生成测试报表。
-o:指定测试报表生成文件夹,该文件夹必须为空或不存在。
(2)其它参数说明
对于负载测试,您必须在非GUI模式下运行JMeter,以获得最佳结果。
为此,请使用以下命令选项:
- -h 帮助
- -n 命令行模式
- -t 指定要运行的JMX脚本路径
- -l 指定结果文件路径,运行前要确保xxx.jtl不存在,不然报错
- -r 分布式(远程)执行,服务器列表由JMETER_HOME\bin\Jmter.properties文件中remote_hosts指定
- -R 指定分布式(远程)服务器列表,参数为服务器列表,配置形式同remote_hosts
- -j 指定执行日志路径
- -g CSV结果文件,指定测试执行结果文件路径,仅用于生成测试报表
- -e 设置测试完成后生成测试报表
- -o 报表文件夹路径,执行测试报表生成文件夹,文件夹必须为空或者不存在
- -H 指定代理服务器域名或代理服务器IP,一般填写代理IP
- -P 指定代理服务器端口号
4、CLI模式运行示例
示例一:
测试计划脚本在%JMeter_Home%\bin目录中,且测试结果也生成在%JMeter_Home%\bin目录中。
在CMD中进行到%JMeter_Home%\bin位置,在这里我指定路径,执行命令如下:
1 | jmeter -n -t "D:\download\apache-jmeter-5.6.2\bin\examples\login.jmx" -l "D:\download\apache-jmeter-5.6.2\bin\examples\login.jtl" |
命令含义:以命令行模式运行指定目录下的login.jmx测试脚本文件,并在指定目录下输出测试结果文件login.jtl。
提示:
- 测试脚本一定要在bin目录中,测试结果文件可以不创建,没有则自动创建,不写路径就默认创建在bin目录中。
- 如果已存在测试结果文件,测试结果会追加到结果文件中。(文件不能处于被其他软件打开状态)
- 测试结果文件和日志信息文件,都是这种方式,下面就不重复介绍了。
示例二:
把测试脚本文件在%JMeter_Home%\bin目录中,然后把测试结果文件和测试日志信息,输出到指定的路径。
在CMD中进行到%JMeter_Home%\bin位置,执行命令如下:
1 | bash |
示例三:
执行任何位置的JMeter脚本文件。
在CMD中进行到%JMeter_Home%\bin位置,执行命令如下:
1 | bash |
示例四:(推荐)
在任何位置,执行任何位置的脚本。
前提:需要配置JMeter的bin目录到环境变量中。
在任何位置执行如下命令:
1 | bash |
配置完成JMeter的环境变量,就可以在任何位置执行JMeter命令,不用每次都到%JMeter_Home%\bin位置执行命令了。
同理:执行命令所在目录中的脚本,同样可以不写路径。
示例五:
默认分布式执行,命令如下:
1 | bash |
示例六:
指定IP分布式执行,命令如下:
1 | bash |
即:启动remote_hosts分布式测试。
注意:如果使用-R serverIP port模式,将启动指定的远程压力机,配置文件中设置的 remote_hosts 属性将被此设置覆盖,类似指定远程压力机执行测试。
示例七:
生成测试结果报表,即:生成 HTML报告,并保存报告到指定文件夹中。
命令格式:
jmeter -n -t 【Jmx脚本位置】-l 【结果文件result.jtl存放的位置】-e -o 【报告指定文件夹】
示例:
1 | bash |
这条命令会生成一个涵盖测试结果的HTML文件
参考:http://t.csdnimg.cn/DNbqs