從命令行運行 JMeter .jmx 文件並配置報告文件
一、概述
Apache JMeter是一個基於 Java 的開源應用程序,旨在分析和測量 Web 應用程序的性能。它基本上是一個應用程序,我們可以使用它來測試和分析服務器在不同負載條件下的整體性能。
JMeter 提供了一個易於使用的 GUI,我們可以使用它來定義、執行和查看各種負載測試的報告。它還支持非 GUI 模式,我們可以通過命令行界面運行腳本。
在本教程中,我們將學習如何在配置報告文件時從命令行運行 JMeter JMX 文件。
2.設置
在我們開始之前,讓我們設置一個 JMeter 腳本,我們將在整個演示過程中使用該腳本。為了模擬某些 API,我們將使用https://postman-echo.com.
首先,我們將在 JMeter 中創建一個帶有Thread Group
Test Plan
。其次,我們將向我們的Thread Group
添加一個HTTP Request
採樣器,該採樣器使用 Postman 回顯服務提供的模擬端點。最後,我們將向我們的Thread Group
添加一個Summary Report
,為我們的測試運行生成一個摘要。
讓我們詳細看看這些步驟中的每一個。
2.1.創建 JMeter 測試計劃和線程組
我們將使用 JMeter GUI 來設置我們的Test Plan.
首先,讓我們在Test Plan
中添加一個Thread Group
:
此外,我們將線程組配置為使用 5 個線程,這些線程的啟動週期為 1 秒,循環計數為 10:
2.2.配置 HTTP 請求採樣器
現在,讓我們在這個Thread Group
中創建一個HTTP Request
採樣器:
讓我們配置HTTP Sampler
以使用 Postman echo 服務提供的 GET 端點:
2.3.配置摘要報告偵聽器
最後,讓我們向我們的Thread Group
添加一個Summary Report
偵聽器,以總結我們的測試計劃的結果:
這樣,我們就準備好了基本的 JMeter 腳本。讓我們在 GUI 中運行它並查看生成的Summary Report
:
顯然,在運行 JMeter 腳本時,我們能夠成功地為我們的測試配置生成一個總結報告。我們將其保存為“ Summary-Report.jmx”
並使用它從命令行運行測試。
3. 從命令行運行 JMeter .jmx
文件
到目前為止,我們有一個帶有Test Plan
示例 JMX 文件,該文件配置為運行具有示例模擬 API 的測試。
如前所述,JMeter JMX 文件可以使用命令行界面在非 GUI 模式下運行。我們使用帶有選項的jmeter
命令從 CLI 運行 JMeter 腳本文件。可以通過將目錄更改為 JMeter 安裝路徑中的bin
目錄來運行此命令。
讓我們看一下運行“ Summary-Report.jmx”
文件並生成測試報告的 CLI 命令:
$ jmeter -n -t Summary-Report.jmx -l Summary-Report.jtl
運行上述命令會在 CLI 上產生以下輸出:
Creating summariser <summary>
Created the tree successfully using /Users/baeldung/Summary-Report.jmx
Starting standalone test @ 2023 Jun 3 13:32:11 IST (1685779331706)
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary = 50 in 00:00:08 = 6.6/s Avg: 499 Min: 193 Max: 3601 Err: 0 (0.00%)
Tidying up ... @ 2023 Jun 3 13:32:19 IST (1685779339273)
... end of run
該命令基本上運行我們的測試文件“ Summary-Report.jmx”
並在“ Summary-Report.jtl
”文件中生成一個總結報告。
JMeter CLI 提供了多個選項來配置腳本的運行方式。我們使用這些參數來覆蓋 JMX 文件中設置的參數。讓我們看看我們在腳本中使用的一些選項:
-
-n
:指定 JMeter 以非 GUI 模式運行 -
-t
:指定包含Test Plan
JMX 文件的位置 -
-l
:指定 JTL(JMeter 測試日誌)文件的位置
此外,讓我們看一下“ Summary-Report.jtl
”文件內容的前幾行:
timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
1685779331808,978,HTTP Request,200,OK,Thread Group 1-1,text,true,,681,143,5,5,https://postman-echo.com/get?foo1=bar1&foo2=bar2,974,0,780
1685779331959,827,HTTP Request,200,OK,Thread Group 1-2,text,true,,679,143,5,5,https://postman-echo.com/get?foo1=bar1&foo2=bar2,823,0,625
1685779332163,786,HTTP Request,200,OK,Thread Group 1-3,text,true,,681,143,5,5,https://postman-echo.com/get?foo1=bar1&foo2=bar2,785,0,589
1685779332787,194,HTTP Request,200,OK,Thread Group 1-2,text,true,,681,143,5,5,https://postman-echo.com/get?foo1=bar1&foo2=bar2,194,0,0
我們可以看到生成的 JTL 文件包含 CSV 格式的每個 API 請求的詳細信息。
4.配置JMeter匯總報告
我們可以自定義摘要報告中顯示的參數及其格式選項。自定義匯總報告有兩種方式:
- 更新 JMeter 屬性
- 將參數作為命令行選項傳遞
讓我們詳細看看這些方法中的每一個。
4.1.配置 JMeter 屬性
JMeter 屬性文件“ jmeter.properties
”位於 JMeter 安裝目錄的bin
目錄中。屬性文件中與摘要報告相關的屬性以“ jmeter.save.saveservice.
“ 字首:
#jmeter.save.saveservice.output_format=csv
#jmeter.save.saveservice.response_code=true
#jmeter.save.saveservice.latency=true
默認情況下,這些屬性是有註釋的,我們可以取消註釋來設置它們的值。讓我們取消註釋一些屬性並更新它們的值:
jmeter.save.saveservice.response_code=false
jmeter.save.saveservice.latency=false
jmeter.save.saveservice.output_format=xml
現在重新運行 JMeter 腳本會生成以下結果:
<?xml version="1.0" encoding="UTF-8"?>
<testResults version="1.2">
<httpSample t="801" it="0" ct="593" ts="1685791090172" s="true" lb="HTTP Request" rm="OK" tn="Thread Group 1-3" dt="text" by="679" sby="143" ng="5" na="5">
<java.net.URL>https://postman-echo.com/get?foo1=bar1&foo2=bar2</java.net.URL>
</httpSample>
<httpSample t="1004" it="0" ct="782" ts="1685791089969" s="true" lb="HTTP Request" rm="OK" tn="Thread Group 1-2" dt="text" by="679" sby="143" ng="5" na="5">
<java.net.URL>https://postman-echo.com/get?foo1=bar1&foo2=bar2</java.net.URL>
</httpSample>
</testResults>
從結果中可以看出,輸出格式現在是 XML 形式。此外,我們觀察到響應代碼和延遲字段現在不會在輸出中生成。
4.2. JMeter 屬性作為 CLI 選項
我們可以通過命令行將它們作為選項傳遞來覆蓋“ jmeter.properties
”文件中設置的屬性:
$ jmeter -Jjmeter.save.saveservice.output_format=csv -n -t Summary-Report.jmx -l Summary-Report.jtl
在這裡,我們使用-J
選項在運行測試腳本時傳遞和覆蓋任何現有的 JMeter 屬性。
該命令現在生成以下結果:
timeStamp,elapsed,label,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,IdleTime,Connect
1685792003144,961,HTTP Request,OK,Thread Group 1-1,text,true,,685,143,5,5,https://postman-echo.com/get?foo1=bar1&foo2=bar2,0,741
1685792003306,799,HTTP Request,OK,Thread Group 1-2,text,true,,681,143,5,5,https://postman-echo.com/get?foo1=bar1&foo2=bar2,0,599
1685792004106,200,HTTP Request,OK,Thread Group 1-2,text,true,,681,143,5,5,https://postman-echo.com/get?foo1=bar1&foo2=bar2,0,0
因此,我們通過將參數作為 CLI 選項傳遞,成功地將輸出格式從 XML 覆蓋為 CSV。
5.結論
在本文中,我們學習瞭如何從命令行運行 JMeter JMX 文件並配置摘要報告文件。
首先,我們研究瞭如何使用jmeter
命令及其一些選項來運行 JMX 文件。然後我們看到瞭如何通過配置jmeter.properties
文件中的屬性來配置摘要報告。最後,我們討論瞭如何通過命令行將它們作為選項傳遞來覆蓋這些屬性。
與往常一樣,我們所有示例的 JMeter 腳本都可以在 GitHub 上找到。