摘要: 將JMeter job構(gòu)建到Jenkins上以后,生成的是jtl文件,沒法向打開JMeter查看Response結(jié)果樹一樣直觀查看最終測試結(jié)果,那我們可否將這些文件轉(zhuǎn)換成png圖片格式,并且放到郵件中呢?
一. 總體來說有兩種方式:
插件轉(zhuǎn)換模式
插件轉(zhuǎn)換模式不僅可以將 JMeter報(bào)告-jtl 文件轉(zhuǎn)換成png,還能轉(zhuǎn)換成csv。
其中會用到1個(gè)批處理文件和4個(gè)jar文件,而且全部包含在 Command-Line Graph Plooting Tool中:
1. PluginsManagerCMD.bat (for windows)?或者 PluginsManagerCMD.sh (for linux), 選擇其中一個(gè)放到 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 路徑下。
命令行轉(zhuǎn)換模式
僅適合Apache jmeter 3.0以上版本哦。
二. 插件轉(zhuǎn)換模式:
1. 下載Command-Line Graph Plooting Tool :
https://jmeter-plugins.org/?

下載某個(gè)版本的jar包就可以了. 這個(gè)Zip包里面包含6個(gè)文件:1個(gè)bat文件,1個(gè)sh文件,4個(gè)jar文件。
如果想看這個(gè)jar包的使用方法,就點(diǎn)擊藍(lán)色的鏈接“Command-Line Graph Plotting Tool”, 跳轉(zhuǎn)界面有詳細(xì)的jar包使用說明哦(https://jmeter-plugins.org/wiki/JMeterPluginsCMD/)。里面這個(gè)支持轉(zhuǎn)換成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在轉(zhuǎn)換格式的時(shí)候是這么被調(diào)用的:
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一定是上述列表中的某一個(gè),其他就可能轉(zhuǎn)換不了了哦。
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. 在命令行調(diào)用cmdrunner.jar 或者 JMeterPluginsCMD.bat:
調(diào)用cmdrunner.jar ? ? ?當(dāng)然了,官網(wǎng)文檔調(diào)用的是PluginsManager.bat,我為什么要直接調(diào)用這個(gè)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
調(diào)用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 后面跟的是這個(gè)cmdrunner.jar在的實(shí)際目錄,根據(jù)情況看是否加上路徑
--tool 我們就選擇Reporter就好了
--input-jtl 后面跟的是我們需要轉(zhuǎn)換的jtl文件實(shí)際目錄
--plugin-type 跟的是我們將要轉(zhuǎn)換的視圖,這里我用Response Times Over Time組件做例子:

也就是說這里能夠?qū)⒔M件轉(zhuǎn)換成圖片的話,這個(gè)組件的名字一定是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
這里面講的是如何調(diào)用 JMeterPluginsCMD.bat, 但是我實(shí)際用的時(shí)候碰到了很多問題。
5. 我為什么不直接調(diào)用JMeterPluginsCMD.bat:
這是我本地的bat文件 ,名字是“PluginsManagerCMD”。(bat文件放到bin目錄,cmdrunner.jar放到 lib 目錄):

bat 文件是在window機(jī)器上執(zhí)行的:
@echooff
java %JVM_ARGS% -jar %~dp0\..\lib\cmdrunner-2.0.jar --tool org.jmeterplugins.repository.PluginManagerCMD %*
這個(gè)bat文件我在調(diào)用的時(shí)候發(fā)現(xiàn)根本就找不到cmdrunner.jar包,生成的路徑是錯(cuò)的。

試過很多回,即使將路徑轉(zhuǎn)換成相對路徑也仍然有問題:
@echooff
java %JVM_ARGS% -jar cd ..\lib %~dp0 cmdrunner-2.0.jar --tool org.jmeterplugins.repository.PluginManagerCMD %*
轉(zhuǎn)換成相對路徑以后可以找到cmdrunner.jar包了,但是報(bào)錯(cuò):

sh 文件時(shí)在Linux機(jī)器上執(zhí)行的。
6. 生成的圖片文件在哪里?
因?yàn)槲沂窃贘enkins Job中添加的Window Command:

生成的png前面沒有加上絕對路徑,也就是說這里默認(rèn)是在workspace路徑下生成圖片。
如果你是在JMeter的cmdrunner.jar所在路徑執(zhí)行命令,就不要加上jar包的絕對路徑了,這個(gè)時(shí)候就會在這個(gè)jar包的同目錄下生成圖片。
7.郵件中引用生成的圖片:
在Editable Email Content中這么引用:

