Jmeter非GUI模式优点及实例说明

性能测试工具Jmeter由于其体积小、使用方便、学习成本低等原因,在现在的性能测试过程中,使用率越来越高,但其本身也有一定的缺点,比如提供的测试结果可视化做的很一般,尤其是那些蛋疼的报表简直low到爆。不过从3.0版本开始,jmeter引入了Dashboard Report模块,用于生成HTML类型的可视化图形报告(3.0版本的Dashboard Report模块会中文乱码,建议使用3.0以上的版本)

JMeter可以运行模式有两种,一种是GUI图形,另一种是命令模式运行也就是非GUI模式。两种模式的区别还是挺大的。

GUI:由于是图形界面,所以在运行时会消耗很多资源,而且图形界面运行时结果是保存在Jmeter运行的内存中,如果是做长时的性能测试,内存就会占用的很高,首先就是影响性能结果的准确性,其次当内存增长到一定程度,就会报错,甚至可能出现卡死/宕机。

非GUI优势:命令模式运行可以将实时的log文件保存到本地,位置可以自定义,不会占用太多机器的资源,可以长时间运行。

1、节约系统资源:无需启动界面,节约系统资源

2、便捷快速:仅需启动命令行,输入命令便可执行,是为命令达人最爱

3、易于持续集成:可通过shell脚本命令执行

非GUI运行命令部分:

    • -h 帮助 -> 打印出有用的信息并退出
    • -n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
    • -t 测试文件 -> 要运行的 JMeter 测试脚本文件
    • -l 结果文件路径 -> 记录结果的文件,路径不存在时会自动创建格式为jtl或csv
    • -r 远程执行 -> 在Jmter.properties文件中指定的所有远程服务器
    • -R 远程执行 -> 执行指定的服务器
    • -j 指定执行日志路径 -> 路径不存在时不会自动创建
    • -e 设置测试完成后生成测试报表
    • -g CSV结果文件 --> 指定测试执行结果文件路径,仅用于生成测试报表
    • -o 报表文件夹路径  --> 执行测试报表生成文件夹,文件夹必须为空或者不存在
    • -H 代理主机IP -> 设置 JMeter 使用的代理主机
    • -P 代理端口号 -> 设置 JMeter 使用的代理主机的端口号

非GUI运行示例:

jmeter -h

含义为:获取jmeter的命令帮助

jmeter -n -t test.jmx 

含义为:以命令模式运行test.jmx文件

jmeter -n -t test.jmx -l report\01-result.csv -j report\01-log.log

含义为:以命令模式运行test测试文件并保存结果及日志文件,需要注意的是如果日志路径不存在将不会自动创建,且日志会输出在命令行窗口,生成的结果文件可以在JMeter的图形界面下的聚合报告中导入结果文件进行查看。

jmeter -n  -t  test.jmx  -r  -l report\01-result.csv -j report\01-log.log

含义为:以命令模式远程调用remote_hosts中配置的所有服务器运行test测试文件并保存结果及日志文件,需要注意的是执行端的日志文件默认生成在用户目录下

jmeter -n -t  test.jmx  -R 192.168.21.40:1029 -l report\01-result.csv -j report\01-log.log

含义为:以命令模式远程调用192.168.21.40服务器运行test测试文件并保存结果及日志文件

为方便管理起见,在Jmeter安装目录下的bin目录下创建一个文件夹用来存放脚本(.jmx文件),再创建一个文件夹用来存放脚本执行后的结果文件。
结果文件是可以在Jmeter可视化界面打开的,它保存了脚本执行过程中的各种结果非常全面,结果树、聚合报告、表格查看结果等都可以将它打开看到响应的数据。

执行方法

生成HTML测试报告的两种方式

1、利用已有.jtl文件生成报告

如果已经有经过测试生成的.jtl文件,可以利用该文件直接生成HTML可视化测试报告,进入jmeter的bin目录下,输入如下命令:

jmeter -g test.jtl -o /path
# -g:后跟test.jtl文件所在的路径
# -o:后跟生成的HTML文件存放的路径
如果是在Windows环境命令行运行,必须指定生成的HTML文件存放文件夹,否则会报错;如果是linux环境,如指定路径下不存在该文件夹,会生成对应的文件夹存放报告文件!

