自定製jmeter多維度報告-華山

一.爲何談這個新特性

在JMeter3.0以前,官方只提供在工具的UI上對測試結果部分維度的圖形化展現,這對我帶來了兩方面的困擾:html

  1. 在實際使用中,在平臺中集成JMeter後須要頁面展現TPS曲線,平均響應時間曲線等圖表時,須要咱們手動操刀擺弄如Hightcharts/Echarts等前端圖表庫。前端

  2. 要查看歷史的測試結果,須要啓動JMeter的圖形化界面,導入保存的CSV結果,過程繁瑣,而且當結果集較大時,JMeter須要耗費至關多的時間在界面上展現圖形化報告。正則表達式

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

  • 新特性良好的實現告終果數據可視化,生成的報告是HTML頁面形式,而且包含大多數實際測試中關心的度量維度的,能夠便捷地嵌入到平臺,從瀏覽器來查看每次測試運行的。瀏覽器

  • 只要保留生成的HTML頁面,後期要查看該次測試的結果,只須要在瀏覽器打開便可,方便快捷。app

二.新特性簡介

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

  1. 在JMeter性能測試結束時,自動生成本次測試的HTML圖形化報告工具

  2. 使用一個已有的結果文件(如CSV文件)來生成該次結果的HTML圖形化報告性能

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

  1. APDEX(Application Performance Index)指數

  2. 聚合報告

  • 相似於UI上的Aggregate Report

Errors報告
  • 展現不一樣錯誤類型的數量以及百分比

響應時間變化曲線
  • 展現平均響應時間隨時間變化狀況

  • 相似於JMeter Plugins在UI上的jp@gc - Response Times Over Time

數據吞吐量時間曲線
  • 展現每秒數據吞吐量隨時間變化的狀況

  • 相似於JMeter Plugins在UI上的jp@gc - Bytes Throughput Over Time

Latency time變化曲線
  • 展現Latency time隨時間變化的狀況

  • 相似於JMeter Plugins在UI上的jp@gc - Response Latencies Over Time

每秒點擊數曲線
  • 相似於JMeter Plugins在UI上的jp@gc - Hits per Second

HTTP狀態碼時間分佈曲線
  • 展現響應狀態碼隨時間的分佈狀況

  • 相似於JMeter Plugins在UI上的jp@gc - Response Codes per Second

事務吞吐量時間曲線(TPS)
  • 展現每秒處理的事務數隨時間變化狀況

  • 相似於JMeter Plugins在UI上的jp@gc - Transactions per Second

平均響應時間與每秒請求數的關係圖
  • 展現平均響應時間與每秒請求數(能夠理解爲QPS)的關係

Latency time與每秒請求數的關係圖
  • 展現Latency time與每秒請求數的關係

響應時間百分位圖
  • 響應時間的百分位分佈圖

活動線程數變化曲線
  • 展現測試過程當中活動線程數隨時間變化狀況

平均響應時間與線程數的關係圖
  • 展現平均響應時間與線程數的關係

  • 相似於JMeter Plugins在UI上的jp@gc - 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文件,便可查看各類圖形化報告:

注:在3.0版本,因爲字符編碼問題,可能會遇到生成的報告中,中文標籤展現爲亂碼的問題,因篇幅限制,解決辦法請戳這裏看我另外一篇文章。

四.自定義配置

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圖表所依賴的配置。前面部分接受一個正則表達式用來過濾。

4.報告定製

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

  • 頁面的title

    • 默認爲」Apache JMeter Dashboard」

    • 能夠由reportgenerator.properties中的jmeter.reportgenerator.report_title來統必定義,這種方式就是全部頁面的title都使用同一個。

    • 也能夠直接修改對應的.fmkr文件中的title標籤中雙引號內的值,如<title>${reportTitle!"想要設置的title"}</title>,這中方式能夠爲每一個頁面單獨定義title

  • 圖表的名稱

    • 當前版本下,各圖表的名稱是直接在模板文件中定義,要修改也是直接修改模板文件中對應元素的值便可

    • 如要修改Transactions Per Second圖表的名稱,能夠直接在./content/pages/Throughput.html.fmkr文件中修改,效果以下圖
      自定義圖表名稱

  • 頁面的其餘各元素也能夠用相同的方法進行定製

五.總結

本次介紹的Dashboard Report特性本質上是Apache JMeter對於測試結果數據可視化方式的順應時代的更新,雖然算是姍姍來遲,雖然並不酷炫,但至少,對於要須要基於它來執行性能測試的人來講,仍然是一個福音。最後,感謝Apache JMeter項目的各位貢獻者對它的持續更新。

相關文章
相關標籤/搜索