将JMeter生成的性能报告jtl文件转换成图片并发送邮件

原创
2018/04/13 16:49
阅读数 473

一. 总体来说有两种方式:

  • 插件转换模式

插件转换模式不仅可以将 JMeter报告-jtl 文件转换成png,还能转换成csv。

其中会用到1个批处理文件和4个jar文件,而且全部包含在 Command-Line Graph Plooting Tool中:

1. PluginsManagerCMD.bat (for windows) 或者 PluginsManagerCMD.sh (for linux), 选择其中一个放到 jmeter\bin 路径下。 (也可能你下载的文件名称叫做 JMeterPluginsCMD.bat 和 JMeterPluginsCMD.sh )

2. cmdrunner.jar (我下载的是cmdrunner-2.0.jar),需要放到 jmeter\lib 路径下。

3. jmeter-plugins-cmn-jmeter-0.4.jar。然后放到 jmeter\lib 路径下。

4. jmeter-plugins-cmd-2.1.jar . 然后放到 jmeter\lib\ext 路径下。

5. jmeter-plugins-manager-0.20.jar 。然后放到 jmeter\lib\ext 路径下。

  • 命令行转换模式

仅适合Apache jmeter 3.0以上版本哦。

 

二. 插件转换模式:

1. 下载Command-Line Graph Plooting Tool :

https://jmeter-plugins.org/ 

下载某个版本的jar包就可以了. 这个Zip包里面包含6个文件:1个bat文件,1个sh文件,4个jar文件。

