1. 程式人生 > >Jmeter(三)---邏輯控制器

Jmeter(三)---邏輯控制器

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:退出時(或不輸入)迴圈條件等於字串“ 假 ”
  • 條件可以是任何變數或函式,最終等於字串” 假 ”。需要注意的是:條件是評估兩次,一次取樣前,一次隨機取樣