JMeter性能測試3.0時代之-多維度的圖形化HTML報告

在上一篇博客JMeter性能測試3.0時代之-全新JMeter插件管理中我說會寫真正的JMeter 3.0新特性,時隔兩周,總算在這個周末,暫停其他安排,來繼續(xù)這個未完成的系列。
本文主要介紹JMeter3.0引入的新特性:Dashboard Report,圖形化的HTML格式多維度測試報告。借助這個特性,可以很大程度上降低我們搭建基于JMeter的性能測試平臺時,在結(jié)果展示上的難度,將更多的經(jīng)歷放在后端的平臺功能而不是去臨時學習前端圖表庫。

一.為什么談這個新特性

在JMeter3.0之前,官方只提供在工具的UI上對測試結(jié)果部分維度的圖形化展示,這對我?guī)砹藘煞矫娴睦_:

  1. 在實際使用中,在平臺中集成JMeter后需要頁面展示TPS曲線,平均響應時間曲線等圖表時,需要我們手動操刀擺弄如Hightcharts/Echarts等前端圖表庫。
  2. 要查看歷史的測試結(jié)果,需要啟動JMeter的圖形化界面,導入保存的CSV結(jié)果,過程繁瑣,并且當結(jié)果集較大時,JMeter需要耗費相當多的時間在界面上展示圖形化報告。

本文討論的新特性為這兩個問題帶來了較好的解決辦法:

  • 新特性良好的實現(xiàn)了結(jié)果數(shù)據(jù)可視化,生成的報告是HTML頁面形式,并且包含大多數(shù)實際測試中關(guān)心的度量維度的,可以便捷地嵌入到平臺,從瀏覽器來查看每次測試運行的。
  • 只要保留生成的HTML頁面,后期要查看該次測試的結(jié)果,只需要在瀏覽器打開即可,方便快捷。

二.新特性簡介

JMeter3.0提供一個用于生成HTML頁面格式圖形化報告的擴展模塊。該模塊支持通過兩種方式生成多維度圖形化測試報告:

  1. 在JMeter性能測試結(jié)束時,自動生成本次測試的HTML圖形化報告
  2. 使用一個已有的結(jié)果文件(如CSV文件)來生成該次結(jié)果的HTML圖形化報告

其默認提供的度量維度包括:

  1. APDEX(Application Performance Index)指數(shù)
  2. 聚合報告
- 類似于UI上的*Aggregate Report*
  1. Errors報告
- 展示不同錯誤類型的數(shù)量以及百分比
  1. 響應時間變化曲線
- 展示平均響應時間隨時間變化情況
- 類似于JMeter Plugins在UI上的*jp@gc - Response Times Over Time*
  1. 數(shù)據(jù)吞吐量時間曲線
- 展示每秒數(shù)據(jù)吞吐量隨時間變化的情況
- 類似于JMeter Plugins在UI上的*jp@gc - Bytes Throughput Over Time*
  1. Latency time變化曲線
- 展示Latency time隨時間變化的情況
- 類似于JMeter Plugins在UI上的*jp@gc - Response Latencies Over Time*
  1. 每秒點擊數(shù)曲線
- 類似于JMeter Plugins在UI上的*jp@gc - Hits per Second*
  1. HTTP狀態(tài)碼時間分布曲線
- 展示響應狀態(tài)碼隨時間的分布情況
- 類似于JMeter Plugins在UI上的*jp@gc - Response Codes per Second*
  1. 事務吞吐量時間曲線(TPS)
- 展示每秒處理的事務數(shù)隨時間變化情況
- 類似于JMeter Plugins在UI上的*jp@gc - Transactions per Second*
  1. 平均響應時間與每秒請求數(shù)的關(guān)系圖
- 展示平均響應時間與每秒請求數(shù)(可以理解為QPS)的關(guān)系
  1. Latency time與每秒請求數(shù)的關(guān)系圖
- 展示Latency time與每秒請求數(shù)的關(guān)系
  1. 響應時間百分位圖
- 響應時間的百分位分布圖
  1. 活動線程數(shù)變化曲線
- 展示測試過程中活動線程數(shù)隨時間變化情況
  1. 平均響應時間與線程數(shù)的關(guān)系圖
- 展示平均響應時間與線程數(shù)的關(guān)系
- 類似于JMeter Plugins在UI上的*jp@gc - Response Times vs Threads*
  1. 柱狀響應時間分布圖
- 展示落在各個平均響應時間區(qū)間的請求數(shù)情況

注1:Latency time沒有翻譯成中文,這里對其計算方式做注解:
- Latency time = 接收到響應的第一個字節(jié)的時間點 - 請求開始發(fā)送的時間點

