JMeter效能測試3.0時代之-多維度的圖形化HTML報告
轉http://www.jianshu.com/p/be8930c4eef2
一.為什麼談這個新特性
在JMeter3.0之前,官方只提供在工具的UI上對測試結果部分維度的圖形化展示,這對我帶來了兩方面的困擾:
- 在實際使用中,在平臺中整合JMeter後需要頁面展示TPS曲線,平均響應時間曲線等圖表時,需要我們手動操刀擺弄如Hightcharts/Echarts等前端圖表庫。
- 要檢視歷史的測試結果,需要啟動JMeter的圖形化介面,匯入儲存的CSV結果,過程繁瑣,並且當結果集較大時,JMeter需要耗費相當多的時間在介面上展示圖形化報告。
本文討論的新特性為這兩個問題帶來了較好的解決辦法:
- 新特性良好的實現了結果資料視覺化,生成的報告是HTML頁面形式,並且包含大多數實際測試中關心的度量維度的,可以便捷地嵌入到平臺,從瀏覽器來檢視每次測試執行的。
- 只要保留生成的HTML頁面,後期要檢視該次測試的結果,只需要在瀏覽器開啟即可,方便快捷。
二.新特性簡介
JMeter3.0提供一個用於生成HTML頁面格式圖形化報告的擴充套件模組。該模組支援通過兩種方式生成多維度圖形化測試報告:
- 在JMeter效能測試結束時,自動生成本次測試的HTML圖形化報告
- 使用一個已有的結果檔案(如CSV檔案)來生成該次結果的HTML圖形化報告
其預設提供的度量維度包括:
- APDEX(Application Performance Index)指數
- 聚合報告
- 類似於UI上的Aggregate Report
- Errors報告
- 展示不同錯誤型別的數量以及百分比
- 響應時間變化曲線
- 展示平均響應時間隨時間變化情況
- 類似於JMeter Plugins在UI上的[email protected] - Response Times Over Time
- 資料吞吐量時間曲線
- 展示每秒資料吞吐量隨時間變化的情況
- 類似於JMeter Plugins在UI上的[email protected] - Bytes Throughput Over Time
- Latency time變化曲線
- 展示Latency time隨時間變化的情況
- 類似於JMeter Plugins在UI上的[email protected] - Response Latencies Over Time
- 每秒點選數曲線
- 類似於JMeter Plugins在UI上的
- 類似於JMeter Plugins在UI上的
- HTTP狀態碼時間分佈曲線
- 展示響應狀態碼隨時間的分佈情況
- 類似於JMeter Plugins在UI上的[email protected] - Response Codes per Second
- 事務吞吐量時間曲線(TPS)
- 展示每秒處理的事務數隨時間變化情況
- 類似於JMeter Plugins在UI上的[email protected] - Transactions per Second
- 平均響應時間與每秒請求數的關係圖
- 展示平均響應時間與每秒請求數(可以理解為QPS)的關係
- Latency time與每秒請求數的關係圖
- 展示Latency time與每秒請求數的關係
- 響應時間百分點陣圖
- 響應時間的百分位分佈圖
- 活動執行緒數變化曲線
- 展示測試過程中活動執行緒數隨時間變化情況
- 平均響應時間與執行緒數的關係圖
- 展示平均響應時間與執行緒數的關係
- 類似於JMeter Plugins在UI上的[email protected] - Response Times vs Threads
- 柱狀響應時間分佈圖
- 展示落在各個平均響應時間區間的請求數情況
注1:Latency time沒有翻譯成中文,這裡對其計算方式做註解:
- Latency time = 接收到響應的第一個位元組的時間點 - 請求開始傳送的時間點
from just before sending the request to just after the first response has been received
-- Apache JMeter Glossary
- 響應時間(JMeter術語中的Elapsed time) = 接收完所有響應內容的時間點 - 請求開始傳送的時間點
from just before sending the request to just after the last response has been received
-- Apache JMeter Glossary
注2:Apdex 標準從使用者的角度出發,將對應用響應時間的表現,轉為使用者對於應用效能的可量化為範圍為 0-1 的滿意度評價。。
Apdex (Application Performance Index) is an open standard developed by an alliance of companies. It defines a standard method for reporting and comparing the performance of software applications in computing.
-- wikipedia
三.快速入門
1.確認基本配置
- 在jmeter.properties或者user.properties確認如下配置項:
jmeter.save.saveservice.bytes = true jmeter.save.saveservice.label = true jmeter.save.saveservice.latency = true jmeter.save.saveservice.response_code = true jmeter.save.saveservice.response_message = true jmeter.save.saveservice.successful = true jmeter.save.saveservice.thread_counts = true jmeter.save.saveservice.thread_name = true jmeter.save.saveservice.time = true # the timestamp format must include the time and should include the date. # For example the default, which is milliseconds since the epoch: jmeter.save.saveservice.timestamp_format = ms # Or the following would also be suitable jmeter.save.saveservice.timestamp_format = yyyy/MM/dd HH:mm:ss
- 如果希望在Errors報告中展示更詳細資料,需要確保如下配置
jmeter.save.saveservice.assertion_results_failure_message = true
- 如果使用了事務控制器(Transaction Controller),確認Generate parent sample為未勾選狀態
2.生成報告
a. 在壓力測試結束時報告
- 基本命令格式:
jmeter -n -t <test JMX file> -l <test log file> -e -o <Path to output folder>
- 樣例:
jmeter -n -t F:\PerformanceTest\TestCase\script\getToken.jmx -l testLogFile -e -o ./output
b. 使用已有的壓力測試CSV日誌檔案生成報告
- 基本命令格式:
jmeter -g <log file> -o <Path to output folder>
- 樣例:
jmeter -g D:\apache-jmeter-3.0\bin\testLogFile -o ./output
兩個樣例都會在\apache-jmeter-3.0\bin\output目錄下產生如下檔案(夾):
用瀏覽器開啟index.html檔案,即可檢視各種圖形化報告:
注1:在3.0版本,由於原始碼中字元編碼的問題,可能會遇到生成的報告中,中文標籤展示為亂碼的問題,因篇幅限制,解決辦法請戳這裡看我另一篇文章。
2016-12 update :在3.1版本中,該問題已修復
四.自定義配置
JMeter3.0在bin目錄新增了reportgenerator.properties
檔案儲存了所有關於圖形化HTML報告生成模組的預設配置,要變更配置,建議不要直接編輯該檔案,而是推薦在user.properties
中去配置和覆蓋。
1.總體配置
總體配置都是以jmeter.reportgenerator.
為字首,如:jmeter.reportgenerator.overall_granularity=60000
overall_granularity
:定義取樣點粒度,預設為60000ms,通常在穩定性以外的測試中,我們可能需要定義更細的粒度,比如1000ms,我們可以在user.properties
檔案末尾新增如下配置:# Change this parameter if you want to change the granularity of over time graphs. jmeter.reportgenerator.overall_granularity=6000
report_title
:定義報告的標題,我們可能需要將標題定義為實際測試項名稱apdex_satisfied_threshold
:定義Apdex評估中滿意的閾值(單位ms)apdex_tolerated_threshold
: 定義Apdex評估中可容忍的閾值Apdext = (Satisfied Count + Tolerating Count / 2) / Total Samples
另外,在jmeter.properties
中,有關於集合報告中的三個百分位的預設值:
aggregate_rpt_pct1 : Defaults to 90
aggregate_rpt_pct2 : Defaults to 95
aggregate_rpt_pct3 : Defaults to 99
可以在user.properties中對其進行覆蓋,如:aggregate_rpt_pct1
= 70
,效果如下:
2.圖表配置
每個圖表配置都是以jmeter.reportgenerator.graph.<圖表名稱>.
為字首。
classname
圖表的實現類,如果有自己定製的實現,將該配置的值寫為自定義實現類的類名title
圖示標題,比如要漢化的時候,在這裡配置中文標題property.set_granularity
設定圖示的取樣點粒度,不配置時預設使用總體配置中的粒度設定
3.輸出配置
輸出配置都以jmeter.reportgenerator.exporter
為字首。
property.output_dir
配置預設的報告輸出路徑。在命令列可以用-o選項來設定特定的路徑覆蓋該配置。html.series_filter
用於過濾展示內容。如在user.properties新增如下配置:jmeter.reportgenerator.exporter.html.series_filter=(^Login)(-success|-failure)?
則最後的報告只展示名為Login這個取樣器的資料。該配置包含兩部分,(-success|-failure)?
是Transactions per second
圖表所依賴的配置。前面部分接受一個正則表示式用來過濾。
五.總結
本次介紹的Dashboard
Report
特性本質上是Apache JMeter對於測試結果資料視覺化方式的順應時代的更新,雖然算是姍姍來遲,雖然並不酷炫,但至少,對於要需要基於它來執行效能測試的人來說,仍然是一個福音。最後,感謝Apache JMeter專案的各位貢獻者對它的持續更新。