在進行多業務混合場景測試中,需要分配每個場景占比。
具體有兩種方式:
1.多線程組方式;
2.邏輯控制器控制;
第一種:
jmeter一個測試計划可以添加多個線程組,我們把不同的業務放在不同的線程組中,通過控制線程數來控制業務占比。線程組A觸發線程數90,
線程組B觸發線程數60;
這樣就可以粗略的控制業務占比近似3:2。但是如果兩個事務響應時間不一樣,最終完成的業務數也會有所差異。假設當前線程數的響應時間是完全一致的,才會有3:2的業務占比,當然這個是理想狀態。
第二種方式:
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,完全不需要寫那么復雜的數學表達式~~~