接上次我利用了Jmeter做完壓測(cè)之后臊诊,現(xiàn)在我就要把它自動(dòng)生成一個(gè)HTML的性能報(bào)告了口芍。
由于性能測(cè)試測(cè)的是性能杖剪,所以此處建議使用命令行,而不是圖形界面拨齐。用命令行界面的優(yōu)勢(shì)有如下幾點(diǎn):
1.圖形界面消耗的資源比命令行界面大得多鳞陨;
2.命令行界面可以用于測(cè)試大型負(fù)載的性能測(cè)試;
3.可以部署在持續(xù)集成的CI工具瞻惋,例如jenkins厦滤。
埋坑與填坑之路
于是我就開啟了jmeter非GUI的暴走模式,剛開始到處碰壁歼狼,下面就把遇到的問(wèn)題和解決辦法分享給大家掏导。
首先用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
接下來(lái)讓人抓狂的事情發(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ì)是我的路徑有問(wèn)題?
D:\Program Files (x86)\apache-jmeter-3.0\result\Test.jmx? (問(wèn)題其實(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叉钥,這次接著采用我上次用過(guò)的百度測(cè)試的jmx腳本來(lái)調(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í)行測(cè)試文件所在的位置
-l: 指定生成測(cè)試結(jié)果的保存文件投队,jtl文件格式
-e: 測(cè)試結(jié)束后枫疆,生成測(cè)試報(bào)告
-o: 指定測(cè)試報(bào)告的存放位置
該方式的輸入,為JMX file path敷鸦,另外兩個(gè)參數(shù)(CSV log和report folder)皆為輸出息楔。
需要注意的是,csv log不能在report folder下扒披,否則將報(bào)類似csv log is not empty之類的錯(cuò)誤值依。
輸出的CSV文件如下(百度測(cè)試為例):
報(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:最長(zhǎng)耗時(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 文件一起清空瓮顽。
讀更多的好書县好,拍更美的照片,寫更酷的代碼暖混,遇見(jiàn)更有趣的人缕贡,愿望是實(shí)現(xiàn)從IT菜鳥到全棧工程師的蛻變。