『動善時』JMeter基礎 — 56、JMeter使用命令列模式生成HTML測試報告

繁華似錦Fighting發表於2021-11-03

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

如下圖所示:

image

注意點:

  • result.jtl結果檔案的輸入位置,要和HTML報告資料夾的輸入位置再同一個目錄中。
  • 確認目標目錄下沒有結果檔案。
  • 確認-o引數後面指定的資料夾,一定是不存在的或者是空資料夾

然後去目標目錄中檢視HTML圖形化報告資料夾中的內容。

image

開啟index.html檔案,如下圖所示:

image

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

image

之後就可以到指定的目錄中檢視生成的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頁面:用圖表的形式展示測試資料,讓測試報告更加直觀。

主要有如下特點:

  1. 將測試過程中經常使用的資料,用圖表的形式展示,讓測試結果更加直觀。
  2. 每個圖表資料,有兩種展示形式。
  3. 支援請求樣例過濾顯示。
  4. 支援匯出PNG圖片格式。

Over Time for Charts頁面

1)Response Times Over Time圖表

每秒鐘響應時間,X軸表示的是系統執行的時刻,Y軸表示的是響應時間,F(X,Y)表示系統隨著時間的推移,系統的響應時間的變化,可以看出響應時間穩定性。

image

說明:響應時間變化曲線,展示平均響應時間隨時間變化情況,類似於JMeter Plugins在UI上的Response Times Over Time

2)Bytes Throughput Over Time圖表

位元組接收與傳送的數量,每秒傳輸位元組吞吐量,表明JMeter在測試時,隨著時間推移傳送和接收的位元組數。

如下圖所示:

image

說明:資料吞吐量時間曲線,展示每秒資料吞吐量隨時間變化的情況,類似於JMeter Plugins在UI上的 Bytes Throughput Over Time

3)Latencies Over Time圖表

延遲時間變化曲線:展示Latency time隨時間變化的情況,類似於JMeter Plugins在UI上的Response Latencies Over Time

如下圖所示:

image

4)Response Time Percentiles Over Time (successful responses) 圖表

指令碼執行時間內成功響應的請求,即:響應時間的百分位分佈圖。

如下圖所示:

image

5)Active Threads Over Time圖表

指令碼執行時間內的活動執行緒數變化曲線,展示測試過程中活動執行緒數隨時間變化情況。

如下圖所示:

image

6)Connect Time Over Time圖表

指令碼執行時間內平均連線時間。

即:隨時間變化,每個時間節點花費在連線上的平均時間。

如下圖所示:

image

Throughput for Charts頁面

1)HitsPer Second (excluding embedded resources)圖表

每秒點選次數曲線圖,即:每秒鐘向伺服器傳送的請求數量。

如下圖所示:

image

2)CodesPer Second (excluding embedded resources)圖表

每秒狀態碼數量分佈曲線,即:每秒鐘伺服器返回的ResponseCode數量。

如下圖所示:

image

3)TransactionsPer Second圖表

每秒事物數曲線圖,即:伺服器每秒鐘處理的事務數量。

如下圖所示:

image

4)ResponseTime Vs Request圖表

響應時間點與每秒請求數關係曲線,即:每秒傳送多少個請求時,所對應的平均響應時間。

如下圖所示:

image

5)LatencyVs Request圖表

延遲時間點與每秒請求數關係曲線,即:每秒傳送多少個請求時,所對應的平均延時。

如下圖所示:

image

Response Times for Charts頁面

1)Response Time Percentiles圖表

響應時間與百分位數對應關係的曲線圖,即:有百分之多少的執行緒花費了某一響應時間。

如下圖所示:

image

2)Response Time Overview圖表

響應時間概述柱狀圖,即:響應時間分佈。

如下圖所示:

image

3)Time Vs Threads圖表

活動執行緒與平均響應時間變化曲線圖,即:多個活動執行緒情況下的平均響應時間。

X軸表示的是活動執行緒數,也就是併發訪問的使用者數,Y軸表示的是響應時間,F(X,Y)表示在某種併發量的情況下,系統的響應時間是多少。

如下圖所示:

image

4)Response Time Distribution圖表

響應時間分佈圖,即:在某一響應時間段內的執行緒響應數量。

如下圖所示:

image

4、測試結果檔案的相關配置

使用JMeter進行測試的時候,我們可以收集每個請求中的資訊,並儲存到結果檔案中,如:.jtl檔案或.cvs檔案中。

如下圖所示:

image

我們可以看到第一行的欄位,都是我們選擇記錄請求中的哪些資料到結果檔案中。

如果我們使用GUI模式執行JMeter,設定要儲存的資料,需要在監聽器元件介面中,點選Configure按鈕進行配置。

如下圖所示:

image

但在非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,從而影響測試的結果值。

參考:

相關文章