首页 技术 正文
技术 2022年11月16日
0 收藏 696 点赞 2,860 浏览 5744 个字

1.简介

  前边一篇文章介绍了如何生成测试报告,细心地小伙伴或者同学们可以看到宏哥启动Jmeter生成测试报告不是在gui页面操作的,而是在gui页面设置好保存以后,用命令行来生成测试报告的。这一篇宏哥就详细的介绍一下为什么用命令行而不是GUI,以及启动时的一些参数的含义。

2.为什么要命令行执行脚本?

  本文介绍如何从命令行运行JMeter,那么宏哥先来说说,为什么要命令行执行脚本,日常测试过程中发现,在大数量并发时,jmeterGUI界面时长宕机、卡死,在这种情况下我们就需要使用命令行来执行脚本了(非GUI也称为 no Mode模式),使用非 GUI 模式,即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资源。主要有以下三点:

1) 图形化界面消耗更多资源,如CPU和内存,容易使压力机达到瓶颈,从而影响测试结果。

2) 图形化界面不支持大型的负载测试和性能测试,并发较大时,jmeter会崩溃。

3) 命令行测试支持持续集成,命令行方式可以把脚本配置到Jenkins上实现持续集成,做成自动化测试。例如放到Jenkins这样的CI工具上。

3.具体步骤

这个主要是针对不会代码脚本的童鞋们或者小伙伴可以首先在图形界面将脚本调试成功,然后再在非GUI也称为 no Mode模式下运行脚本。

1. 通过双击jmeter.bat打开JMeter图形界面

2.在默认的Test Plan上创建一个Thread Group

3.在Thread Group上面添加一个Sampler,选择HTTP Request

4.在Thread Group上面添加一个View Results Tree

5.点击Run,在弹出对话框询问是否保存,点击Yes,保存脚本到桌面,Test Plant And Report.jmx

6.检查View Results Tree里面的response code 是不是200,

7.通过检查测试通过,说明测试脚本没问题,我们这里选择删除View Results Tree

8.关闭当前JMeter对话框

9. 打开cmd,通过cd命令先切换到JMeter安装路径

例如: cd C:\apache-jmeter-3.2\bin

10. 输入一下命令开始执行测试

上图中红色框里的内容说明:

summary =  60 in 00:00:05:在5秒内产生的总请求数是60个,其中的时间段是从脚本运行开始计算到当前时间为止,一般在脚本运行过程中主要关注 “summary=” 信息即可11.8/s:系统每秒处理的请求数,相当于TPSAvg:   83:平均响应时间Min:   43:最小响应时间Max:  248:最大响应时间Err:     0 (0.00%):错误数/率Active: 100:活动的线程数

4.命令行参数

4.1运行命令常用格式

jmeter -n -t [jmx脚本路径] -l [测试输出文件路径]

参数解释:

-n: 表示 non gui mode,就是非图形化模式-t: 即testplan,后跟要运行的jmeter脚本的路径和脚本名称。    若指定路径下没有指定名称的脚本,则自动创建。    若没有路径只写脚本名称,则默认是在当前目录查找或创建。-l: 后跟输出结果文件路径和结果文件名称。    若指定路径下没有指定名称的脚本,则自动创建,可以生成csv或者jtl文件。    若只写脚本名称,则默认是在当前目录查找或创建。示例: jmeter -n -t testplan.jmx -l test.jtl示例含义:以命令行模式运行当前目录下的testplan.jmx文件,并在当前目录下输出日志文件test.jtl

其他参数:

jmeter -n -t test.jmx -R 10.6.5.31,10.6.5.32 -l log.jtljmeter -n -t test.jmx -l  log.jtl -H 192.168.1.1 -P 8080-r/R 远程执行 -> 启动远程服务,即分布式执行多台压力机-H 代理主机 -> 设置 JMeter 使用的代理主机-P 代理端口 -> 设置 JMeter 使用的代理主机的端口号使用-R指定节点时,要首先在这些节点上启动jmeter-server的服务

测试结果:

会在桌面生成一个html.cvs文件,这个文件刚好有60行,内容如下:

5.Linux系统运行jmeter命令行

将编辑好的脚本拷贝到Linux下

1、使用命令执行脚本:

jmeter -n -t bugfree-create.jmx -l test.jtl

注意:如果未设置Jmeter的环境变量则在执行脚本的时候需要检查当前目录是否是jmetet的bin 目录下

运行示意图:

2、运行结果的查看

(1)将运行脚本产生的test.jtl文件到处到windows系统下(注意:window下安装的Jmeter和JDK要和Linux的保持一致)

(2)在windows系统下打开Jmeter,创建一个线程组,在线程组下添加监听器,如下图:

(3)点击界面上的浏览按钮,将到处的文件添加进来即可看到脚本测试的报告,如下图:

6.windows系统下运行jmeter命令行

在windows下运行命令行跟linux下是一样的,只是通过cmd命令行工具来运行的。而且上一篇宏哥介绍的就是在在windows下运行Jmeter命令行,宏哥在这里就不做赘述了。

7.小结

使用jmeter进行压力测试时遇到一段时间后报内存溢出outfmenmory错误,导致jmeter卡死了,先尝试在jmeter.bat中增加了JVM_ARGS=”-Xmx2048m -Xms2048m -Xmn256m -XX:PermSize=128m -Xss256k”,但结果运行时间增加了,但最终还是报内存溢出,百度后按照网友的建议更改了如下设置后jmeter就没有再卡了:

1、windows环境下,修改jmeter.bat

set HEAP=-Xms256m -Xmx256m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
改为:
set HEAP=-Xms256m -Xmx1024m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=512m

