天天看點

JMeter基礎 — 使用非GUI模式運作JMeter(指令行模式)

JMeter基礎 — 使用非GUI模式運作JMeter(指令行模式)

1、JMeter的非GUI模式說明

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

properties
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堆、方法區(運作時的常量池)。

如下圖所示:

JMeter基礎 — 使用非GUI模式運作JMeter(指令行模式)

而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,以獲得最佳結果。

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

JMeter基礎 — 使用非GUI模式運作JMeter(指令行模式)

4、CLI模式運作示例

示例一:

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

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

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

指令含義:以指令行模式運作目前目錄下的CLI_test.jmx測試腳本檔案,并在目前目錄下輸出測試結果檔案result.jtl。

如下圖所示:

JMeter基礎 — 使用非GUI模式運作JMeter(指令行模式)

提示:

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

示例二:

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

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

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

如下圖所示:

JMeter基礎 — 使用非GUI模式運作JMeter(指令行模式)

示例三:

執行任何位置的JMeter腳本檔案。

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

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

如下圖所示:

JMeter基礎 — 使用非GUI模式運作JMeter(指令行模式)

示例四:(推薦)

在任何位置,執行任何位置的腳本。

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

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

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

如下圖所示:

JMeter基礎 — 使用非GUI模式運作JMeter(指令行模式)

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

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

示例五:

預設分布式執行,指令如下:

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

示例六:

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

bash
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 【報告指定檔案夾】

示例:

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

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

JMeter基礎 — 使用非GUI模式運作JMeter(指令行模式)

這些資料,對于【軟體測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你

關注我的微信公衆号【傷心的辣條】免費擷取~

我的學習交流群:902061117 群裡有技術大牛一起交流分享~

如果我的部落格對你有幫助、如果你喜歡我的部落格内容,請 “點贊” “評論” “收藏” 一鍵三連哦!

好文推薦:

阿裡小黑歎息:越來越多的年輕人從職場撤退了?

Python簡單?先來40道基礎面試題測試下

App公共測試用例梳理

從一名開發人員轉做測試的一些感悟