三. 命令行轉(zhuǎn)換方式:
命令行模式將不需要上述那么麻煩,需要4個(gè)jar包和一個(gè)批處理文件,這里直接在jmeter運(yùn)行某個(gè)jmx文件的時(shí)候,直接將jtl轉(zhuǎn)成測試圖表 ? - ? ? ?注意此方法只使用jmeter3.0以后版本。
1. 在測試過程中將jtl轉(zhuǎn)成測試報(bào)告(在jmeter的bin目錄下執(zhí)行)
./jmeter -n -t baidu_requests_results.jmx -r -l baidu_requests_results.jtl -e -o /home/tester/apache-jmeter-3.0/resultReport
參數(shù)說明:
??? -n : 非GUI 模式執(zhí)行JMeter
??? -t : 執(zhí)行測試文件所在的位置及文件名
??? -r :?遠(yuǎn)程將所有agent啟動用在分布式測試場景下,不是分布式測試只是單點(diǎn)就不需要-r
??? -l : 指定生成測試結(jié)果的保存文件, jtl 文件格式
??? -e : 測試結(jié)束后,生成測試報(bào)告
??? -o : 指定測試報(bào)告的存放位置
??? -o?指定的文件及文件夾,必須不存在 ,否則執(zhí)行會失敗,對應(yīng)上面的命令就是resultReport文件夾必須不存在否則報(bào)錯(cuò)
如上命令執(zhí)行,可以看到控制臺開始打印數(shù)據(jù)了

運(yùn)行完成后,可以在指定的目錄下看到生成結(jié)果文件夾/home/tester/apache-jmeter-3.0/resultReport

我們可以將該文件夾下載到本地windows機(jī)器,然后用瀏覽器打開index.html文件就能看到報(bào)告內(nèi)容了
首頁Dashboard:

解釋:
file:文件名
start time:開始時(shí)間
end time:結(jié)束時(shí)間
filter for display:過濾器
APDEX(Application performance Index):應(yīng)用程序性能指標(biāo),計(jì)算每筆交易APDEX的容忍和滿足閾值基于可配置的值,范圍在 0-1 之間,1表示達(dá)到所有用戶均滿意
T(Toleration threshold):容忍或滿意閾值
F(Frustration threshold):失敗閾值
requests summary中KO指失敗率,OK指成功率
首頁Dashboard:頁面滾動條往下拉:

解釋:
statistics:數(shù)據(jù)分析,?基本將 Summary Report 和 Aggrerate Report 的結(jié)果合并,含義分別為:
請求名稱、請求數(shù)目、失敗請求數(shù)目、錯(cuò)誤率(本次測試中出現(xiàn)錯(cuò)誤的請求的數(shù)量/請求的總數(shù))、90%用戶響應(yīng)時(shí)間、95%用戶響應(yīng)時(shí)間、99%用戶響應(yīng)時(shí)間、吞吐量(吞吐量——默認(rèn)情況下表示每秒完成的請求數(shù)Request per Second,當(dāng)使用了?Transaction Controller?時(shí),也可以表示類似?LoadRunner?的?Transaction per Second?數(shù))、Kb/sec(每秒從服務(wù)器端接收到的數(shù)據(jù)量,相當(dāng)于LoadRunner中的Throughput/Sec)、最小響應(yīng)時(shí)間、最大響應(yīng)時(shí)間
errors:錯(cuò)誤情況,依據(jù)不同的錯(cuò)誤類型,將所有錯(cuò)誤結(jié)果展示
Chart-Over Time-Response Times Over Time:隨著時(shí)間推移響應(yīng)時(shí)間變化趨勢圖

可以看到歷時(shí)3分鐘,響應(yīng)時(shí)間由0.334ms慢慢下滑到0.225ms
Chart-Over Time-Bytes Throughput Over Time:隨著時(shí)間推移每秒接收和請求字節(jié)數(shù)變化趨勢圖,藍(lán)色為每秒發(fā)送字節(jié)數(shù),黃色為每秒接收字節(jié)數(shù):

Chart-Over Time-Latencies Over Time:隨著時(shí)間推移平均響應(yīng)延時(shí)趨勢圖,記錄客戶端發(fā)送請求完成后,服務(wù)器端返回請求之前這段時(shí)間

由于我測試用的并發(fā)請求百度,請求都被拒絕了,并沒有收到從服務(wù)端返回的請求,所以這里看到一條0的線
以上就是over time欄的所有圖表,除了over time還有throuput和response times欄
throuput欄:

Throughput欄包括:
hits?per second:每秒點(diǎn)擊率
codes per second:每秒狀態(tài)碼數(shù)量
Transactions?per second:每秒事務(wù)量
Response Time Vs Request: 響應(yīng)時(shí)間點(diǎn)請求的 成功/失敗 數(shù)
Latency Vs Request: 延遲時(shí)間點(diǎn)請求的 成功/失敗 數(shù)
Response Times欄:

response times欄包括:
Response Time Percentiles: 響應(yīng)時(shí)間百分比
Active Threads Over Time: 隨著時(shí)間推移活躍線程數(shù)
Time Vs Threads: 測試過程中的線程數(shù)時(shí)續(xù)圖
Response Time Distribution: 響應(yīng)時(shí)間分布
2. 使用之前的測試結(jié)果,生成測試報(bào)告
./jmeter -g?baidu_requests_results.jtl -e -o /home/tester/apache-jmeter-3.0/resultReport
-g : 指定已存在的測試結(jié)果文件
-e :測試結(jié)果后,生成測試報(bào)告
-o : 指定測試報(bào)告的存放位置
-o 指定的文件及文件夾,必須 不存在 ,否則執(zhí)行會失敗
?使用命令行轉(zhuǎn)換的第一種和第二種方式其實(shí)最終都依賴生成的jtl文件,將jtl文件生成測試報(bào)告。雙擊測試報(bào)告中的index.html文件即可查看報(bào)告內(nèi)容
謝謝閱讀哦~~