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
================================================================================

信息中提示

  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,以获得最佳结果。

为此,请使用以下命令选项:

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、使用非GUI模式运行JMeter(命令行模式)的更多相关文章

  1. 『动善时』JMeter基础 — 58、JMeter分布式测试

    目录 1.JMeter分布式测试概念 2.JMeter分布式测试前提条件 3.JMeter实现分布式测试 (1)在执行机中的配置 (2)在控制机中的配置 (3)启动执行机中的JMeter服务 (4)在 ...

  2. 『动善时』JMeter基础 — 55、JMeter非GUI模式运行

    目录 1.JMeter的非GUI模式说明 2.为什么使用非GUI模式运行JMeter 3.怎样使用非GUI模式运行JMeter (1)非GUI模式运行JMeter步骤 (2)其它参数说明 4.CLI模 ...

  3. 『动善时』JMeter基础 — 56、JMeter使用命令行模式生成HTML测试报告

    目录 1.自动生成HTML图形化报告 2.使用已有的测试结果文件生成HTML报告 3.HTML图形化报告内容详解 (1)Dashboard页面:(重点查看) (2)Charts页面:(辅助分析) 4. ...

  4. 『动善时』JMeter基础 — 41、使用JMeter连接数据库(MySQL)

    目录 1.为什么要使用JMeter连接数据库 2.JMeter连接数据库的前提 3.JDBC连接配置组件界面介绍 4.JMeter连接数据库演示 (1)测试计划内包含的元件 (2)测试计划中添加链接数 ...

  5. 『动善时』JMeter基础 — 2、JMeter的安装和启动

    1.安装Java环境 由于JMeter是纯Java的桌面应用程序,因此它的运行环境需要Java环境,即需要安装JDK或JRE.(也就是安装JDK环境) 步骤简要说明: 下载并安装JDK 配置环境变量 ...

  6. 『动善时』JMeter基础 — 7、jmeter.properties文件常用配置

    目录 1.默认语言设置 2.配置默认编码格式 3.GUI图标放大比例设置 4.功能区工具栏图标大小设置 5.视图区目录树图标大小设置 6.内容区编辑字体设置 7.添加JMeter元素快捷键设置 8.捕 ...

  7. 『动善时』JMeter基础 — 22、JMeter中实现参数化(CSV)

    目录 1.参数化的定义 2.什么情况下需要用到参数化 3.JMeter实现参数化的方式 4.CSV数据文件设置界面详细说明 (1)CSV数据文件设置组件界面说明 (2)补充说明:Recycle on ...

  8. 『动善时』JMeter基础 — 27、通过JMeter函数助手实现参数化

    目录 1.测试计划中的元件 2.数据文件内容 3.函数助手配置 (1)函数助手的打开方式 (2)函数助手界面介绍 (3)编辑后的函数助手界面 4.HTTP请求组件内容 5.线程组元件内容 6.脚本运行 ...

  9. 『动善时』JMeter基础 — 28、JMeter函数助手详解

    目录 1.函数助手介绍 2.函数助手中的函数分类 3.常用函数介绍 (1)__Random函数 (2)__counter函数 (3)__time函数 (4)__property函数 (5)__setP ...

随机推荐

  1. Go语言协程并发---select多路复用应用

    package main import ( "fmt" "time" ) /* ·循环从一写两读三条管道中随机选择一条能走的路 ·等所有路都走不通了就退出循环 ...

  2. Go语言的函数02---参数

    package main import "fmt" /* 常量,变量,函数---源代码的成员 给成员命名的字符称之为[标识符] 合法的标识符有:大小写字母,数字,下划线 命名时不能 ...

  3. TVM在ARM GPU上优化移动深度学习

    TVM在ARM GPU上优化移动深度学习 随着深度学习的巨大成功,将深度神经网络部署到移动设备的需求正在迅速增长.与在台式机平台上所做的类似,在移动设备中使用GPU可以提高推理速度和能源效率.但是,大 ...

  4. HLS后端示例

    HLS后端示例 TVM支持带有SDAccel的Xilinx FPGA板.这是有关如何将TVM部署到AWS F1 FPGA实例的文档. 此功能仍处于试验阶段.暂时无法使用SDAccel部署端到端神经网络 ...

  5. 视频处理器为电池供电的设计提供4K视频编码

    视频处理器为电池供电的设计提供4K视频编码 Video processor enables 4K video coding for battery-powered designs OmniVision ...

  6. 菜鸟刷题路:剑指 Offer 09. 用两个栈实现队列

    剑指 Offer 09. 用两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的 ...

  7. 【NX二次开发】导入x_t,UF_PS_import_data

    导入x_t,导入XT后要UF_DISP_regenerate_display(); 更新显示 否则不会显示 string strPaths ="D:\\1.x_t"; char s ...

  8. Redis源码解析之跳跃表(三)

    我们再来学习如何从跳跃表中查询数据,跳跃表本质上是一个链表,但它允许我们像数组一样定位某个索引区间内的节点,并且与数组不同的是,跳跃表允许我们将头节点L0层的前驱节点(即跳跃表分值最小的节点)zsl- ...

  9. SprignBoot是如何访问工程目录下的静态资源?

    ​ 目录 1.牛刀小试 1.1 图片静态资源的访问 1.2 为静态资源添加访问前缀 1.3  WelCome Page 的奇妙跳转 2.那么,SpringBoot是如何做到的呢? ​​​​​​​ 1. ...

  10. PL/SQL连不上,报 ORA-12170:TNS 连接超时

    排错步骤: 1.查看网络是否通畅 打开cmd, ping 数据库IP 2. 查看端口是否通畅 打开cmd,tnsping 数据库IP 如果piing不通,可能是防火墙问题 3.检查防火墙状态 #ser ...