JMeter提供了一個用於生成HTML頁面圖形化報告的擴充套件模組。該模組支援通過兩種方式生成多維度圖形化測試報告。
- 在JMeter效能測試結束時,自動生成本次測試的HTML圖形化報告。
- 使用一個已有的測試結果檔案,如
.jtl
結果檔案,.csv
結果檔案,來生成該次測試結果的HTML圖形化報告。
1、自動生成HTML圖形化報告
自動生成HTML圖形化報告的命令如下:
jmeter -n -t 【Jmx指令碼位置】-l 【結果檔案result.jtl存放的位置】-e -o 【生成HTML報告指定資料夾】
引數解釋:
-n
:表示non gui mode
,就是非圖形化模式。-t
:指定JMX指令碼路徑,即test plan
(測試計劃)。後面跟需要執行的JMeter 指令碼的路徑和指令碼名稱。-l
:指定結果檔案路徑。後面跟輸出結果檔案路徑和結果檔名稱。
1)若沒有指定指定結果檔案路徑,則自動建立,可以生成.csv
檔案或者.jtl
檔案。
2)若只寫指令碼名稱,則預設是在當前目錄查詢或建立。-e
:設定測試完成後生成測試報表。-o
:指定測試報表生成資料夾。資料夾必須為空或不存在。
在CMD中進行到%JMeter_Home%\bin
位置,執行命令如下:
jmeter -n -t CLI_test.jmx -l C:\Users\L\Desktop\cli\result.jtl -e -o C:\Users\L\Desktop\cli\tableresult
如下圖所示:
注意點:
result.jtl
結果檔案的輸入位置,要和HTML報告資料夾的輸入位置再同一個目錄中。- 確認目標目錄下沒有結果檔案。
- 確認
-o
引數後面指定的資料夾,一定是不存在的或者是空資料夾。
然後去目標目錄中檢視HTML圖形化報告資料夾中的內容。
開啟index.html
檔案,如下圖所示:
2、使用已有的測試結果檔案生成HTML報告
使用命令:jmeter -g <log file> -o <Path to output folder>
引數說明:
-g
:指定已存在的測試結果檔案路徑,僅用於生成測試報表。-o
:指定測試報表生成資料夾,資料夾必須為空或不存在。
在CMD中進入到測試結果檔案的所在目錄,執行命令如下:
jmeter -g result.jtl -o C:\Users\L\Desktop\cunliu\output
之後就可以到指定的目錄中檢視生成的HTML報告了。
推薦配置JMeter的環境變數,這讓就可以在任何目錄中執行JMeter命令了。
3、HTML圖形化報告內容詳解
(1)Dashboard頁面:(重點檢視)
1)Test and Report informations
:指的是測試和報告資訊。
File
:測試結果的儲存檔名稱。Start Time
:測試開始時間。End Time
:測試結束時間。Filter for display
:展示過濾器。
2)APDEX(Application Performance Index)
:應用程式效能滿意度的標準。其中:
Apdex
範圍在0-1之間,1表示達到所有使用者均滿意,越接近1滿意度越高。toleration threshold
:耐受閾值。frustration threshold
:挫敗閾值。
3)Requests Summary
:請求的通過率(OK)與失敗率(KO),百分比顯示。
4)Statistics
:資料分析,基本將Summary Report
(彙總報告)和Aggrerate Report
(聚合報告)的結果合併。
5)Errors
:錯誤情況,依據不同的錯誤型別,將所有錯誤結果展示。
6)Top 5 Errors by sampler
:顯示前5個錯誤的取樣器。
(2)Charts頁面:(輔助分析)
Charts
頁面:用圖表的形式展示測試資料,讓測試報告更加直觀。
主要有如下特點:
- 將測試過程中經常使用的資料,用圖表的形式展示,讓測試結果更加直觀。
- 每個圖表資料,有兩種展示形式。
- 支援請求樣例過濾顯示。
- 支援匯出PNG圖片格式。
Over Time for Charts頁面:
1)Response Times Over Time
圖表
每秒鐘響應時間,X軸表示的是系統執行的時刻,Y軸表示的是響應時間,F(X,Y)表示系統隨著時間的推移,系統的響應時間的變化,可以看出響應時間穩定性。
說明:響應時間變化曲線,展示平均響應時間隨時間變化情況,類似於
JMeter Plugins
在UI上的Response Times Over Time
。
2)Bytes Throughput Over Time
圖表
位元組接收與傳送的數量,每秒傳輸位元組吞吐量,表明JMeter在測試時,隨著時間推移傳送和接收的位元組數。
如下圖所示:
說明:資料吞吐量時間曲線,展示每秒資料吞吐量隨時間變化的情況,類似於
JMeter Plugins
在UI上的Bytes Throughput Over Time
。
3)Latencies Over Time
圖表
延遲時間變化曲線:展示Latency time
隨時間變化的情況,類似於JMeter Plugins
在UI上的Response Latencies Over Time
。
如下圖所示:
4)Response Time Percentiles Over Time (successful responses)
圖表
指令碼執行時間內成功響應的請求,即:響應時間的百分位分佈圖。
如下圖所示:
5)Active Threads Over Time
圖表
指令碼執行時間內的活動執行緒數變化曲線,展示測試過程中活動執行緒數隨時間變化情況。
如下圖所示:
6)Connect Time Over Time
圖表
指令碼執行時間內平均連線時間。
即:隨時間變化,每個時間節點花費在連線上的平均時間。
如下圖所示:
Throughput for Charts頁面:
1)HitsPer Second (excluding embedded resources)
圖表
每秒點選次數曲線圖,即:每秒鐘向伺服器傳送的請求數量。
如下圖所示:
2)CodesPer Second (excluding embedded resources)
圖表
每秒狀態碼數量分佈曲線,即:每秒鐘伺服器返回的ResponseCode
數量。
如下圖所示:
3)TransactionsPer Second
圖表
每秒事物數曲線圖,即:伺服器每秒鐘處理的事務數量。
如下圖所示:
4)ResponseTime Vs Request
圖表
響應時間點與每秒請求數關係曲線,即:每秒傳送多少個請求時,所對應的平均響應時間。
如下圖所示:
5)LatencyVs Request
圖表
延遲時間點與每秒請求數關係曲線,即:每秒傳送多少個請求時,所對應的平均延時。
如下圖所示:
Response Times for Charts頁面:
1)Response Time Percentiles
圖表
響應時間與百分位數對應關係的曲線圖,即:有百分之多少的執行緒花費了某一響應時間。
如下圖所示:
2)Response Time Overview
圖表
響應時間概述柱狀圖,即:響應時間分佈。
如下圖所示:
3)Time Vs Threads
圖表
活動執行緒與平均響應時間變化曲線圖,即:多個活動執行緒情況下的平均響應時間。
X軸表示的是活動執行緒數,也就是併發訪問的使用者數,Y軸表示的是響應時間,F(X,Y)表示在某種併發量的情況下,系統的響應時間是多少。
如下圖所示:
4)Response Time Distribution
圖表
響應時間分佈圖,即:在某一響應時間段內的執行緒響應數量。
如下圖所示:
4、測試結果檔案的相關配置
使用JMeter進行測試的時候,我們可以收集每個請求中的資訊,並儲存到結果檔案中,如:.jtl
檔案或.cvs
檔案中。
如下圖所示:
我們可以看到第一行的欄位,都是我們選擇記錄請求中的哪些資料到結果檔案中。
如果我們使用GUI模式執行JMeter,設定要儲存的資料,需要在監聽器元件介面中,點選Configure
按鈕進行配置。
如下圖所示:
但在非GUI模式下執行測試用例,需要在jmeter.properties
配置檔案中,根據自己需求進行修改。
主要修改jmeter.properties
配置檔案中的Results file configuration
部分內容。
#---------------------------------------------------------------------------
# Results file configuration
#---------------------------------------------------------------------------
# This section helps determine how result data will be saved.
# The commented out values are the defaults.
# legitimate values: xml, csv, db. Only xml and csv are currently supported.
#jmeter.save.saveservice.output_format=csv
# The below properties are true when field should be saved; false otherwise
#
# assertion_results_failure_message only affects CSV output
#jmeter.save.saveservice.assertion_results_failure_message=true
#
# legitimate values: none, first, all
#jmeter.save.saveservice.assertion_results=none
#
# jmeter.save.saveservice.data_type=true
# jmeter.save.saveservice.label=true
# jmeter.save.saveservice.response_code=true
# response_data is not currently supported for CSV output
# jmeter.save.saveservice.response_data=false
# Save ResponseData for failed samples
# jmeter.save.saveservice.response_data.on_error=false
# jmeter.save.saveservice.response_message=true
# jmeter.save.saveservice.successful=true
# jmeter.save.saveservice.thread_name=true
# jmeter.save.saveservice.time=true
# jmeter.save.saveservice.subresults=true
# jmeter.save.saveservice.assertions=true
# jmeter.save.saveservice.latency=true
# Only available with HttpClient4
# jmeter.save.saveservice.connect_time=true
# jmeter.save.saveservice.samplerData=false
# jmeter.save.saveservice.responseHeaders=false
# jmeter.save.saveservice.requestHeaders=false
#jmeter.save.saveservice.encoding=false
# jmeter.save.saveservice.bytes=true
# Only available with HttpClient4
# jmeter.save.saveservice.sent_bytes=true
# jmeter.save.saveservice.url=true
#jmeter.save.saveservice.filename=false
#jmeter.save.saveservice.hostname=false
# jmeter.save.saveservice.thread_counts=true
#jmeter.save.saveservice.sample_count=false
# jmeter.save.saveservice.idle_time=true
# Timestamp format - this only affects CSV output files
# legitimate values: none, ms, or a format suitable for SimpleDateFormat
#jmeter.save.saveservice.timestamp_format=ms
#jmeter.save.saveservice.timestamp_format=yyyy/MM/dd HH:mm:ss.SSS
# For use with Comma-separated value (CSV) files or other formats
# where the fields' values are separated by specified delimiters.
# Default:
#jmeter.save.saveservice.default_delimiter=,
# For TAB, one can use:
#jmeter.save.saveservice.default_delimiter=\t
# Only applies to CSV format files:
# Print field names as first line in CSV
#jmeter.save.saveservice.print_field_names=true
# Optional list of JMeter variable names whose values are to be saved in the result data files.
# Use commas to separate the names. For example:
#sample_variables=SESSION_ID,REFERENCE
# N.B. The current implementation saves the values in XML as attributes,
# so the names must be valid XML names.
# By default JMeter sends the variable to all servers
# to ensure that the correct data is available at the client.
# Optional XML processing instruction for line 2 of the file:
# Example:
#jmeter.save.saveservice.xml_pi=<?xml-stylesheet type="text/xsl" href="../extras/jmeter-results-detail-report.xsl"?>
# Default value:
#jmeter.save.saveservice.xml_pi=
# Prefix used to identify filenames that are relative to the current base
#jmeter.save.saveservice.base_prefix=~/
# AutoFlush on each line written in XML or CSV output
# Setting this to true will result in less test results data loss in case of Crash
# but with impact on performances, particularly for intensive tests (low or no pauses)
# Since JMeter 2.10, this is false by default
#jmeter.save.saveservice.autoflush=false
提示:
- 將上面的註釋開啟,並且將值修改成
true
,就會開啟該條記錄,JMeter就會將該條資訊輸出到我們指定的.jtl
檔案中。- 如果希望在Errors報告中展示更詳細資料,需要確保如下配置:
jmeter.save.saveservice.assertion_results failure message = true
- 如果使用了事務控制器(
Transaction Controller
),確認Generate parent sample
為未勾選狀態。- 這些配置需要慎重開啟,因為壓測過程中,會產生大量的這樣的記錄,真正壓測時,最好不要開太多的日誌記錄,只需要開啟我們關注的資料資訊即可。
- 另外,
#jmeter.save.saveservice.output_format=csv
選項,如果更改為xml
,儲存的資料量會很大,也是會影響IO,從而影響測試的結果值。
參考: