平時用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指定測試報告路徑,如果測試報告目錄不存在,新建一個並存入報告
具體參考:https://blog.csdn.net/qq_24394093/article/details/90732577
執行:--執行完成提示end of run
查看日志和測試報告(打開report里面的index.html):
如上就是通過命令行指定參數執行腳本的過程啦,但是問題來了,因為我們的腳本之后基本都是要共享的,腳本不會放在本地,基本都會放在測試服務器上,如果每次都登錄測試服務器去執行,也有一點麻煩,那么也可以通過參數指定執行的測試服務器
-r指定在遠程機器上跑測試,執行后會去jmeter.properties中去找remote_hosts這個參數的參數值,這個值可以配置多個,多個服務器之間用逗號隔開
注意:使用這種方式需要先配置遠程機器,參考:https://www.cnblogs.com/miniren/p/6515009.html
主要包括: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代表指定在測試結束后退出執行
以上