接上次我利用了Jmeter做完壓測之后,現(xiàn)在我就要把它自動(dòng)生成一個(gè)HTML的性能報(bào)告了。
由于性能測試測的是性能,所以此處建議使用命令行,而不是圖形界面。用命令行界面的優(yōu)勢有如下幾點(diǎn):
1.圖形界面消耗的資源比命令行界面大得多;
2.命令行界面可以用于測試大型負(fù)載的性能測試;
3.可以部署在持續(xù)集成的CI工具,例如jenkins。
埋坑與填坑之路
于是我就開啟了jmeter非GUI的暴走模式,剛開始到處碰壁,下面就把遇到的問題和解決辦法分享給大家。
首先用cmd打開windows的命令行窗口, cd切換到j(luò)meter bin所在的目錄。因?yàn)槲业腏meter是放在了D盤的D:\Program Files (x86),?所以我的是 D:\Program Files (x86)\apache-jmeter-3.0\bin 。
接著運(yùn)行 jmeter -n -t D:\Program Files (x86)\apache-jmeter-3.0\result\Test.jmx -l D:\Program Files (x86)\apache-jmeter-3.0\result\demo.csv
其中?? -n 表示運(yùn)行jmeter非GUI,如果直接jmeter?回車,就會(huì)打開GUI界面。
??????????-t?指定的腳本文件及其路徑。
??????????-l?輸出結(jié)果指定的路徑,默認(rèn)是輸出到bin目錄下的jmeter.log
接下來讓人抓狂的事情發(fā)生了:報(bào)錯(cuò)An error occured:Unknown arg
@#@¥#¥%……¥¥……¥……¥¥&¥%#%¥……¥&¥……¥……¥&¥¥……&(內(nèi)心戲:OMG, what happen? What's wrong?)
由于我有python的編程經(jīng)驗(yàn),其中python對(duì)于縮進(jìn)有嚴(yán)格的限制,我就猜想,會(huì)不會(huì)是我的路徑有問題?
D:\Program Files (x86)\apache-jmeter-3.0\result\Test.jmx? (問題其實(shí)就在這里)
命令行界面對(duì)于空格也有一定的規(guī)則,我路徑錯(cuò)誤就在于Program Files (x86)這個(gè)文件夾名稱存在空格。
所以解決方法是把我的jmeter直接移動(dòng)到根目錄,變成D:\apache-jmeter-3.0
當(dāng)然我也可以把Program Files(X86)中的空格去掉,但是我不會(huì)這么做,因?yàn)檫@個(gè)文件夾下面裝了好多東西。
OK,這次接著采用我上次用過的百度測試的jmx腳本來調(diào)試,再次運(yùn)行命令,jmeter -n -t?D:\apache-jmeter-3.0\testFile\testBaidu.jmx -l?D:\apache-jmeter-3.0\testFile\csvlog.log -e -o?D:\apache-jmeter-3.0\testFile\Report

yes, success!
正確的指令打開方式
jmeter –n –t?<jmx filepath>?-l <csv log path>? -e –o <report folder path>
-n:?非GUI模式執(zhí)行JMeter
-t: 執(zhí)行測試文件所在的位置
-l: 指定生成測試結(jié)果的保存文件,jtl文件格式
-e: 測試結(jié)束后,生成測試報(bào)告
-o: 指定測試報(bào)告的存放位置
該方式的輸入,為JMX file path,另外兩個(gè)參數(shù)(CSV log和report folder)皆為輸出。
需要注意的是,csv log不能在report folder下,否則將報(bào)類似csv log is not empty之類的錯(cuò)誤。
輸出的CSV文件如下(百度測試為例):

報(bào)告展示
報(bào)告生成完畢后,目錄結(jié)構(gòu)如下:


Test and Report Information
列出csv log文件名,已經(jīng)報(bào)告生成所花費(fèi)的時(shí)間(起始時(shí)間,結(jié)束時(shí)間)。
應(yīng)用程序性能指標(biāo)。
Apdex:性能結(jié)果,范圍0-1,1表示滿意。
T:滿意閾值,小于或等于該值,表示滿意。
F:失敗閾值,大于或等于該值,表示不滿意。
處于T與F之間,表示可容忍。

所有Request的成功比例,OK表示成功,KO表示不成功。
數(shù)據(jù)分析。
Samples:線程數(shù)量
KO:失敗數(shù)量
Error:失敗率
Average:平均耗時(shí)
Min:最小耗時(shí)
Max:最長耗時(shí)
90th/95th/99thpct:90%、95%、99%的線程耗時(shí)
Throughput:每秒鐘發(fā)送的請(qǐng)求數(shù)量
Received:接收網(wǎng)絡(luò)響應(yīng)耗時(shí)
Sent:發(fā)送網(wǎng)絡(luò)請(qǐng)求耗時(shí)
會(huì)給出所有的錯(cuò)誤原因。
隨時(shí)間變化,每個(gè)時(shí)間節(jié)點(diǎn)上的線程平均響應(yīng)時(shí)間

(2)?Bytes Throughput Over Time

隨時(shí)間變化,每個(gè)時(shí)間節(jié)點(diǎn)上的平均響應(yīng)延時(shí)。

(1)?Hits Per Second (excluding embedded resources)
每秒鐘向服務(wù)器發(fā)送的請(qǐng)求數(shù)量。

(2)?Codes Per Second (excluding embedded resources)
每秒鐘服務(wù)器返回的ResponseCode數(shù)量。

服務(wù)器每秒鐘處理的事務(wù)數(shù)量。

每秒發(fā)送多少個(gè)請(qǐng)求時(shí),所對(duì)應(yīng)的平均響應(yīng)時(shí)間。

每秒發(fā)送多少個(gè)請(qǐng)求時(shí),所對(duì)應(yīng)的平均延時(shí)。

響應(yīng)時(shí)間與百分比的對(duì)應(yīng)關(guān)系,即有百分之多少的線程花費(fèi)了某一響應(yīng)時(shí)間。


N個(gè)活動(dòng)線程情況下的平均響應(yīng)時(shí)間。

在某一響應(yīng)時(shí)間段內(nèi)的線程響應(yīng)數(shù)量。

報(bào)告詳情可以參考:JMeter-Generating Dashboard
最后還有一點(diǎn)要注意的是,每次啟動(dòng)命令之前,report的文件夾內(nèi)容必須和 jtl 文件一起清空。
讀更多的好書,拍更美的照片,寫更酷的代碼,遇見更有趣的人,愿望是實(shí)現(xiàn)從IT菜鳥到全棧工程師的蛻變。