Jmeter之邏輯控制器(Logic Controller)
前言:
1、 Jmeter官網(wǎng)對(duì)邏輯控制器的解釋是:“Logic Controllers determine the order in which Samplers are processed.”。意思是說,邏輯控制器可以控制采樣器(samplers)的執(zhí)行順序。由此可知,控制器需要和采樣器一起使用,否則控制器就沒有什么意義了。放在控制器下面的所有的采樣器都會(huì)當(dāng)做一個(gè)整體,執(zhí)行時(shí)也會(huì)一起被執(zhí)行。
2、JMeter中的Logic Controller分為兩類:
a)?控制測(cè)試計(jì)劃執(zhí)行過程中節(jié)點(diǎn)的邏輯執(zhí)行順序,如:Loop Controller、If Controller等;
b) 對(duì)測(cè)試計(jì)劃中的腳本進(jìn)行分組、方便JMeter統(tǒng)計(jì)執(zhí)行結(jié)果以及進(jìn)行腳本的運(yùn)行時(shí)控制等,如:Throughput Controller、Transaction Controller。
3、Jmeter提供如下這么多的控制器:

一、簡單控制器(Simple Controller):
作用:這是Jmeter里最簡單的一個(gè)控制器,它可以讓我們組織我們的采樣器和其它的邏輯控制器(分組功能),提供一個(gè)塊的結(jié)構(gòu)和控制,并不具有任何的邏輯控制或運(yùn)行時(shí)的功能。
二、循環(huán)控制器(Loop Controller):
作用:指定其子節(jié)點(diǎn)運(yùn)行的次數(shù),可以使用具體的數(shù)值(如下圖,設(shè)置為5次),也可以使用變量
1、Forever選項(xiàng):勾選上這一項(xiàng)表示一直循環(huán)下去
2、如果同時(shí)設(shè)置了線程組的循環(huán)次數(shù)和循環(huán)控制器的循環(huán)次數(shù),那循環(huán)控制器的子節(jié)點(diǎn)運(yùn)行的次數(shù)為兩個(gè)數(shù)值相乘的結(jié)果。

三、僅一次控制器(Once Only Controller):
作用:在測(cè)試計(jì)劃執(zhí)行期間,該控制器下的子結(jié)點(diǎn)對(duì)每個(gè)線程只執(zhí)行一次,登錄場景經(jīng)常會(huì)使用到這個(gè)控制器。
注意:將Once Only Controller作為Loop Controller的子節(jié)點(diǎn),Once Only Controller在每次循環(huán)的第一次迭代時(shí)均會(huì)被執(zhí)行。?
四、ForEach控制器(ForEach Controller):
? 作用:ForEach控制器一般和用戶自定義變量一起使用,其在用戶自定義變量中讀取一系列相關(guān)的變量。該控制器下的采樣器或控制器都會(huì)被執(zhí)行一次或多次,每次讀取不同的變量值。如下圖:
參數(shù):
Input Variable Prefix:輸入變量前綴
Output variable name:輸出變量名稱
Start index for loop(exclusive):循環(huán)開始的索引(這里如果不填寫,默認(rèn)從1開始,如果沒有1開始的變量,執(zhí)行時(shí)會(huì)報(bào)錯(cuò))
End index for loop(inclusive):循環(huán)結(jié)束的索引
Add”_”before number:輸入變量名稱中是否使用“_”進(jìn)行間隔。

用戶自定義變量:
變量名前綴為ForEach Controller中Input variable prefix定義的name + 下劃線(上圖中我們勾選了下劃線)+數(shù)字編號(hào)

執(zhí)行結(jié)果:
總共執(zhí)行了3次,每次執(zhí)行時(shí)會(huì)把獲取到的變量值賦值給輸出變量outNmae,其它地方可以通過${outNmae}進(jìn)行調(diào)用。

五、事務(wù)控制器(Transaction Controller):
作用:?事務(wù)控制器會(huì)生產(chǎn)一個(gè)額外的采樣器,用來統(tǒng)計(jì)該控制器子結(jié)點(diǎn)的所有時(shí)間。

參數(shù):
Generate parent sample:(選中這個(gè)參數(shù)結(jié)果展示如下圖紅框,否則顯示為下圖藍(lán)框)
Include duration of timer and pre-post processors in generated sample:選中這一項(xiàng)會(huì)統(tǒng)計(jì)定時(shí)器(timer)的時(shí)間,否則只統(tǒng)計(jì)采樣器(sample)的時(shí)間

六、If 控制器(If Controller):
? 作用:根據(jù)給定表達(dá)式的值決定是否執(zhí)行該節(jié)點(diǎn)下的子節(jié)點(diǎn),默認(rèn)使用javascript的語法進(jìn)行判斷(如下圖紅框內(nèi)的文字)。

參數(shù):
Interpret Condition as Variable Expression?:選中這一項(xiàng)時(shí)表示:判斷變量值是否等于字符串true(不區(qū)分大小寫)
Evaluate for all children:如果選中這一項(xiàng),在每個(gè)子結(jié)點(diǎn)執(zhí)行前都會(huì)計(jì)算表達(dá)式?
示例一:使用變量的方式進(jìn)行判斷:

示例二:選中Interpret Condition as Variable Expression?



七、Switch控制器(Switch Controller):
作用:Switch控制器通過給該控制器中的Value賦值,來指定運(yùn)行哪個(gè)采樣器。有兩種賦值方式:
第一種是數(shù)值,Switch控制器下的子節(jié)點(diǎn)從0開始計(jì)數(shù),通過指定子節(jié)點(diǎn)所在的數(shù)值來確定執(zhí)行哪個(gè)元素。
第二種是直接指定子元素的名稱,比如采樣器的Name來進(jìn)行匹配。當(dāng)指定的名稱不存在時(shí),不執(zhí)行任何元素。
當(dāng)Value為空時(shí),默認(rèn)執(zhí)行第1個(gè)子節(jié)點(diǎn)元素。?
示例:
1、Switch Controller選擇的值為login page

2、執(zhí)行結(jié)果:

八、吞吐量控制器(Throughput Controller):
? 作用:控制其下的子節(jié)點(diǎn)的執(zhí)行次數(shù)與負(fù)載比例分配,也有兩種方式:
Total Executions:設(shè)置運(yùn)行次數(shù)
Percent Executions:設(shè)置運(yùn)行比例(1~100之間)

示例:
1、設(shè)置線程組循環(huán)5次:

2、Throughput Controller1的子結(jié)點(diǎn)執(zhí)行3次:

3、Throughput Controller2的子結(jié)點(diǎn)執(zhí)行(40% * 線程組循環(huán)次數(shù)5)= 2次:

執(zhí)行結(jié)果:

九、隨機(jī)控制器(Random Controller):
? 作用:隨機(jī)執(zhí)行其下的所某個(gè)子結(jié)點(diǎn)
十、隨機(jī)順序控制器(Random Order Controller):
? 作用:隨機(jī)執(zhí)行其下的所有子結(jié)點(diǎn)