近期在使用Jmeter編寫個輔助測試的腳本,用到了多個Loop Controller和Counter。
當時想的思路就是三個可變的數量值,使用循環實現;但第三個可變值的數量次數,是基於第二次循環中得到的結果才能確認最終次數,每次的結果還會有不一樣的情況。基於思路,先寫了個線性腳本,實現如下所示:
但實際中,第三層循環,並沒有按自己預期來實現,所以就想到了Counter計數器,將腳本中加入了Counter計數器,實現如下所示:
圖中的數字說明:${for1}${for2}${for3}
${for1}是第一個循環器中的Counter變量名
${for2}是第二個循環器中的Counter變量名
${for3}是第三個循環器中的Counter變量名
從圖中可以看出,${for3}是累加的,不會隨着一次循環結束,計數自動重置。
我所想實現的是,第二層循環中的第一次獲取的結果是5個數組,則從索引0 ~ 4依次按置執行第三層循環;第二層循環中的第二次獲取的結果是8個數組,則從索引0 ~ 7依次按置執行第三層循環。
但這樣操作下來,第二次是會直接從索引5開始執行,這樣就會丟失一部分數據,顯然不是自己所想的。
中途也試過很多錯,都不能實現計數重置的功能。好在,某天想起了官方文檔,這個功能在文檔是有描述的,如下所示:
文檔中描述的很清楚,可以使用${__jm__LC__idx}
的方式實現index從0開始,其中LC爲控制器的名稱。
使用官網的文檔,在腳本中加入變量使用,運行如下所示:
從圖中可知,第三層循環的第四個數字就是我所想要的,終於解決了心中的問題。
圖中的數字說明:${for1}${for2}${for3}_${resetForNumber}
前三個數字在之前已經說明過了,這裏只說明下${resetForNumber},這個變量是通過BeanShell Sampler中獲取的,因爲將官網給出的方案寫在了BeanShell Sampler種,代碼如下所示:
long i=0;
i = ${__jm__Loop Controller3__idx};
vars.put("resetForNumber",String.valueOf(i));
雖然,描述起來很簡單,但的確是實際腳本實現的過程中遇到的一個阻礙,好在問題解決了。
所以特整理此篇,希望對以後有需要的朋友有所幫助。