Jmeter(五十一) - 從入門到精通高階篇 - jmeter之運動戰(詳解教程)

巨集哥發表於2021-06-09

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基本是一條直線,沒有什麼變化。知道內在原理或者巨集哥說的不對的,可以告訴巨集哥或者指出來,巨集哥及時糾正。

相關文章