from just before sending the request to just after the first response has been received
-- Apache JMeter Glossary

- 響應時間(JMeter術(shù)語中的Elapsed time) = 接收完所有響應內(nèi)容的時間點 - 請求開始發(fā)送的時間點

from just before sending the request to just after the last response has been received
-- Apache JMeter Glossary

注2:Apdex 標準從用戶的角度出發(fā),將對應用響應時間的表現(xiàn),轉(zhuǎn)為用戶對于應用性能的可量化為范圍為 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報告中展示更詳細數(shù)據(jù),需要確保如下配置
    • jmeter.save.saveservice.assertion_results_failure_message = true
    • 如果使用了事務控制器(Transaction Controller),確認Generate parent sample為未勾選狀態(tài)

2.生成報告

a. 在壓力測試結(jié)束時報告

  • 基本命令格式:
    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目錄下產(chǎn)生如下文件(夾):


用瀏覽器打開index.html文件,即可查看各種圖形化報告:



注1:在3.0版本,由于源碼中字符編碼的問題,可能會遇到生成的報告中,中文標簽展示為亂碼的問題,因篇幅限制,解決辦法請戳這里看我另一篇文章。
2016-12 update :在3.1版本中,該問題已修復

四.自定義配置

JMeter3.0在bin目錄新增了reportgenerator.properties文件保存了所有關(guān)于圖形化HTML報告生成模塊的默認配置,要變更配置,建議不要直接編輯該文件,而是推薦在user.properties中去配置和覆蓋。

1.總體配置

總體配置都是以jmeter.reportgenerator.為前綴,如:jmeter.reportgenerator.overall_granularity=60000

  • overall_granularity:定義采樣點粒度,默認為60000ms,通常在穩(wěn)定性以外的測試中,我們可能需要定義更細的粒度,比如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中,有關(guān)于集合報告中的三個百分位的默認值:

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 圖表的實現(xiàn)類,如果有自己定制的實現(xiàn),將該配置的值寫為自定義實現(xiàn)類的類名
  • property.set_granularity 設置圖標的采樣點粒度,不配置時默認使用總體配置中的粒度設置

3.輸出配置

輸出配置都以jmeter.reportgenerator.exporter為前綴。

  • property.output_dir 配置默認的報告輸出路徑。在命令行可以用-o選項來設置特定的路徑覆蓋該配置。
  • html.series_filter 用于過濾展示內(nèi)容。如在user.properties添加如下配置:
    jmeter.reportgenerator.exporter.html.series_filter=(^Login)(-success|-failure)?
    則最后的報告只展示名為Login這個取樣器的數(shù)據(jù)。該配置包含兩部分,(-success|-failure)?Transactions per second圖表所依賴的配置。前面部分接受一個正則表達式用來過濾。

4.報告定制

JMeter的HTML報告生成時是使用了固定的模板,模板文件路徑為./bin/report-template
進入該目錄可以看到報告的每個頁面都有一個.fmkr模板文件,包括index.html.fmkr./content/pages路徑下的幾個文件。通過查看這些模板文件,就可以知道怎樣去進行報告的輕度定制,比如將一些文本修改得更易懂,或者修改為中文等

  • 頁面的title
    • 默認為"Apache JMeter Dashboard"
    • 可以由reportgenerator.properties中的jmeter.reportgenerator.report_title來統(tǒng)一定義,這種方式就是所有頁面的title都使用同一個。
    • 也可以直接修改對應的.fmkr文件中的title標簽中雙引號內(nèi)的值,如<title>${reportTitle!"想要設置的title"}</title>,這中方式可以為每個頁面單獨定義title
  • 圖表的名稱
    • 當前版本下,各圖表的名稱是直接在模板文件中定義,要修改也是直接修改模板文件中對應元素的值即可
    • 如要修改Transactions Per Second圖表的名稱,可以直接在./content/pages/Throughput.html.fmkr文件中修改,效果如下圖
      自定義圖表名稱
  • 頁面的其他各元素也可以用相同的方法進行定制

五.總結(jié)

本次介紹的Dashboard Report特性本質(zhì)上是Apache JMeter對于測試結(jié)果數(shù)據(jù)可視化方式的順應時代的更新,雖然算是姍姍來遲,雖然并不酷炫,但至少,對于要需要基于它來執(zhí)行性能測試的人來說,仍然是一個福音。最后,感謝Apache JMeter項目的各位貢獻者對它的持續(xù)更新。

References

  1. Apache JMeter Dashboard Report
  2. Apache JMeter Glossary
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容