根据经验,heap最多设置为物理内存的一半,默认设置为512M.如果heap超过物理内存的一半,可能运行jmeter会慢,甚至出现内存溢出,原因java比较吃内存,占CPU.

注意:JDK32位的电脑Xmx不能超过1500m,最大1378m.否则在启动Jmeter时会报错:Jmeter(三十八) – 从入门到精通进阶篇 – 命令行运行JMeter详解(详解教程)
2、linux环境下,修改jmeter.sh:# Default value:
#jmeter.save.saveservice.xml_pi=# Prefix used to identify filenames that are relative to the current base
#jmeter.save.saveservice.base_prefix=~/# AutoFlush on each line written in XML or CSV output
# Setting this to true will result in less test results data loss in case of Crash
# but with impact on performances, particularly for intensive tests (low or no pauses)
# Since JMeter 2.10, this is false by default
#jmeter.save.saveservice.autoflush=false

将上面的内容复制到user.properties文件中,然后注释打开,并且值修改成true,就会打开该条记录,jmeter就会将对应的信息输出到我们指定的jtl文件中(不过这样会在压测过程中产生大量的日志文件,真正压测时,最好不要开太多的日志记录),然后可以在结果文件中查看详细的信息。但是我们想在脚本执行的过程中实时查看结果信息,要怎么做呢?同样是将jmeter.properties文件中一下内容复制到user.properties文件中修改配置文件jmeter.properties。

#---------------------------------------------------------------------------
# Summariser - Generate Summary Results - configuration (mainly applies to non-GUI mode)
#---------------------------------------------------------------------------
#
# Comment the following property to disable the default non-GUI summariser
# [or change the value to rename it]
# (applies to non-GUI mode only)
summariser.name=summary
#
# interval between summaries (in seconds) default 30 seconds
#summariser.interval=30
#
# Write messages to log file
#summariser.log=true
#
# Write messages to System.out
#summariser.out=true# Ignore SampleResults generated by TransactionControllers
# defaults to true
#summariser.ignore_transaction_controller_sample_result=true

打开上面的summariser.name、summariser.interval、summariser.out这三个配置项,保存,重新运行jmeter,应该就可以在shell里看到统计信息了,如下图所示:

注意:如果未设置Jmeter的环境变量则在执行脚本的时候需要检查当前目录是否是jmetet的bin 目录下

Remote engines have been started
Waiting for possible shutdown message on port 4445
summary + 3036 in 3s = 1001.6/s Avg: 25 Min: 14 Max: 58 Err: 3036 (100.00%) Active: 61 Started: 58 Finished: 0
summary + 25670 in 10.3s = 2494.7/s Avg: 61 Min: 11 Max: 190 Err: 25670 (100.00%) Active: 261 Started: 258 Finished: 0
summary = 28706 in 13.1s = 2192.0/s Avg: 57 Min: 11 Max: 190 Err: 28706 (100.00%)
summary + 27300 in 10.3s = 2654.9/s Avg: 129 Min: 10 Max: 407 Err: 27300 (100.00%) Active: 461 Started: 458 Finished: 0
summary = 56006 in 23.1s = 2426.7/s Avg: 92 Min: 10 Max: 407 Err: 56006 (100.00%)
summary + 27200 in 10.4s = 2606.1/s Avg: 202 Min: 10 Max: 528 Err: 27200 (100.00%) Active: 660 Started: 657 Finished: 0
summary = 83206 in 33.1s = 2512.8/s Avg: 128 Min: 10 Max: 528 Err: 83206 (100.00%)
summary + 26300 in 11s = 2478.3/s Avg: 284 Min: 11 Max: 702 Err: 26300 (100.00%) Active: 861 Started: 858 Finished: 0
summary = 109506 in 43.1s = 2541.1/s Avg: 166 Min: 10 Max: 702 Err: 109506 (100.00%)
summary + 26200 in 11s = 2439.0/s Avg: 355 Min: 10 Max: 866 Err: 26200 (100.00%) Active: 1000 Started: 997 Finished: 0
summary = 135706 in 53.1s = 2556.0/s Avg: 202 Min: 10 Max: 866 Err: 135706 (100.00%)

这里的错误率是100%,正常情况下应该是0%。

这里显示的信息就相当于GUI界面下聚合报告元件所显示的信息。其中主要有两种信息:summary + 和summary =,其它项都是类似的

summary +   4386 in 00:00:30:在30秒内增加了4386个请求,其中时间间隔由配置文件中的interval统计频率的值决定summary =  27455 in 00:03:12:在3分12秒内产生的总请求数是27455个,其中的时间段是从脚本运行开始计算到当前时间为止,一般在脚本运行过程中主要关注 “summary=” 信息即可146.2/s:系统每秒处理的请求数,相当于TPSAvg:   684:平均响应时间Min:   201:最小响应时间Max:  1499:最大响应时间Err:     0 (0.00%):错误数/率Active: 100:活动的线程数

8.2文件路径

1、命令行中的文件路径

示例:jmeter -n -t testplan.jmx -l test.jtl

JMeter 默认去当前目录寻找脚本文件,并把日志记录在当前目录。比如你在 C:\tools\apache-jmeter-3.0\bin 目录下执行以上命令,JMeter 会去该目录下寻找 test.jmx 脚本并把执行结果放在该目录。如果你的脚本在其他目录,而且想要把执行结果放在另外文件夹,需要使用绝对路径告诉 JMeter,比如:

C:\tools\apache-jmeter-3.0\bin>jmeter -n -t e:\addCustomer.jmx -l e:\addCustomer.jtl
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,077
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,552
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,401
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,813
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,896