2、无.jtl文件生成测试报告

如果还未生成.jtl文件,则可以通过如下命令,一次性完成测试执行和生成HTML可视化报告的操作,进入jmeter的bin目录下,输入如下命令:

jmeter -n -t test.jmx -l test.jtl -e -o /path# -n:
以非GUI形式运行Jmeter # -t:source.jmx 脚本路径 # -l:result.jtl 运行结果保存路径(.jtl),此文件必须不存在 # -e:在脚本运行结束后生成html报告 # -o:用于存放html报告的目录

 

Windows

1、在图形界面中写好脚本,配置好线程数等参数,配置思路如下:

  线程是操作系统能进行调度运算的最小单位,线程组可以理解为模拟的用户数,假设线程数为100,就相当于模拟100个虚拟用户。

  Ramp-Up时间(秒):启动时设置线程数耗时时长。如要使用大量线程的话,一般不要设置成零,当设置成零时,Jmeter将会在测试的开始就建立全部线程并立即发送访问请求, 这样一来就很轻易使服务器饱和,更重要的是会隐性地增加了负载。

  循环次数:执行任务的次数,设置为永远会一直执行,除非手动停止,否则不会停止,类似LR中运行时设置中迭代次数

  调度器:持续时间(秒)、持续延迟(秒)

2、找到测试脚本位置,设置好聚合报告(jtl文件,可用jmeter打开)需要放置的位置,执行命令cmd打开命令行模式

3、执行命令:jmeter -n -t D:\apache-jmeter-3.2\PressureTest\rental.jmx -l rental.jtl -e -o D:\apache-jmeter-3.2\PressureTest\HttpReport(执行结果文件也可以保存为.cvs后缀)

ps:结尾的 HttpReport 是自己手动创建的报告文件夹。每次启动命令之前,文件夹中内容必须和 jtl 文件一起清空,之前考虑过每次执行命令都要先去目录下清空报告文件夹和jtl,还要敲命令,很烦。那就是写个bat,每次执行bat都自动去清空之前的报告,然后执行命令

del /s /Q  D:\apache-jmeter-3.2\PressureTest\result.jtl

rd /s /Q   D:\apache-jmeter-3.2\PressureTest\HttpReport

md D:\apache-jmeter-3.2\PressureTest\HttpReport

jmeter -n -t D:\apache-jmeter-3.2\PressureTest\rental.jmx -l rental.jtl -e -o D:\apache-jmeter-3.2\PressureTest\HttpReport  

4、执行完毕后,用浏览器打开生成的文件目录下的index文件,效果展示如下:

5、查看上一步生成的聚合报告,也可以从jmeter中打开,添加一个聚合报告元件,从图上打开文件的地方导入.jtl文件即可打开报告

在脚本运行过程中,由于无界面,命令窗口会每隔一段时间打印一下当前的运行状态,在窗口中可以看到类似下面的信息:

summary+ 是开始这个时点的报告。

summary= 是总结它之前的报告,呈现出的是当前时点之前总的情况,通常是均值。

最后一个summary=是本次压测总的情况,如果脚本按时正常结束的话,最后一次summary里面的值应该和你从GUI打开聚合报告或概括报告的值一致。

HTML报告详解

测试报告分为两部分,Dashboard和Charts,下面分开解析

一、Dashboard(概览仪表盘)

  1、Test and Report informations(测试和报告信息) 

   Source file ---- 生成报告的源文件

   Start Time ---- 开始时间

   End Time ---- 结束时间

  2、APDEX (应用性能指标,计算每笔交易APDEX的容忍和满足阈值基于可配置的值,范围在 0-1 之间,1表示达到所有用户均满意)

   Apdex:应用程序性能指标(0~1),1表示所有用户请求均满意,反之0则表示均不满意

  T(Toleration threshold):可接受(容忍或满意)阈值,即用户可接受的响应时间

  F(Frustration threshold):不可接受(失败)阈值,即用户不可接受响应时间

  Lable:采样器名称

  关于APDEX的相关信息,应用性能指标请参考这里:http://oneapm.udesk.cn/hc/articles/515

  3、Requests Summary(请求总结,成功与失败的请求占比,KO指失败率,OK指成功率 )

  4、statistics(数据分析),类似于Jmeter聚合报告

  Label:Sample采样器名称(各个模拟测试的名称)

  Samples:总共发送请求数(线程数 * 循环次数),如果模拟10个用户,循环10次,那么就显示100

  KO:失败次数

  Error%:请求失败率,本次测试中出现错误的请求的数量/请求的总数

  Average:平均响应时间,默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间

  Min:最小响应时间

  Max:最大响应时间

  90%Line:90%线,90%用户响应不超过该时间

  95%Line:95%线,95%用户响应不超过该时间

  99%Line:99%线,99%用户响应不超过该时间

  Throughput:吞吐量,一般情况下可看做每秒完成请求数(和QPS类似),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数

  Received:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

  Sent:每秒从客户端发送的请求的数量

  5、Errors(错误情况,主要就是统计请求出现错误)

  6、Top 5 Errors by sampler(采样器的5大错误,主要是统计TOP5发生错误的采样器信息,这里如果全部通过,就不会有统计)

 

