1、 Jmeter官網對邏輯控制器的解釋是:“Logic Controllers determine the order in which Samplers are processed.”。
意思是說,邏輯控制器可以控制采樣器(samplers)的執行順序。由此可知,控制器需要和采樣器一起使用,否則控制器就沒有什麼意義了。放在控制器下面的所有的采樣器都會當做一個整體,執行時也會一起被執行。
2、JMeter中的Logic Controller分為兩類:
- 控制測試計劃執行過程中節點的邏輯執行順序,如:Loop Controller、If Controller等;
- 對測試計劃中的腳本進行分組、友善JMeter統計執行結果以及進行腳本的運作時控制等,如:Throughput Controller、Transaction Controller。
3、Jmeter提供如下這麼多的控制器:
jmeter控制器之一
一、簡單控制器(Simple Controller):
作用:這是Jmeter裡最簡單的一個控制器,它可以讓我們組織我們的采樣器和其它的邏輯控制器(分組功能),提供一個塊的結構和控制,并不具有任何的邏輯控制或運作時的功能。
二、循環控制器(Loop Controller):
作用:指定其子節點運作的次數,可以使用具體的數值(如下圖,設定為5次),也可以使用變量
1、Forever選項:勾選上這一項表示一直循環下去
2、如果同時設定了線程組的循環次數和循環控制器的循環次數,那循環控制器的子節點運作的次數為兩個數值相乘的結果。
三、僅一次控制器(Once Only Controller):
作用:在測試計劃執行期間,該控制器下的子結點對每個線程隻執行一次,登入場景經常會使用到這個控制器。
注意:将Once Only Controller作為Loop Controller的子節點,Once Only Controller在每次循環的第一次疊代時均會被執行。
四、ForEach控制器(ForEach Controller):
作用:ForEach控制器一般和使用者自定義變量一起使用,其在使用者自定義變量中讀取一系列相關的變量。該控制器下的采樣器或控制器都會被執行一次或多次,每次讀取不同的變量值。如下圖:
參數:
· Input Variable Prefix:輸入變量字首
· Output variable name:輸出變量名稱
· Start index for loop(exclusive):循環開始的索引(這裡如果不填寫,預設從1開始,如果沒有1開始的變量,執行時會報錯)
· End index for loop(inclusive):循環結束的索引
· Add”_”before number:輸入變量名稱中是否使用“_”進行間隔。
使用者自定義變量:
變量名字首為ForEach Controller中Input variable prefix定義的name + 下劃線(上圖中我們勾選了下劃線)+數字編号
執行結果:
總共執行了3次,每次執行時會把擷取到的變量值指派給輸出變量outNmae,其它地方可以通過${outNmae}進行調用。
五、事務控制器(Transaction Controller):
作用:事務控制器會生産一個額外的采樣器,用來統計該控制器子結點的所有時間。
· 應用場景: 完成一個完整的頁面請求或一組請求
參數:
- Generate parent sample:勾選後,所有的結果将在父結點中展示(選中這個參數結果展示如下圖紅框,否則顯示為下圖藍框)
- Include duration of timer and pre-post processors in generated sample:選中這一項會統計定時器(timer)的時間,否則隻統計采樣器(sample)的時間
jmeter控制器之二
六、If 控制器(If Controller):
作用:根據給定表達式的值決定是否執行該節點下的子節點,預設使用javascript的文法進行判斷(如下圖紅框内的文字)。
參數:
Interpret Condition as Variable Expression?:選中這一項時表示:判斷變量值是否等于字元串true(不區分大小寫) Evaluate for all children:如果選中這一項,在每個子結點執行前都會計算表達式
示例一:使用變量表達式的方式進行判斷:
示例二:選中Interpret Condition as Variable Expression?,使用變量的方式判斷
我這裡做個示範,首先取出上一個接口裡面的響應id
判斷if控制器裡面的語句是否為真,如果為真繼續執行
這裡我把id值寫死了,跑一次觀察結果,發現執行了服務人員的接口
七、Switch控制器(Switch Controller):
作用:Switch控制器通過給該控制器中的Value指派,來指定運作哪個采樣器。有兩種指派方式:
· 第一種是數值,Switch控制器下的子節點從0開始計數,通過指定子節點所在的數值來确定執行哪個元素。
· 第二種是直接指定子元素的名稱,比如采樣器的Name來進行比對。當指定的名稱不存在時,不執行任何元素。
當Value為空時,預設執行第1個子節點元素。
示例:
1、Switch Controller選擇的值為 客服登入
2、執行結果:
八、吞吐量控制器(Throughput Controller):
作用:控制其下的子節點的執行次數與負載比例配置設定,别被名字迷惑了,跟吞吐量沒任何關系。也有兩種方式:
- Total Executions:設定運作次數,整個測試計劃中總計執行次數
- Percent Executions:設定運作比例(1~100之間),整個測試計劃中總計執行百分比
- Throughtput: 設計的數值
- Per User: 依據網上的說明在選擇Total Executions時,勾選時會在每個線程中執行的次數。但在3.0版本中嘗試使用無效
示例:
1、設定線程組循環5次:
2、Throughput Controller1的子結點執行3次:、
結果發現一共運作了3次
3、Throughput Controller2的子結點執行(40% * 線程組循環次數5)= 2次:注意percent選項下,填寫的是百分比!
觀察運作結果,發現運作了2次
九、随機控制器(Random Controller):
作用:随機執行其下的某個子結點,随機選擇控制器中的請求進行執行
應用場景: 頁面的随機通路
配置說明:ignore sub-controller blocks: 忽略子控制器
執行結果,随機選擇了三個登入中的一個
十、随機順序控制器(Random Order Controller):
作用:随機執行其下的所有子結點
· 與Random Controller不同的是,這個控制器會先将需要随機的内容均執行一遍,但次序不定
· 應用場景: 頁面的随機通路,但均需要通路,且次序不限
多運作一次,觀察結果,發現兩次運作的順序不同,但是每個接口都運作了一遍
jmeter控制器之三
十一、Critical Section Controller 關鍵部分控制器
作用:用于核心部分的控制,確定其子節點下的取樣器或控制器在一個線程中僅會執行一次
應用場景: 使用者登入
配制說明
· Lock name: 鎖名稱,這裡可以填入其子節點下執行的線程的名稱,這個線程作為一個全局鎖存在
十二、Include Controller 引用外部測試計劃控制器
- 應用場景: 測試過程中,需要引用外部的測試計劃
- 配制說明
· Include Test Plan-Filename: 選擇需要引入的外部測試計劃檔案
十三、Interleave Controller 間隔控制器
也稱交替控制器,使得該控制器包含的取樣器步驟交錯執行在每個循環中,每個線程使用者僅執行一次控制器内的請求,線程使用者依據循環的次數請求控制器中的請求數
配制說明:ignore sub-controller blocks: 是否忽略子控制器
十四、Module Controller 子產品控制器
· 子產品控制器,用于跳轉到標明的控制器位置并執行對應的控制器
· 應用場景: 業務邏輯的跳轉
· 配制說明
· Module to Run: 選擇需要跳轉到的目标控制器
尋找目标元素(Find target element):
- 尋找測試計劃中需要特定測試的元素,子產品;也可了解為該控制器可以控制已經封裝好的子產品元素
- 一個測試計劃由一個控制器和所有的測試元素(取樣器等)組成,測試計劃可以位于任何線程組或工作台;如果計劃位于線程組,則可以禁用其他控制器,防止正在運作的測試計劃被影響(除了子產品控制器)
- 子產品控制器的優勢在于:當存在多個線程組時,該控制器可以輕松切換,隻需要選擇對應的取樣器,友善快捷,替代了建立很多測試計劃的繁瑣操作
- 任何一個子產品所用的控制器名字必須唯一,因為其名字被用來找到目标控制器時重新加載;出于這個原因,最好保證控制器名字不同,否則執行測試時候可能發生意外
- 子產品控制器與遠端測試不應使用或非gui測試與工作台部件,因為工作台測試元素并沒有測試計劃的一部分 jmx 檔案。 任何這樣的測試就會失敗
十五、Runtime Controller 運作時間控制器
· 運作時間控制器,設定控制器中的請求運作時間,機關:秒
· 應用場景: 對業務請求時間進行限制
· 配制說明
· Runtime(seconds): 配制需要設定的運作時間,機關秒
十六、While Controller 循環控制器
· 循環控制器,與開發語言中的While功能一緻。直到條件為false時,停止運作
· 應用場景: 循環執行一個請求,僅判斷一種狀态下退出循環
· 配制說明
· Condition(function or variable): 可配制為空/LAST/變量或方法
可能的條件值有:
- 空:最後一個示例循環失敗時退出循環
- LAST:最後一個示例循環失敗時退出循環。 如果之前的最後一個示例隻是循環失敗,不進入循環。
- false:退出時(或不輸入)循環條件等于字元串“ 假 ”
- 條件可以是任何變量或函數,最終等于字元串” 假 ”。需要注意的是:條件是評估兩次,一次取樣前,一次随機取樣