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,從而影響測試的結果值。
參考: