邏輯控制器介紹與使用

- 如果(if)控制器
- 事物控制器
- 循環(huán)控制器
- while controller
- critical section controller
- foreach控制器
- include controller
- 交替控制器
- 僅一次控制器
- 隨機控制器
- 隨機順序控制器
- 錄制控制器
- runtime controller
- 簡單控制器
- 吞吐量控制器
- 模塊控制器
- switch controller
1、如果(if)控制器
支持JavaScript、Variable、expression,我常用的是Variable,這里以Variable進(jìn)行舉例
步驟:
1、首先我們選擇線程組--邏輯控制--如果(if)控制器

2、選擇線程組--配置元件--用戶自定義變量,設(shè)置一個變量test,值為true

3、如果控制器引用該變量

4、如果控制器下面添加http請求,添加一個百度搜索請求,線程組下面添加查看結(jié)果樹

5、查看結(jié)果,http請求成功發(fā)送

6、如果我們把變量test的值true改為false或者其他值呢?我們可以看到不執(zhí)行,簡單的說說如果控制器 根據(jù)值是true還是false決定請求是否發(fā)出

2、事物控制器
事物控制器我覺得是比較好理解的,什么是事物?舉例:一次登錄操作,先輸入地址,然后輸入賬號、密碼,點擊登錄按鈕,這個過程可以理解為一個事物。所以我們在測試過程中,會把一個事物中所有請求放到一個事務(wù)控制器里面。

3、循環(huán)控制器
循環(huán)控制器也比較好理解。這里有一點需要注意,除了為線程組指定的循環(huán)值之外,JMeter還將循環(huán)它們一定次數(shù)。我們在線程組里面設(shè)置:線程數(shù)為1,循環(huán)數(shù)為2。但是循環(huán)控制器 里面輸入2,那么總執(zhí)行次數(shù)為4。



4、while controller
while 條件控制器,其節(jié)點下的元件將一直運行直到while的條件為false。可以輸入表達(dá)式或者變量,這里以變量舉例。上面我們添加一個test變量,值我們依舊改為true,然后把http請求放到while控制器下面。

步驟:
1、新增while 條件控制器,輸入變量test

2、新增http請求
3、查看結(jié)果,可以看到,我們的test變量值為true,所以一直在執(zhí)行。

5、critical section controller
臨界區(qū)控制器 沒想到具體用法。也沒用過,這里不做介紹

6、foreach控制器
循環(huán)控制器
官方定義: ForEach控制器循環(huán)遍歷一組相關(guān)變量的值。 將采樣器(或控制器)添加到ForEach控制器時,每個樣本(或控制器)都會執(zhí)行一次或多次,其中在每個循環(huán)期間變量都有一個新值。 輸入應(yīng)包含多個變量,每個變量都用下劃線和數(shù)字?jǐn)U展。 每個這樣的變量都必須有一個值。
個人理解:經(jīng)常配合用戶自定義使用,循環(huán)變量(有點類似于CSV Data Set Config)。取值賦予HTTP請求之類的操作。下面我將用一個具體例子進(jìn)行解釋。

步驟:
1、添加用戶自定義變量,添加key_1---key4

2、選擇線程組--邏輯控制器--foreach控制器,配置如下:

參數(shù)說明
- 輸入變量前綴:我們剛剛定義key_1到key_4,前綴都是key,所以這里我們填寫key
- start index for loop:循環(huán)變量下標(biāo)起點
- end index for loop:循環(huán)變量下標(biāo)終點
- 輸出變量名稱:循環(huán)控制器生成的變量名稱
- add "_" before number:變量前綴是否加"_"作為分隔符
3、在foreach控制器下面新增HTTP請求,值填寫我們剛剛輸出的變量 K

4、運行查看結(jié)果,我們可以看到只有3個請求。也就是只取到了selenium2、selenium3、selenium4,并沒有取到selenium1。看來開始值不取呀!那么我們怎么取到selenium1呢?很簡單。循環(huán)變量下標(biāo)起點改為0

7、include controller
用來導(dǎo)入外部的測試片段,在執(zhí)行時會執(zhí)行導(dǎo)入的測試計劃。被導(dǎo)入的測試計劃有特殊要求,不能含有線程組。只能包含簡單控制器及控制器下的元件。簡單點說就是相當(dāng)于一個執(zhí)行單元。類似我們程序開發(fā)中的函數(shù)一樣。這里我沒用過,在此不做介紹。個人感覺一般用不到。