如果想看这个jar包的使用方法,就点击蓝色的链接“Command-Line Graph Plotting Tool”, 跳转界面有详细的jar包使用说明哦(https://jmeter-plugins.org/wiki/JMeterPluginsCMD/)。里面这个支持转换成png的图片类型很重要哦:

Plugin Type Classes

Make note that you need to install corresponding plugins set to have Extras plugins available in CMD.

Most of class names are self-explanatory:

  • AggregateReport = JMeter's native Aggregate Report, can be saved only as CSV
  • SynthesisReport = mix between JMeter's native Summary Report and Aggregate Report, can be saved only as CSV
  • ThreadsStateOverTime = Active Threads Over Time
  • BytesThroughputOverTime
  • HitsPerSecond
  • LatenciesOverTime
  • PerfMon = PerfMon Metrics Collector
  • DbMon = DbMon Metrics Collector, DataBase, get performance counters via sql
  • JMXMon = JMXMon Metrics Collector, Java Management Extensions counters
  • ResponseCodesPerSecond
  • ResponseTimesDistribution
  • ResponseTimesOverTime
  • ResponseTimesPercentiles
  • ThroughputVsThreads
  • TimesVsThreads = Response Times VS Threads
  • TransactionsPerSecond
  • PageDataExtractorOverTime
  • MergeResults = MergeResults Command Line Merge Tool to simplify the comparison of two or more load tests, need properties file (like merge-results.properties)

Plugin type在转换格式的时候是这么被调用的:

Usage and Parameters

Generating PNG:

JMeterPluginsCMD.bat --generate-png test.png --input-jtl results.jtl --plugin-type ResponseTimesOverTime
 --width 800 --height 600

Generating CSV:

JMeterPluginsCMD.bat --generate-csv test.csv --input-jtl results.jtl --plugin-type ResponseTimesOverTime

命令中传递的plugin-type一定是上述列表中的某一个,其他就可能转换不了了哦。

 

2. 将下载的jar包放到JMeter安装目录下的文件里面:

PluginsManagerCMD.bat 和 PluginsManagerCMD.sh 放到 bin 目录下面:

cmdrunner.jar 和 jmeter-plugins-cmn-jmeter-0.4.jar 放到 lib目录下面:

jmeter-plugins-cmd-2.1.jar 和 jmeter-plugins-manager-0.20.jar 放到 lib\ext目录下面:

 

3. 在命令行调用cmdrunner.jar 或者 JMeterPluginsCMD.bat:

  • 调用cmdrunner.jar      当然了,官网文档调用的是PluginsManager.bat,我为什么要直接调用这个cmdrunner.jar文件呢?请移步到第4部分解释。

java -jar D:\apache-jmeter-3.3\lib\cmdrunner-2.0.jar --tool Reporter --input-jtl %WORKSPACE%\result-output\%TestAPI%.jtl --plugin-type ResponseTimesOverTime --generate-png ResponseTimesOverTime.png

  • 调用JMeterPluginsCMD.bat :

Generating PNG:

JMeterPluginsCMD.bat --generate-png test.png --input-jtl results.jtl --plugin-type ResponseTimesOverTime --width 800 --height 600

Generating CSV:

JMeterPluginsCMD.bat --generate-csv test.csv --input-jtl results.jtl --plugin-type ResponseTimesOverTime

-jar 后面跟的是这个cmdrunner.jar在的实际目录,根据情况看是否加上路径

--tool 我们就选择Reporter就好了

--input-jtl 后面跟的是我们需要转换的jtl文件实际目录

--plugin-type 跟的是我们将要转换的视图,这里我用Response Times Over Time组件做例子:

也就是说这里能够将组件转换成图片的话,这个组件的名字一定是cmdrunner支持的组件类型哦:

 

4. 官方文档中支持类型:

具体支持什么组件类型,可以查看官方文档: Plugins Manager from Command-Line:

http://www.jmeter-plugins.org/wiki/PluginsManagerAutomated/

https://jmeter-plugins.org/wiki/JMeterPluginsCMD/

https://jmeter-plugins.org/wiki/GraphsGeneratorListener/

这里面讲的是如何调用 JMeterPluginsCMD.bat, 但是我实际用的时候碰到了很多问题。

 

5. 我为什么不直接调用JMeterPluginsCMD.bat:

这是我本地的bat文件 ,名字是“PluginsManagerCMD”。(bat文件放到bin目录,cmdrunner.jar放到 lib 目录):

  • bat 文件是在window机器上执行的:

@echo off

java %JVM_ARGS% -jar %~dp0\..\lib\cmdrunner-2.0.jar --tool org.jmeterplugins.repository.PluginManagerCMD %*

  • 这个bat文件我在调用的时候发现根本就找不到cmdrunner.jar包,生成的路径是错的。

  • 试过很多回,即使将路径转换成相对路径也仍然有问题:

@echo off

java %JVM_ARGS% -jar cd ..\lib %~dp0 cmdrunner-2.0.jar --tool org.jmeterplugins.repository.PluginManagerCMD %*

转换成相对路径以后可以找到cmdrunner.jar包了,但是报错:

 

  • sh 文件时在Linux机器上执行的。

 

6. 生成的图片文件在哪里?

因为我是在Jenkins Job中添加的Window Command:

生成的png前面没有加上绝对路径,也就是说这里默认是在workspace路径下生成图片。

如果你是在JMeter的cmdrunner.jar所在路径执行命令,就不要加上jar包的绝对路径了,这个时候就会在这个jar包的同目录下生成图片。

 

7.邮件中引用生成的图片:

在Editable Email Content中这么引用:

 

三. 命令行转换方式:

命令行模式将不需要上述那么麻烦,需要4个jar包和一个批处理文件,这里直接在jmeter运行某个jmx文件的时候,直接将jtl转成测试图表   -      注意此方法只使用jmeter3.0以后版本。

1. 在测试过程中将jtl转成测试报告(在jmeter的bin目录下执行)

./jmeter -n -t baidu_requests_results.jmx -r -l baidu_requests_results.jtl -e -o /home/tester/apache-jmeter-3.0/resultReport

参数说明:

    -n : 非GUI 模式执行JMeter

    -t : 执行测试文件所在的位置及文件名

    -r : 远程将所有agent启动用在分布式测试场景下,不是分布式测试只是单点就不需要-r

    -l : 指定生成测试结果的保存文件, jtl 文件格式

    -e : 测试结束后,生成测试报告

    -o : 指定测试报告的存放位置

    -o 指定的文件及文件夹,必须不存在 ,否则执行会失败,对应上面的命令就是resultReport文件夹必须不存在否则报错

 

如上命令执行,可以看到控制台开始打印数据了

运行完成后,可以在指定的目录下看到生成结果文件夹/home/tester/apache-jmeter-3.0/resultReport

我们可以将该文件夹下载到本地windows机器,然后用浏览器打开index.html文件就能看到报告内容了

首页Dashboard:

解释:

file:文件名

start time:开始时间

end time:结束时间

filter for display:过滤器

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

T(Toleration threshold):容忍或满意阈值

F(Frustration threshold):失败阈值

requests summary中KO指失败率,OK指成功率

 

首页Dashboard:页面滚动条往下拉:

解释:

statistics:数据分析, 基本将 Summary Report 和 Aggrerate Report 的结果合并,含义分别为:

请求名称、请求数目、失败请求数目、错误率(本次测试中出现错误的请求的数量/请求的总数)、90%用户响应时间、95%用户响应时间、99%用户响应时间、吞吐量(吞吐量——默认情况下表示每秒完成的请求数Request per Second,当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数)、Kb/sec(每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec)、最小响应时间、最大响应时间

 

errors:错误情况,依据不同的错误类型,将所有错误结果展示

 

Chart-Over Time-Response Times Over Time:随着时间推移响应时间变化趋势图

可以看到历时3分钟,响应时间由0.334ms慢慢下滑到0.225ms

 

Chart-Over Time-Bytes Throughput Over Time:随着时间推移每秒接收和请求字节数变化趋势图,蓝色为每秒发送字节数,黄色为每秒接收字节数:

 

Chart-Over Time-Latencies Over Time:随着时间推移平均响应延时趋势图,记录客户端发送请求完成后,服务器端返回请求之前这段时间

由于我测试用的并发请求百度,请求都被拒绝了,并没有收到从服务端返回的请求,所以这里看到一条0的线

 

以上就是over time栏的所有图表,除了over time还有throuput和response times栏

throuput栏:

Throughput栏包括:

hits per second:每秒点击率

codes per second:每秒状态码数量

Transactions per second:每秒事务量

Response Time Vs Request: 响应时间点请求的 成功/失败 数

Latency Vs Request: 延迟时间点请求的 成功/失败 数

 

Response Times栏:

 

response times栏包括:

Response Time Percentiles: 响应时间百分比

Active Threads Over Time: 随着时间推移活跃线程数

Time Vs Threads: 测试过程中的线程数时续图

Response Time Distribution: 响应时间分布

 

2. 使用之前的测试结果,生成测试报告

./jmeter -g baidu_requests_results.jtl -e -o /home/tester/apache-jmeter-3.0/resultReport

-g : 指定已存在的测试结果文件

-e :测试结果后,生成测试报告

-o : 指定测试报告的存放位置

-o 指定的文件及文件夹,必须 不存在 ,否则执行会失败

 使用命令行转换的第一种和第二种方式其实最终都依赖生成的jtl文件,将jtl文件生成测试报告。双击测试报告中的index.html文件即可查看报告内容

 

谢谢阅读哦~~

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部