性能測試混合場景中,我們需要組合多個業(yè)務(wù)操作到場景中來。
比如有一個論壇的業(yè)務(wù)分布如下:
開新帖與回復(fù)帖子的比例為2:3,
那么我們在JMeter測試計劃中如何控制其比例呢?
下面我們介紹兩種方式:
1.多線程組方式
2.邏輯控制器控制
多線程組方式:
我們知道JMeter是用線程組來模擬虛擬用戶的,JMeter還可以支持一個計劃中多個線程組。
利用這個特性我們可以把開新帖業(yè)務(wù)放在一個線程組中,回帖業(yè)務(wù)放在另外一個線程組中。
為了制造出業(yè)務(wù)量的比例關(guān)系,我們通過控制線程數(shù)來達(dá)到效果。如下圖:


ReplayTopic為回帖線程組,添加4個線程;
SendTopic為開新帖線程組,添加1個線程,剛好是4:1
當(dāng)然,這只能是近似的,如果這兩個事務(wù)的響應(yīng)時間不一樣,最終完成的業(yè)務(wù)數(shù)比例也會不一樣。
當(dāng)前線程數(shù)是在假定兩個業(yè)務(wù)的響應(yīng)時間一樣的情況下,所以這完全是理想狀況。
可以看出,這種方式控制并不完美。
下面我們用第2種方式:
控制器控制
下圖是一個IF控制器,IF控制器可以使用表達(dá)式來做為條件,這樣我們事以獲取迭代次數(shù)來決定
是回帖還是開帖,比如一共3次迭代,第1次與第3次迭代時開新帖,1,2,3次迭代都會進(jìn)行回帖
接下來我們就要獲取迭代次數(shù),JMeter函數(shù)助手提供了一個__counter函數(shù),可以用來獲取當(dāng)前的
迭代次數(shù)。
好,我們思路有了,迭代次數(shù)也能獲取到,那如何保持3:2的比例呢?這就是一個數(shù)學(xué)問題了。
不賣觀子,直接上代碼:
${__counter(true,)}%2==1||${__counter(true,)}%3==0
上面__counter(true,)是獲取當(dāng)前迭代次數(shù),%是取余,也就是除2余1與3整除時執(zhí)行開新帖。
以9次迭代為例,回帖9次,1,3,5,6,7,9 次迭代時都會開新帖,回剛好是6次
9:6=3:2
基本上保護(hù)了3:2的比例。