摘要: 将JMeter job构建到Jenkins上以后,生成的是jtl文件,没法向打开JMeter查看Response结果树一样直观查看最终测试结果,那我们可否将这些文件转换成png图片格式,并且放到邮件中呢?
一. 总体来说有两种方式:
插件转换模式
插件转换模式不仅可以将 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 =PerfMonMetrics Collector
DbMon =DbMonMetrics Collector, DataBase, get performance counters via sql
JMXMon =JMXMonMetrics Collector, Java Management Extensions counters
ResponseCodesPerSecond
ResponseTimesDistribution
ResponseTimesOverTime
ResponseTimesPercentiles
ThroughputVsThreads
TimesVsThreads = Response Times VS Threads
TransactionsPerSecond
PageDataExtractorOverTime
MergeResults =MergeResultsCommand 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/
Transaction Throughput vs Threads
这里面讲的是如何调用 JMeterPluginsCMD.bat, 但是我实际用的时候碰到了很多问题。
5. 我为什么不直接调用JMeterPluginsCMD.bat:
这是我本地的bat文件 ,名字是“PluginsManagerCMD”。(bat文件放到bin目录,cmdrunner.jar放到 lib 目录):
bat 文件是在window机器上执行的:
@echooff
java %JVM_ARGS% -jar %~dp0\..\lib\cmdrunner-2.0.jar --tool org.jmeterplugins.repository.PluginManagerCMD %*
这个bat文件我在调用的时候发现根本就找不到cmdrunner.jar包,生成的路径是错的。
试过很多回,即使将路径转换成相对路径也仍然有问题:
@echooff
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文件即可查看报告内容
谢谢阅读哦~~