然而,這將導致壹個問題。如果按照時間維度執行,兩者都執行了10min,采樣器A和采樣器B的響應時間不同,那麽這段時間內A和B的請求數不可能是1:3。
2.jmeter自帶計算功能,可以達到結果。
簡述控制器的功能。這個控制器對每個請求進行計數,相當於給他壹個數字。
當參數為true時,每個用戶都有自己的計數器,比如10個線程組和100個循環,這意味著計數器的值為1-100。
當選擇false時,全局計算器有10個線程組和100個循環,計數器值為1-10000。
那麽如果妳想用1:3的比例,就用if控制器。
條件是什麽?${__counter(true,)}%4==0且${__counter(true,)}%4!=0
詳見/seling Chen/article/details/47844375。
3.用JSR223采樣器?+?絕妙的
將以下代碼添加到控制器中。
12345678910111213141516171819
int as int[];vars.putObject("RANDOM_VALUES ",值);}//將在SwitchController值中使用的增量將在0和2//之間,因為有3個TCS Integer Increment =(Integer)vars . getobject(" Increment ");if(increment = = null){ increment = integer . value of(0);}別的?{ increment = integer . value of((increment . int value()+1)% values . length);?} String value = integer . tostring(values[increment . int value()]);?vars.put("SWITCH_VALUE ",值);vars.putObject("INCREMENT ",增量);sample result . setresponsedata(" SWITCH _ VALUE from inside:"+VALUE,null);回歸?"開關值:"+值;
相當於每次遍歷RANDOM_VALUES數組,依次取值,然後用if控制器判斷,達到百分比的效果。
參見:/translate/jmeter-control-percentage-of-sampler?金屬波紋管
比較以上三種方式:
不用說,第壹種方案有時達不到百分比分配要求的效果,這才是上策。
經過測試,第三種方案有壹個很大的缺點,就是使用取樣器,消耗量大。尤其是更復雜的場景,比如場景A和場景B,需要壹個JSR223采樣器,場景A下面還有壹個復合場景,需要按比例分配請求(這是相當常見的),然後還需要壹個額外的采樣器。這樣的話,就太麻煩了。如果使用本地jmeter而不是分布式的,壓力可能會因為開銷而過高。
方案二:用jmeter自帶的計算器是個不錯的方法。但是對於壹些復雜的場景,這個公式就有點難寫了。
比如比例為3:2時,我看到網上實現都是$ {_ _ counter (true,)}% 2 = = 1 | $ {_ _ counter (true,)}% 3 = = 0。
這個計算方法比較復雜,那麽有沒有更簡單的方法實現呢?
其實是有的。
例如,以下場景:
那麽表達式應該怎麽寫呢?
上面有3的倍數和5的倍數,所以取它的最小公倍數15,按15除。
兩者都使用If控制器,表達式如下:
答:?${__counter(false,)} % 15 & lt;=5
b:?${__counter(false,)} % 15 & gt;五
c:?${__counter(false,)}%15==1
d: ${__counter(false,)} % 15 & gt;1。& amp?${__counter(false,)} % 15 & lt;=5
總結規律:
按照最小公倍數劃分,每個控制器拿自己的份額。
上面的3:2實現方法就更簡單了,壹個占2/5,壹個占3/5,不用寫那麽復雜的數學表達式~ ~ ~