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. Docker学习(12) Dockerfile构建过程

    Dockerfile的构建过程 以上为构建缓存

  2. 如何在Python中加速信号处理

    如何在Python中加速信号处理 This post is the eighth installment of the series of articles on the RAPIDS ecosyst ...

  3. CVPR 2020目标跟踪多篇开源论文(上)

    CVPR 2020目标跟踪多篇开源论文(上) 1. SiamBAN:面向目标跟踪的Siamese Box自适应网络 作者团队:华侨大学&中科院&哈工大&鹏城实验室&厦门 ...

  4. 图像超分辨率算法:CVPR2020

    图像超分辨率算法:CVPR2020 Unpaired Image Super-Resolution using Pseudo-Supervision 论文地址: http://openaccess.t ...

  5. Covid经济型自主汽车

    Covid经济型自主汽车 Autonomous Vehicles in Covid Economy Covid经济已经对汽车行业产生了负面影响,更多的变化正在进行中,同时也带来了大量的不确定性.我们可 ...

  6. JAVA面向对象详细总结

    面向对象概念   所有操作基于对象进行操作实现 面向对象的三大特征   封装.继承.多态 类:具有相同特征和行为物体的统称 在java中类的定义语法: [修饰符]   class   类名{   属性 ...

  7. Python批量重命名 工具贴(一)

    说明 由于在处理图片数据和其他数据时,经常需要对数据进行批量重命名操作,每次使用时都需要重写,非常不便,因此记录下重命名代码方便后续使用. 文件结构说明 参数说明: path为输入路径 image_t ...

  8. 聊一聊.NET Core结合Nacos实现配置加解密

    背景 当我们把应用的配置都放到配置中心后,很多人会想到这样一个问题,配置里面有敏感的信息要怎么处理呢? 信息既然敏感的话,那么加个密就好了嘛,相信大部分人的第一感觉都是这个,确实这个是最简单也是最合适 ...

  9. centos7 安装 bbr加速

    脚本安装 1 查看内核版本 # [root@os]# uname -a Linux os 3.10.0-1127.13.1.el7.x86_64 x86_64 x86_64 x86_64 GNU/Li ...

  10. Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用

    Linkerd 2.10 系列 快速上手 Linkerd v2.10 Service Mesh(服务网格) 腾讯云 K8S 集群实战 Service Mesh-Linkerd2 & Traef ...