背景
在進行綜合場景壓測時,遇到了如何實現不一樣的請求所佔比例不一樣的問題。服務器
- 有人說將這些請求分別放到單獨的線程組下,而後將線程組的線程數按照比例進行配置。
這種方法不是很好,由於服務器對不一樣的請求處理能力不一樣,有的處理快,有的處理慢。若採起上述方案的話,並不會按照咱們預期的比例進行併發。併發
那麼如何真實模擬按比例進行併發呢?此前使用LR進行過相似場景的測試時的思路以下:dom
- 每次向服務器發出請求時,先生成一個隨機數,咱們對隨機數的取值劃分若干個範圍(對應若干個業務請求),而後對隨機數進行判斷,當隨機數落在某個範圍內,就能夠執行對應的請求。
- 好比,咱們壓測的過程當中,要訪問百度和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)控制器,添加控制條件,控制執行請求。spa
右鍵線程組添加「邏輯控制器」——若是(if)控制器
而後在兩個控制器下,分別添加1個http請求。線程
當隨機數num取值在20和100之間;調用獲取圖形獲取驗證碼;
添加判斷條件,若是當隨機數num取值在1和20之間,調用登陸接口
添加聚合報告,查看結果
運行jmeter驗證,取值是否按照比例請求,咱們設置一個線程數,讓其循環100次,結果以下,獲取圖形獲取驗證碼78次,登陸接口22次,基本知足咱們想要的比例。設計
能夠預見的是當數據量達到必定程度以後,會無限接近設置的2比8的比例。blog
Jmeter實現(計數器)
計數器能夠經過以下方式添加,其餘的實現思路同樣接口
後話: 其實在LR中也能夠在場景設計裏設置不一樣的請求的比例來實現。可是本文主要是討論Jmeter的實現思路,因此在前文中沒有說起。