Jmeter全方面講解——Jmeter的元件使用介紹:(十)邏輯控制器詳解


邏輯控制器有可能會打破Jmeter的執行順序,Jmeter的邏輯控制器有:事務控制器、循環控制器、僅一次控制器、IF控制器、吞吐量控制器、ForEach控制器、隨機控制器、While控制器、Include控制器、Runtime控制器、臨界部分控制器、交替控制器、錄制控制器、簡單控制器、隨機順序控制器、Switch控制器、模塊控制器。下面介紹幾種控制器的使用。

一:事務控制器

Jmeter會將每個請求默認當為一個事務,但是由於實際業務中,一個事務可能需要好幾個請求組成,如轉賬的事務,需要轉出的接口請求正確且轉入的接口請求正確才算是事務成功,但凡其中有一個請求出錯,轉賬的事務都不會成功。如果某個事務需要好幾個請求組合完成,那么我們就可以拿事務控制器將這些請求包裝起來。被包裝起來的請求都是正確的,事務控制器才是正確的,其中任何一個請求出錯了,事務控制器就出錯。

例子:事務控制器下添加了4個Http請求,每個請求都是對百度發起請求,只有每個請求都是通過的,事務控制器才會通過,否則事務控制器都是失敗的。

(1)所有請求都正確的情況:

可以看到四個請求都是通過的情況下,事務控制器才是通過的

(2)事務控制器下存在有錯誤請求的情況:

可以看到只要其中有一個請求發生了錯誤,那么事務控制器也會錯誤。

 

二:循環控制器

我們希望對某個取樣器循環請求時,就可以使用到循環控制器。

例子:

(1)為請求添加個循環控制器,循環次數填3

可以看到請求被循環請求了3次。

(2)為請求添加個循環控制器,循環次數選擇永遠,那么請求就會無休止地不斷執行。

可以看到請求會持續不斷地執行。

(3)配合線程屬性設置,最終的循環次數為:線程數*循環次數*循環控制器次數,下面線程組設置3個線程,3次循環,為請求添加個循環控制器次數填3

可以看到總共執行了27次請求。

 

三:僅一次控制器

用於控制某個請求在一次腳本執行下只執行一次。

例子:在循環控制器下添加兩個請求,其中一個請求用【僅一次控制器】包裝起來,那么這個請求只會被執行一次。

可以看到被【僅一次控制器】包裹起來的“HTTP請求2”只被執行了一次。

 

四:IF控制器

用於控制滿足什么條件下,再去執行被包裹起來的請求。該控制器應用范圍比較廣泛,滿足我們日常開發中想要某個請求滿足什么條件才能執行的需求。比如:我們希望系統中的所有請求都需要成功登錄后才能執行對應請求,希望某個請求需要前一個請求是正確的情況下才執行等需求。

先來介紹下IF控制器的組成部分:

1、Expression:表示我們填入的條件表達式

2、Interpret Condition as Variable Expression:如果勾選,則我們填寫的Expression需要借助於__jexl3函數或者__groovy函數,如果不勾選,則直接填寫我們的條件表達式即可

3、Evaluate for all children:將該控制器作用域所有子項的取樣器,一般不勾選。

4、Use status of last sample:將執行該IF控制器前的最后一個取樣器作為判斷,如果是通過的就返回真,否則返回false

 

實例1:借助__jexl3()函數完成表達式編寫。先添加一個百度請求,添加后置處理器提取title變量:“百度一下,你就知道”,再添加一個被IF控制器包裹的請求,IF控制器填寫表達式:如果${title}變量包含“百度”,則執行,不包含則跳過:

表達式代碼:${__jexl3("${title}".contains("百度"),)}

通過該IF控制器,就可以判斷${title}變量是否包含“百度”關鍵字,如果包含則執行被包起來的請求,不包含則跳過,執行結果:

由於${title}包含了“百度”字符串,所以會執行被IF控制器包裹起來的“HTTP請求3”

下面將表達式結果改成false,如圖:

由於${title}變量沒有包含"百度222"字符串,所以被IF控制器包裹起來的“HTTP請求3”就不會執行,如圖:

實例二:不借助於__jexl3()或__groovy()編寫表達式,此種方式性能較低,所以我們一般都會借助於__jexl3()或__groovy()編寫我們的表達式。

執行結果跟實例一一致,只是性能有所下降:

實例三:使用Use status of last sample:使用執行該IF控制器前的最后一個取樣器結果作為判斷,如果最后一個取樣器通過就返回true,如果失敗就返回false。

執行結果:由於前面的取樣器是通過的,所以返回true,所以就會執行“HTTP請求3”:

 

五:while控制器

該控制器就類似於編程語言的while(Boolean boolean)循環控制,比較少用,了解即可。此處有三種情況:

1、什么都不填或者填true:那就相當於while(ture)死循環,請求會持續不斷一致執行。

2、填flase:沒有意義,永遠不會執行被包裹的請求

3、填寫具體的表達式,表達式同上面的IF控制器

實例1:表達式填寫true

可以看到請求會持續不斷執行。

 

實例2:借助jexl3函數助手填寫表達式

由於上面的條件表達式永遠都為true,所以也會一直不斷執行:

 

六:吞吐量控制器

該控制器主要用於按照指定比例或者次數執行請求

有兩個選項:1、Total Executions:設置請求執行指定次數,這里有幾種情況

(1)如果設置的Total Executions次數<線程組設置的線程數*循環次數,那么就會運行此處Total Executions設置的次數

(2)如果設置的Total Executions次數>線程組設置的線程數*循環次數,那么會運行線程數*循環次數

2、Percent Executions:設置請求按照指定比例執行,這里有幾種情況

(1)所有吞吐量控制器的比例加起來剛好等於100,則對應執行次數按照線程組*循環次數*Percent Executions次

(2)所有吞吐量控制器的比例加起來不等於100,則還是對應執行次數按照線程組*循環次數*Percent Executions次

(3)如果執行次數按照線程組*循環次數*Percent Executions為整數,則執行次數的請求,如果不為整數,則會向下取整

實例1:按照百分比執行對應請求,線程數設置為3,循環數設置為10,添加3個吞吐量控制器,分別設置的比例為15%,15%,70%

如圖:

請求1的執行次數為:3*10*15%=4.5,此處不為整數,要向下取整4次

請求2的執行次數為:3*10*15%=4.5,此處不為整數,要向下取整4次

請求3的執行次數為:3*10*70%=21,此處為整數21,執行21次

執行結果如圖:

 

實例2:按照執行指定次數設置,線程數設置為3,循環數設置為10,添加3個吞吐量控制器,分別設置的請求次數為10,30,40

請求1的吞吐量控制器次數:10<線程數(3)*循環數(10)=30次,所以會執行10次

請求2的吞吐量控制器次數:30=線程數(3)*循環數(10)=30次,所以會執行30次

請求3的吞吐量控制器次數:40>線程數(3)*循環數(10)=30次,所以只會執行30次

執行結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM