平時用jmeter做接口測試或者性能測試的時候,基本都是直接在jmeter用戶端維護腳本以及調試,但是最後的執行最好是用指令行執行,尤其是性能測試或者自動化測試的時候嗎,因為指令行執行可以降低GUI模式帶來的性能損耗
但是經常會有執行前需要修改腳本中的參數的情況,比如調整全局變量或者線程數,循環次數等
網上找到資料:JMeter的測試計劃在運作Sampler之前會先加載運作屬性(jmeter.properties,system.properties等)檔案,而且JMeter還提供了方法可以動态修改屬性,在指令行中使用【-J】 來指定JMeter Properties,腳本裡面使用__P() 函數來擷取指令中指定的屬性值:

并發數設定為${__P(concurrent_number,1)},循環次數取消勾選Forever,設定為${__P(cycles,1)},其中後面的1是預設值,作用是執行一次來調試腳本
接下來打開cmd指令視窗,輸入腳本指令,-J加上之前設定的變量=XXX即可指定變量的值,比如-Jconcurrent_number=10,說明制定了10個線程數,-Jcycles=10,說明循環5次;另外其中-n是說明用指令行執行,-t是指定了執行的腳本路徑,-l是指定日志路徑,-e是說測試結束生成測試報告 -0指定測試報告路徑,如果測試報告目錄不存在,建立一個并存入報告
具體參考:
執行:--執行完成提示end of run
檢視日志和測試報告(打開report裡面的index.html):
如上就是通過指令行指定參數執行腳本的過程啦,但是問題來了,因為我們的腳本之後基本都是要共享的,腳本不會放在本地,基本都會放在測試伺服器上,如果每次都登入測試伺服器去執行,也有一點麻煩,那麼也可以通過參數指定執行的測試伺服器
-r指定在遠端機器上跑測試,執行後會去jmeter.properties中去找remote_hosts這個參數的參數值,這個值可以配置多個,多個伺服器之間用逗号隔開
注意:使用這種方式需要先配置遠端機器,參考:
主要包括:1)遠端測試伺服器的jdk和Jemter版本必須和本測試機一緻,否則可能會因為版本原因失敗;2)如果引用csv參數檔案的,那麼伺服器上也需要放上參數檔案,且與本地機器路徑相同;3)每個遠端節點上隻能有一個Jmeter從機器,除非我們使用不同的RMI端口;4)系統關閉防火牆,或者開放特定端口,5)主機器和所有從機器最好在同一個子網内;6)伺服器需要啟動jmeter-server.bat
第一種方式執行:1、通過GUI方式啟動--本地主機,可以選擇需要啟動的遠端測試機,也可以直接選擇遠端啟動所有
第二種方式執行:1、指令行啟動,啟動jmeter.properties中指定的所有主機:jmeter -n -t script.jmx -r;
2、指令行啟動,自定義需要啟動的主機:jmeter -n -t script.jmx -R server1,server2,…
指令行後面跟上-x代表指定在測試結束後退出執行
以上