二、Charts(详细信息图表, 包括Over Time(时间变化) 、Throughput(吞吐量) 、Response Times(响应时间))

  由于详细信息图表有点多,这里我挑几个性能测试过程中比较关键的图表解析!

  1、Over Time

  ①、Response Times Over Time(响应时间变化曲线),类似于JMeter Plugins上的jp@gc - Response Times Over Time

  说明:一条线代表一个事务(请求),由于应用需要初始化建立连接以及CPU、内存等分配都会消耗资源,随着系统趋于稳定,响应时间也会趋于稳定,可以根据响应时间和变化和TPS以及模拟的并发数变化,判断性能拐点的范围,

  ②、 Response Time Percentiles Over Time (successful responses),类似于jmeter聚合报告中的Min、Max、90%、95%、99%

  说明:脚本运行期间成功的请求响应时间百分比分布图,可以理解为聚合报告里面不同%的数据,图形化展示的结果。

  ③、Active Threads Over Time(活动线程时间变化曲线图),一个线程组对应一条线

  说明:活跃线程变化趋势,即并发用户数趋势。相当于我们模拟的并发用户发出请求随着时间变化的趋势

  ④、Bytes Throughput Over Time(脚本运行期间的吞吐量变化趋势图),蓝色为每秒发送字节数,黄色为每秒接收字节数

  说明:在容量规划、可用性测试和大文件上传下载场景中,吞吐量是很重要的一个监控和分析指标。

  ⑤、 Latencies Over Time(延迟时间曲线图),记录的是客户端发送请求完成后,服务器端返回请求之前的这段时间,在高并发场景或者业务强数据一致性场景,延时是个很严重的影响因素

  说明:可以理解为从发送请求到收到第一个响应所花费的时间,包括事务控制器样本结果,在高并发场景或者强业务强数据一致性场景,延时是个很严重的影响因素

  ⑥、Connect Time Over Time(连接时间变化曲线图),随着时间变化,每个时间节点花费在连接上的平均时间

  说明:脚本运行期间,事务(请求)建立连接所花费的平均时间变化趋势图,包括 SSL 三次握手的时间,当出现链 Connection Time Out 的错误时,Connect Time 就会等于链接超时时间

 

  2、Throughput吞吐量)

  ①、Hits Per Second(每秒点击率),类似于JMeter Plugins上的jp@gc - Hits per Second,也叫每秒请求数

  ②Codes Per Second(每秒状态码数量)即每秒响应状态码数量,这里主要是对200响应成功的状态码进行记录统计

  ③、Transactions Per Second(每秒事务数)

  说明:每秒事务数,即TPS,是性能测试中很重要的一个指标,它是用来衡量系统处理能力的一个重要指标。类似于JMeter Plugins在UI上的jp@gc - Transactions per Second,如果没有开启事务,那么TPS也可看做QPS

  ④、Total Transactions Per Second(每秒总事务数)

  ⑤、Response Time Vs Request(响应时间点请求的成功或失败数),即响应时间和请求数对比关系,如果请求数量太小就只有一些散点。

  ⑥、Latency Vs Request(延迟时间点请求的成功或失败数) 

 

  3、Response Times

  ①、 Response Time Percentiles(响应时间百分比分布曲线图)

  说明:即响应时间在某个范围内的请求在所有请求数中所占的比率,相比于平均响应时间,这个值更适合用来衡量系统的稳定性。

  ②、Response Time Overview(响应时间概述)

  说明:响应时间概述,仔细看下面这种图不难发现,横坐标所绘制的区间和我们最开始看到的APDEX应用程序性能指数中划分的区间一致。

  Time Vs Threads(平均响应时间和线程数的对应变化曲线)

  说明:即活跃线程数和响应时间对比关系,可以通过这个对应的变化曲线来作为确定性能拐点的一个参考值。

  ④、Response Time Distribution(响应时间分布图) 
  说明:不同响应时间内,成功响应数是多少 
  
 
