在進行多業務混合場景測試中,需要分配每個場景占比。
具體有兩種方式:
1.多線程組方式;
2.邏輯控制器控制;
第一種:
jmeter一個測試計划可以添加多個線程組,我們把不同的業務放在不同的線程組中,通過控制線程數來控制業務占比。比如實際業務中需要線程組A、線程組B和線程組C的比例為:3:2:1,那么我們可以設置線程組A的線程數為90,線程組B的線程數為60,線程組C的線程數為30,這樣就可以粗略的達到要求的比例。但是如果三個事務的響應時間不一樣,最終完成的業務數也會有所差異。假設當前線程數的響應時間是完全一致的,才會有3:2:1的業務占比,當然這個是理想狀態。
例如測試需求如下:對業務A、業務B、業務C、業務D、業務E,5個業務按並發比例要求進行100個用戶並發的壓力測試;
JMeter是可以實現上述需求的,測試方案如下:
1.創建一個測試計划;
2.在該計划下添加5個線程組,分別是對業務A、業務B、業務C、業務D、業務E;
3.分別設置線程組業務A、業務B、業務C、業務D、業務E的線程數為:40、10、20、25、5(總並發量為100,按並發比例設置並發用戶數)
第二種方式:
jmeter的函數對話框中${__counter(True,)}函數獲取當前迭代的次數。迭代次數也能獲取到,那如何保持3:2的比例呢?這就是一個數學問題了。不賣觀子,直接上代碼:${__counter(true,)}%2==1||${__counter(true,)}%3==0上面_counter(true,)是獲取當前迭代次數,%是取余,也就是是除2余1與3,整除時執行開新帖。以9次迭代為例:回帖9次,1,3,5,6,7,9次迭代時都會開新帖,回帖剛好是6次。9:6=3:2基本上達到了3:2的比例。
方案二:采用jmeter本身自帶的計算器,不失為一個好的方法。但是針對一些復雜的場景,這個計算式有點難寫,
比如:3:2這個比例,我看到網上的實現都是${__counter(true,)}%2==1||${__counter(true,)}%3==0,
這種計算方式就比較復雜了,那有沒有簡單一點實現方式呢?
其實是有的。
當參數為true時,每個用戶有自己的計數器,比如10個線程組,100個loop,這是計數器的值為1-100.
當選擇false,全局計算器,10個線程組,100個loop,計數器值為1-10000
比如下面場景:
那么表達式應該怎么寫呢?
上面有3的倍數,5的倍數,那么取其最小公倍數15,按照15分割。
均使用If控制器,表達式分別為:
a: ${__counter(false,)}%15 <=5
b: ${__counter(false,)}%15 >5
c: ${__counter(false,)}%15==1
d: ${__counter(false,)}%15>1&& ${__counter(false,)}%15<=5
總結規律:
按照最小的公倍數分割,每個控制器取他們應占的份數。
上面的3:2的實現手段,就更容易了,一個占2/5,一個占3/5