1.簡介
運動戰是一種軍事作戰方式,依托較大的作戰空間來換取時間移動兵力包圍敵方,以優勢兵力速戰速決,運動戰的運用歸為這樣一段話“避敵主力,誘敵深入,集中優勢兵力逐個擊破”。今天宏哥也當一回將軍,指揮jmeter在運動中消滅敵人。好了閑話少說,回歸正題,今天主要是講解和分享:在jmeter運行中來更改jmeter的負載。
2.運行中來更改jmeter的負載
從文字中,我們很容易看出意思就是在jmeter測試運行腳本過程中,但是在不停止運行腳本的情況下修改jmeter的負載壓力,來達到我們預期的測試效果。大致步驟就是:宏哥將通過Constant Throughput Time(吞吐量計時器)、一個函數和BeanShell服務器組合完成jmeter的運動戰。具體步驟如下:
2.1建立測試腳本
1、建立測試計划,添加線程組,為了后邊容易觀察負載變化,宏哥將線程組設置成永遠。如下圖所示:
2、添加取樣器,取樣器設置如下圖所示:
3、添加Constant Throughput Time(吞吐量計時器),切記這個計數器是在度娘的下邊。設置(用到的函數就是__P)如下如圖所示:
4、最后分別添加監視器:View Results Tree、Graph Results和jp@gc - Bytes Throughput Over Time。如下圖所示:
2.2BeanShell服務器
使用JMeter Beanshell作為服務器,以便發出Beanshell命令。我們通過調用beanshell函數來更新先前定義的“hits”參數。Beanshell是一個內置於JMeter中的Java源代碼解釋器。
1、在jmeter.properties上取消注釋以下行(大約在908左右)你也可以打開文件Ctrl+F快速查找BeanShell定位到,如下圖所示:
2、重啟jmeter,docs命令窗口輸入:Netstat -an | find “9000” 命令查看端口運行狀態,如下圖所示:
同時在jmeter的啟動頁面也可以看到啟動的端口,如下圖所示:
3、在JMeter主目錄下創建文件夾bsh,並添加一個名為update_parameter.bsh的.bsh文件,其中包含以下內容:setprop("hits",args[0]); 如下圖所示:
4、在jmeter的home目錄下輸入cmd命令,進入到docs命令窗口,如下圖所示:
5、執行 dir bash\ 如下圖所示:
6、文件調用setprop函數以通過第一個參數(args [0])中的值更新“hits”現在能夠在測試運行時調用創建的.bsh來更新“hits”。在jmeter的home目錄下通過以下命令將參數更新為每分鍾“1200”個請求:
java -jar .\lib\bshclient.jar localhost 9000 .\bsh\update_parameter.bsh 1200
7、因為宏哥開始是1200,現在宏哥更新成120,如下圖所示:
8、運行一段時間后,宏哥再從120更新成1200,如下圖所示:
9、觀察運行中的吞吐量,有明顯的改變,是不是呈現出一個U字形(馬蹄形)啊,因為剛開始宏哥設置的吞吐是1200運行一段時間后,通過命令動態修改成120,然后再運行一段時間后,通過命令動態修改成1200,所以才成如圖U型。如果修改成120,立刻在修改成1200就會成V字形哦。如下圖所示:
3.小結
小伙伴們可能按照宏哥的步驟做完后,沒有看到宏哥的效果,其實宏哥第一次運行也沒有看到。排查了一圈沒有問題啊,到底是哪里出問題了,沒有達到預期的效果。然后宏哥將線程組里用戶修改成10以后,出現了預期的效果,宏哥猜測可能是由於一個用戶,吞吐量120已經夠用了,所以從1200變成120,再變成1200基本是一條直線,沒有什么變化。知道內在原理或者宏哥說的不對的,可以告訴宏哥或者指出來,宏哥及時糾正。