背景
在進行綜合場景壓測時,遇到了如何實現不同的請求所占比例不同的問題。
- 有人說將這些請求分別放到單獨的線程組下,然后將線程組的線程數按照比例進行配置。
這種方法不是很好,因為服務器對不同的請求處理能力不同,有的處理快,有的處理慢。若采取上述方案的話,並不會按照我們預期的比例進行並發。
那么如何真實模擬按比例進行並發呢?此前使用LR進行過類似場景的測試時的思路如下:
- 每次向服務器發出請求時,先生成一個隨機數,我們對隨機數的取值划分若干個范圍(對應若干個業務請求),然后對隨機數進行判斷,當隨機數落在某個范圍內,就可以執行對應的請求。
- 比如,我們壓測的過程中,要訪問百度和besttest官網,並且請求比例是2:8,那么可以規定隨機數取值1<=random<=100,然后再划分2個范圍:當隨機數的取值在0到20之間,則訪問百度;當隨機數取值在20和100之間,則訪問besttest官網;根據概率論,當取樣量足夠大的話,訪問百度和besttest官網的請求比例會比較接近2:8。
Jmeter也能這樣實現嗎?答案是肯定的,下面我們使用Jmeter結合剛才的例子進行分解
Jmeter實現(Random)
首先,我們需要一個能夠生成隨機數的函數,剛好jmeter提供了這個函數
在測試計划下,我們右鍵“添加”——配置原件——Random Variable
設置隨機數的變量名稱為num,設置取值范圍0到100
添加兩個如果(if)控制器,添加控制條件,控制執行請求。
右鍵線程組添加“邏輯控制器”——如果(if)控制器
然后在兩個控制器下,分別添加1個http請求。
當隨機數num取值在20和100之間;調用獲取圖形獲取驗證碼;
添加判斷條件,如果當隨機數num取值在1和20之間,調用登錄接口
添加聚合報告,查看結果
運行jmeter驗證,取值是否按照比例請求,我們設置一個線程數,讓其循環100次,結果如下,獲取圖形獲取驗證碼78次,登錄接口22次,基本滿足我們想要的比例。
可以預見的是當數據量達到一定程度之后,會無限接近設置的2比8的比例。
Jmeter實現(計數器)
計數器可以通過如下方式添加,其他的實現思路一樣
后話:
其實在LR中也可以在場景設計里設置不同的請求的比例來實現。但是本文主要是討論Jmeter的實現思路,所以在前文中沒有提及。