『动善时』JMeter基础 — 55、JMeter非GUI模式运行
1、JMeter的非GUI模式说明
之前,我们在启动JMeter时,一直会有一个黑色命令行窗口,窗口中提示了这样的信息:
Jun 05, 2021 10:21:22 AM java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use NON GUI Mode:
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================
信息中提示:
- 不要使用 GUI 模式进行负载测试! GUI 模式仅用于测试创建和测试调试。
- 对于负载测试,使用非 GUI 模式。
非 GUI 模式启动方式:jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
- 可以增加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环境上执行。
命令行模式优点:
- 图形化界面消耗更多资源,如CPU和内存,容易使压力机达到瓶颈,从而影响测试结果。
- 图形化界面不支持大型的负载测试和性能测试,并发较大时,JMeter会崩溃。
- 命令行方式可以把脚本配置到Jenkins上实现持续集成,做成自动化测试。通过shell脚本或批处理命令均可执行,测试结果可生成报表,可被直接使用生成图形化报告。
- 支持远程或分布式执行。
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)其它参数说明
对于负载测试,您必须在这种模式下运行JMeter(没有GUI),以获得最佳结果。
为此,请使用以下命令选项:
更多内容可参考官方文档:https://jmeter.apache.org/usermanual/get-started.html#non_gui
4、CLI模式运行示例
示例一:
测试计划脚本在%JMeter_Home%\bin
目录中,且测试结果也生成在%JMeter_Home%\bin
目录中。
在CMD中进行到%JMeter_Home%\bin
位置,执行命令如下:
jmeter -n -t CLI_test.jmx -l result.jtl
命令含义:以命令行模式运行当前目录下的CLI_test.jmx
测试脚本文件,并在当前目录下输出测试结果文件result.jtl
。
如下图所示:
提示:
- 测试脚本一定要在
bin
目录中,测试结果文件可以不创建,没有则自动创建,不写路径就默认创建在bin
目录中。- 如果已存在测试结果文件,测试结果会追加到结果文件中。(文件不能处于被其他软件打开状态)
- 测试结果文件和日志信息文件,都是这种方式,下面就不重复介绍了。
示例二:
把测试脚本文件在%JMeter_Home%\bin
目录中,然后把测试结果文件和测试日志信息,输出到指定的路径。
在CMD中进行到%JMeter_Home%\bin
位置,执行命令如下:
jmeter -n -t CLI_test.jmx -l C:\Users\L\Desktop\cli\result.jtl -j C:\Users\L\Desktop\cli\test.log
如下图所示:
示例三:
执行任何位置的JMeter脚本文件。
在CMD中进行到%JMeter_Home%\bin
位置,执行命令如下:
jmeter -n -t C:\Users\L\Desktop\JMeterScript\CLI_test.jmx -l C:\Users\L\Desktop\cli\result.jtl
如下图所示:
示例四:(推荐)
在任何位置,执行任何位置的脚本。
前提:需要配置JMeter的
bin
目录到环境变量中。
在任何位置执行如下命令:
jmeter -n -t C:\Users\L\Desktop\JMeterScript\CLI_test.jmx -l C:\Users\L\Desktop\cli\result.jtl
如下图所示:
配置完成JMeter的环境变量,就可以在任何位置执行JMeter命令,不用每次都到
%JMeter_Home%\bin
位置执行命令了。同理:执行命令所在目录中的脚本,同样可以不写路径。
示例五:
默认分布式执行,命令如下:
jmeter -n -t CLI_test.jmx -r -l report\01-result.csv -j report\01-log.log
示例六:
指定IP分布式执行,命令如下:
jmeter -n -t CLI_test.jmx -R 192.168.10.25:1036 -l report\01-result.csv -j report\01-log.log
即:启动remote_hosts
分布式测试。
注意:如果使用
-R serverIP port
模式,将启动指定的远程压力机,配置文件中设置的remote_hosts
属性将被此设置覆盖,类似指定远程压力机执行测试。
示例七:
生成测试结果报表,即:生成 HTML报告,并保存报告到指定文件夹中。
命令格式:
jmeter -n -t 【Jmx脚本位置】-l 【结果文件result.jtl存放的位置】-e -o 【报告指定文件夹】
示例:
jmeter -n -t test1.jmx -l report\01-result.jtl -e -o tableresult
说明:最后三个命令,不进行演示,后面的文章中会详细说明。
『动善时』JMeter基础 — 55、JMeter非GUI模式运行的更多相关文章
- 『动善时』JMeter基础 — 55、使用非GUI模式运行JMeter(命令行模式)
目录 1.JMeter的非GUI模式说明 2.为什么使用非GUI模式运行JMeter 3.使用非GUI模式运行JMeter (1)非GUI模式运行JMeter步骤 (2)其它参数说明 4.CLI模式运 ...
- 『动善时』JMeter基础 — 31、JMeter中BeanShell断言详解
目录 1.BeanShell简介 2.Beanshell的内置变量和方法 3.BeanShell断言界面详解 4.BeanShell断言的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 ...
- 『动善时』JMeter基础 — 54、JMeter聚合报告详解
目录 1.聚合报告介绍 2.聚合报告界面详解 3.聚合报告中信息点说明 (1)百分位数的说明 (2)吞吐量说明 提示:聚合报告组件的使用和察看结果树组件的使用方式相同.本篇文章主要是详细的介绍一下聚合 ...
- 『动善时』JMeter基础 — 56、JMeter使用命令行模式生成HTML测试报告
目录 1.自动生成HTML图形化报告 2.使用已有的测试结果文件生成HTML报告 3.HTML图形化报告内容详解 (1)Dashboard页面:(重点查看) (2)Charts页面:(辅助分析) 4. ...
- 『动善时』JMeter基础 — 6、使用JMeter发送一个最基础的请求
目录 步骤1:创建一个测试计划 步骤2:创建线程组 步骤3:创建取样器 步骤4:创建监听器 步骤5:完善信息 步骤6:保存测试计划 步骤7:查看结果 总结:JMeter测试计划要素 当我们第一次打开J ...
- 『动善时』JMeter基础 — 7、jmeter.properties文件常用配置
目录 1.默认语言设置 2.配置默认编码格式 3.GUI图标放大比例设置 4.功能区工具栏图标大小设置 5.视图区目录树图标大小设置 6.内容区编辑字体设置 7.添加JMeter元素快捷键设置 8.捕 ...
- 『动善时』JMeter基础 — 27、通过JMeter函数助手实现参数化
目录 1.测试计划中的元件 2.数据文件内容 3.函数助手配置 (1)函数助手的打开方式 (2)函数助手界面介绍 (3)编辑后的函数助手界面 4.HTTP请求组件内容 5.线程组元件内容 6.脚本运行 ...
- 『动善时』JMeter基础 — 29、JMeter响应断言详解
目录 1.JMeter断言介绍 2.响应断言组件界面详解 3.响应断言组件的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 (3)响应断言界面内容 (4)查看运行结果 (5)断言结果组件 ...
- 『动善时』JMeter基础 — 36、JMeter接口关联【正则表达式提取器】
目录 1.正则表达式提取器介绍 2.正则表达式提取器界面详解 3.正则表达式提取器的使用 (1)测试计划内包含的元件 (2)请求一界面内容 (3)正则表达式提取器界面内容 (4)请求二界面内容 (5) ...
随机推荐
- java并发编程工具类JUC第二篇:ArrayBlockingQueue
类ArrayBlockingQueue是BlockingQueue接口的实现类,它是有界的阻塞队列,内部使用数组存储队列元素.这里的"有界"是指存储容量存在上限,不能无限存储元素. ...
- GO语言复合类型05---递归
package main import ( "fmt" "time" ) /* ·递归就是自己调自己 ·递归一定要有终止条件(否则就是无限死循环) */ /*使 ...
- Steam游戏《Northgard(北境之地)》修改器制作
日期:2021.06.07 博客期:181 星期一 [温馨提示]: 我现在把资源先放到开头,不想研究学习的就直接取用.如果修改器失效了,你们可以在博客园本页直接评论,也可以给我发邮件告诉我,就是不要到 ...
- java中存储mysql数据库时间类型【date、time、datetime、timestamp】
在MySQL中对于时间的存储自己见表的时候都是设置的varchar类型的,感觉挺方便的. 昨天拿别人建好的表写代码,发现这张表中时间类型为datetime的,凭感觉试了一下不行,网上查了刚开始试了好几 ...
- 基于区域的CNN(R-CNN)
基于区域的CNN(R-CNN) Region-based CNNs (R-CNNs) 基于区域的卷积神经网络或具有CNN特征的区域(R-CNN)是一种将深度模型应用于目标检测的开创性方法.在本节中,将 ...
- Usb-type-C端口实现的挑战与设计方案
Usb-type-C端口实现的挑战与设计方案 USB Type-C port implementation challenges and design solutions USB from 1.1 t ...
- 部署通用基础设施, 满足顶级 SLA 要求
部署通用基础设施, 满足顶级 SLA 要求 Telefónica 使用基于英特尔 至强 可扩展处理器和英特尔 傲腾 数据中心级固态盘 的 VMware 虚拟存储区域网络 (vSAN)* 架构,完成对高 ...
- springmvc——CharacterEncodingFilter过滤器要放在所有过滤器前面
CharacterEncodingFilter的拦截顺序必须是第一个,否则还是会出现乱码问题.这是因为 request对象的parameter并不是一开始就解析的,它是等你第一次调用getParame ...
- spring boot使用@Async异步注解
1.java的大部分接口的方法都是串行执行的,但是有些业务场景是不需要同步返回结果的,可以把结果直接返回,具体业务异步执行,也有些业务接口是需要并行获取数据,最后把数据聚合在统一返回给前端. 通常我们 ...
- Spring Cloud 和 Dubbo,到底用哪个好?
Spring Cloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大 dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解决 sp ...