8、交替控制器
交替控制器,其節(jié)點下的取樣器會交替執(zhí)行。下面用一個例子來進(jìn)行說明。

參數(shù)說明:
- ignore sub-controller blocks:忽略子控制器。即子控制器失效
- interleave across threads:交錯線程執(zhí)行(一般線程數(shù)不為1時勾選)
步驟:
1、選擇線程組--邏輯控制器--交替控制器,下面新增兩個HTTP請求,命名為HTTP1、HTTP2

2、線程組下面新增一個HTTP請求,命名為HTTP3
3、線程組設(shè)置循環(huán)次數(shù)為3

4、運行,查看結(jié)果。可以看到執(zhí)行順序是 HTTP1-->HTTP3-->HTTP2-->HTTP3-->HTTP1-->HTTP3。也就是HTTP1和HTTP2交替執(zhí)行。具體使用場景根據(jù)情況使用。

9、僅一次控制器
僅一次控制器,也就是此控制器下的子元件只運行一次,即使把僅一次控制器放在循環(huán)控制器下面 ,也只運行一次。我們在模擬 請求時有時只需要登錄一次,就可以把登錄的部分放在僅一次控制器下面。

10、隨機控制器
隨機控制器節(jié)點下的元件會隨機運行,與交替控制器不一樣的是節(jié)點下的元件運行順序不變。

實例:因為隨機,2次都取HTTP1

11、隨機順序控制器
官方定義:隨機順序控制器很像簡單控制器,因為它最多只執(zhí)行一次子節(jié)點,但節(jié)點的執(zhí)行順序是隨機的。

實例:我們可以看到控制器里的HTTP請求都執(zhí)行,只是順序不一樣。

12、錄制控制器
當(dāng)我們錄制請求的時候,所有的請求都會保存在該控制器下面。

13、runtime controller
runtime controller 用來控制其子元件的執(zhí)行時長 。

步驟:
1、設(shè)置線程組

2、選擇線程組--邏輯控制器--runtime controller,設(shè)置時間為5,添加HTTP請求

3、查看結(jié)果 ,可以看到雖然我們線程組時間為1,但是我們在runtime controller 改了時間為5,也就是HTTP1請求會一直運行5s。HTTP3只運行一次。

14、簡單控制器
官方定義:Simple Logic Controller允許您組織采樣器和其他邏輯控制器。 與其他邏輯控制器不同,此控制器不提供超出存儲設(shè)備的功能。

15、吞吐量控制器
用來控制其下子元件的執(zhí)行次數(shù),并無控制 吞吐量的功能。

參數(shù)說明:
- percent executions:按執(zhí)行次數(shù)的百分比來計算執(zhí)行次數(shù),此時throughput的取值是0~100。per user 是否勾選對percent executions沒有影響
- total executions:按throughput的值來指定執(zhí)行次數(shù),此時per user 與total executions一起來影響執(zhí)行次數(shù)(一般 來說選擇total executions就不要勾選 per user)
步驟:
1、設(shè)置線程組,線程數(shù)10,循環(huán)次數(shù)為2

2、選擇線程組--邏輯控制器--吞吐量控制器,設(shè)置為total executions,吞吐量為2

3、查看結(jié)果,只執(zhí)行2次。應(yīng)該執(zhí)行20次的,但是我們設(shè)置了吞吐量為2,所謂只執(zhí)行2次。

16、模塊控制器
官方定義:模塊控制器提供了一種在運行時將測試計劃片段替換為當(dāng)前測試計劃的機制。

17、switch controller
條件控制器。滿足條件執(zhí)行

步驟:
1、設(shè)置線程組

2、選擇線程組--邏輯控制器--switch controller,新增3個HTTP請求,switch value 設(shè)置為2

3、查看結(jié)果,我們可以看到當(dāng)設(shè)置為2時,執(zhí)行第3個請求。如果不輸入時,執(zhí)行第一個請求。也就是說坐標(biāo)從0開始,0代表第一個請求。

歡迎關(guān)注微信公眾號:軟件測試汪。軟件測試交流群:809111560
轉(zhuǎn)載請注意出處,謝謝合作