通过HTML可视化报告我们能够更加清晰、详细地了解到整个压测过程中应用性能指标的变化以及相应的数据统计分析。我们可以通过报告中给我们呈现的结果,对应用服务进行针对性的优化,让我们的服务更加稳固并且提供更好的体验

配置测试报告

1、从JMeter3.0开始在bin目录就有reportgenerator.properties文件,保存了所有关于图形化HTML报告生成模块的默认配置,要变更配置,建议不要直接编辑该文件,而是推荐在user.properties中去配置和覆盖1、user.properties中配置,基本配置都是以jmeter.reportgenerator.为前缀的   

(1)定义采样点粒度(overall_granularity)user.properties中overall_granularity(采样点粒度)默认为60000ms,在我们测试过程中需要更小的粒度,如2秒,所以在上图中将60000修改为2000,也可以在文档末尾加上jmeter.reportgenerator.overall_granularity=2000;   

(2)定义报告的标题(report_title)

(3)定义Apdex评估中满意的阈值(单位ms)(apdex_satisfied_threshold)

(4)定义Apdex评估中可容忍的阈值(apdex_tolerated_threshold)   

(5)修改响应时间的百分比,在 jmeter.properties中,有三个默认的响应时间的百分比,如果需要修改这三个默认值,可以在user.properties文档末尾加上这三个字段名称,并重新赋值

2、关于HTML报告模板   

(1)JMeter的HTML报告生成时是使用了固定的模板,模板文件路径为./bin/report-template,进入该目录可以看到报告的每个,页面都有一个.fmkr模板文件,包括index.html.fmkr和./content/pages路径下的几个文件,可以利用这几个文件,修改对应的名称,html报告的页面标题默认为Apache JMeter Dashboard,如果想改为这个页面标题,可以通过user.properties中的jmeter.reportgenerator.report_title来修改,通过这种方式来修改,那改变的是所有的页面标题   

(2)HTML模板汉化,Jmeter生成的html报告都是英文的,如果看不懂,我专门准备了Jmeter 4.x 和Jmeter5.x 两套汉化模板:https://gitee.com/smooth00/jmeter-cn-report-template,使用方法也简单,下载我给的模板,将report-template目录替换apache-jmeter-x.x\bin\report-template目录即可,新生成的报告就被汉化了 

 
 

Linux

1、使用linux命令进入Jmeter安装目录下的bin目录

2、执行命令:jmeter -n -t testscript\Baidu.jmx -l testresult\01-reslut.jtl(执行结果文件也可以保存为.cvs后缀)

3、把结果文件下载到windows机器上,使用Jmeter打开结果文件

 

无界面分布式压测

当并发量过大单机无法承担需要做分布式压测,分布式的配置同以前文章介绍的一样,再次不做赘述。

执行方法:

  1、把脚本和参数文件存放到各台终端相同目录下

  2、将每台终端的jmerter-server.bat打开等待主机发号施令

  3、在主机命令窗口键入类似以下命令: jmeter.bat -n -t testscript/Baidu.jmx -R 192.168.182.129:1100,192.168.182.130:1200 -l testresult/01-result.jtl

命令中-R代表远程 remote ,后面跟随的是每台终端机jmeter-server窗口显示的 ip 和端口,同样,多台终端之间由逗号隔开,其他都与单机命令一样。于是可以看到各台终端机的jmeter-server窗口有关运行和阶段性summary的信息直至运行结束。总体的报告都在你主机保存的那个.jtl文件里。

执行结果:

 

 

posted @ 2020-07-05 20:33  CodeCCa  阅读(1112)  评论(0编辑  收藏  举报