『動善時』JMeter基礎 — 55、使用非GUI模式執行JMeter(命令列模式)

繁華似錦Fighting發表於2021-07-19

1、JMeter的非GUI模式說明

之前,我們在啟動JMeter時,一直會有一個黑色命令列視窗,視窗中提示瞭如下的資訊:

Jun 05, 2021 10:21:22 AM java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use NON GUI Mode:
   jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
   Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================

資訊中提示

  1. 不要使用 GUI 模式進行負載測試! GUI 模式僅用於測試建立和測試除錯。
  2. 對於負載測試,使用非 GUI 模式。
    非 GUI 模式啟動方式:jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
  3. 可以增加Java虛擬機器的堆空間,以滿足您的測試需求。
    在JMeter批處理檔案中修改當前環境變數:HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"

說明

Java虛擬機器在執行Java程式的過程中,會把它所管理的記憶體劃分為若干個不同的資料區域。主要包括:程式計數器、虛擬機器棧、本地方法棧、Java堆、方法區(執行時的常量池)。

如下圖所示:

image

而Java Heap記憶體,簡單的說是用來存放new出來的物件和陣列。也就是負責執行時資料的存放,由JVM的自動管理。

在做負載測試時,Java Heap記憶體空間,調整的大一些,可以避免因Java堆記憶體不足,而終止測試的情況。如報錯:java.lang.OutOfMemoryError: Java heap space

2、為什麼使用非GUI模式執行JMeter

使用GUI方式啟動JMeter,在執行執行緒較多的測試時,會造成記憶體和CPU的大量消耗,導致客戶機卡死。

所以做一般的介面測試、指令碼除錯、壓力測試指令碼編寫等操作時,我們都會選用GUI模式,因為這裡不會涉及到壓力測試,只是除錯指令碼,我們本身關注的也是結果是否通過。而在進行負載測試時,都是使用命令列模式執行指令碼,來減少因系統資源的消耗,對測試結果的影響。

並且命令列方式支援在多個環境下使用,可以在Windows系統的dos環境下,也可以在Linux環境上執行。

命令列模式優點:

  1. 圖形化介面消耗更多資源,如CPU和記憶體,容易使壓力機達到瓶頸,從而影響測試結果。
  2. 圖形化介面不支援大型的負載測試和效能測試,併發較大時,JMeter會崩潰。
  3. 命令列方式可以把指令碼配置到Jenkins上實現持續整合,做成自動化測試。通過shell指令碼或批處理命令均可執行,測試結果可生成報表,可被直接使用生成圖形化報告。
  4. 支援遠端或分散式執行。

3、使用非GUI模式執行JMeter

(1)非GUI模式執行JMeter步驟

1)確定執行路徑

執行命令前要檢查當前目錄是否是%JMeter_Home%\bin目錄。

  • 如果 JMeter 指令碼不在當前目錄,需要指定完整的路徑。
  • 如果要把執行的結果儲存在其他地方,也要指定完整的路徑。
  • 命令中不指定測試計劃與測試結果的路徑時,
    測試計劃只在當前目錄中查詢,測試結果預設都是在執行JMeter命令所在的目錄下生成。

2)執行命令

例如,上面日誌中提示的命令方式,如下:

jmeter -n -t [testplan jmx file] -l [results file] -e -o [Path to web report folder]

引數解釋:

  • -n:表示non gui mode,就是非圖形化模式。
  • -t:指定JMX指令碼路徑,即test plan(測試計劃)。後面跟需要執行的JMeter 指令碼的路徑和指令碼名稱。
  • -l:指定結果檔案路徑。
    後面跟輸出結果檔案路徑和結果檔名稱。
    1)若沒有指定指定結果檔案路徑,則自動建立,可以生成.csv檔案或者.jtl檔案。
    2)若只寫指令碼名稱,則預設是在當前目錄查詢或建立。
  • -e:設定測試完成後生成測試報表。
  • -o:指定測試報表生成資料夾,該資料夾必須為空或不存在。

(2)其它引數說明

對於負載測試,您必須在非GUI模式下執行JMeter,以獲得最佳結果。

為此,請使用以下命令選項:

image

4、CLI模式執行示例

示例一:

測試計劃指令碼在%JMeter_Home%\bin目錄中,且測試結果也生成在%JMeter_Home%\bin目錄中。

在CMD中進行到%JMeter_Home%\bin位置,執行命令如下:

jmeter -n -t CLI_test.jmx -l result.jtl

命令含義:以命令列模式執行當前目錄下的CLI_test.jmx測試指令碼檔案,並在當前目錄下輸出測試結果檔案result.jtl

如下圖所示:

image

提示:

  • 測試指令碼一定要在bin目錄中,測試結果檔案可以不建立,沒有則自動建立,不寫路徑就預設建立在bin目錄中。
  • 如果已存在測試結果檔案,測試結果會追加到結果檔案中。(檔案不能處於被其他軟體開啟狀態)
  • 測試結果檔案和日誌資訊檔案,都是這種方式,下面就不重複介紹了。

示例二

把測試指令碼檔案在%JMeter_Home%\bin目錄中,然後把測試結果檔案和測試日誌資訊,輸出到指定的路徑。

在CMD中進行到%JMeter_Home%\bin位置,執行命令如下:

jmeter -n -t CLI_test.jmx -l C:\Users\L\Desktop\cli\result.jtl -j C:\Users\L\Desktop\cli\test.log

如下圖所示:

image

示例三

執行任何位置的JMeter指令碼檔案。

在CMD中進行到%JMeter_Home%\bin位置,執行命令如下:

jmeter -n -t C:\Users\L\Desktop\JMeterScript\CLI_test.jmx -l C:\Users\L\Desktop\cli\result.jtl

如下圖所示:

image

示例四:(推薦)

在任何位置,執行任何位置的指令碼。

前提:需要配置JMeter的bin目錄到環境變數中。

在任何位置執行如下命令:

jmeter -n -t C:\Users\L\Desktop\JMeterScript\CLI_test.jmx -l C:\Users\L\Desktop\cli\result.jtl

如下圖所示:

image

配置完成JMeter的環境變數,就可以在任何位置執行JMeter命令,不用每次都到%JMeter_Home%\bin位置執行命令了。

同理:執行命令所在目錄中的指令碼,同樣可以不寫路徑。

示例五

預設分散式執行,命令如下:

jmeter -n -t CLI_test.jmx -r -l report\01-result.csv -j report\01-log.log

示例六

指定IP分散式執行,命令如下:

jmeter -n -t CLI_test.jmx -R 192.168.10.25:1036 -l report\01-result.csv -j report\01-log.log

即:啟動remote_hosts分散式測試。

注意:如果使用-R serverIP port模式,將啟動指定的遠端壓力機,配置檔案中設定的 remote_hosts 屬性將被此設定覆蓋,類似指定遠端壓力機執行測試。

示例七

生成測試結果報表,即:生成 HTML報告,並儲存報告到指定資料夾中。

命令格式:

jmeter -n -t 【Jmx指令碼位置】-l 【結果檔案result.jtl存放的位置】-e -o 【報告指定資料夾】

示例:

jmeter -n -t test1.jmx  -l  report\01-result.jtl  -e -o tableresult

說明:最後三個命令,不進行演示,後面的文章中會詳細說明。

相關文章