Jmeter(十一) - 從入門到精通 - JMeter邏輯控制器 - 下篇(詳解教程)

巨集哥發表於2020-06-17

1.簡介

Jmeter官網對邏輯控制器的解釋是:“Logic Controllers determine the order in which Samplers are processed.”。

意思是說,邏輯控制器可以控制取樣器(samplers)的執行順序。由此可知,控制器需要和取樣器一起使用,否則控制器就沒有什麼意義了。放在控制器下面的所有的取樣器都會當做一個整體,執行時也會一起被執行。

JMeter邏輯控制器可以對元件的執行邏輯進行控制,除僅一次控制器外,其他可以巢狀別的種類的邏輯控制器。

2.邏輯控制器分類

JMeter中的Logic Controller分為兩類:
(1)控制測試計劃執行過程中節點的邏輯執行順序,如:Loop Controller、If Controller等;
(2)對測試計劃中的指令碼進行分組、方便JMeter統計執行結果以及進行指令碼的執行時控制等,如:Throughput Controller、Transaction Controller。

3.預覽邏輯控制器 

首先我們來看一下JMeter的邏輯控制器,路徑:執行緒組(使用者)->新增->邏輯控制器(Logic Controller);我們可以清楚地看到JMeter5中共有17個邏輯控制器,如下圖所示:

如果上圖您看得不是很清楚的話,巨集哥總結了一個思維導圖,關於JMeter5的邏輯控制器型別,如下圖所示: 

 通過以上的瞭解,我們對邏輯控制器有了一個大致的瞭解和認識。下面巨集哥就給小夥伴或則童鞋們分享講解一些通常在工作中會用到的邏輯控制器。 

4.常用邏輯控制器詳解

  這一小節,巨集哥就由上而下地詳細地講解一下常用的邏輯控制器。

4.1Interleave Controller

交替控制器,顧名思義是:互相交替,其節點下的取樣器交替執行。根據被控制器觸發執行次數,去依次執行控制器下的子節點<邏輯控制器、取樣器>。被觸發執行可以由執行緒組的執行緒數、迴圈次數、邏輯控制器觸發。

1、我們先來看看這個Interleave Controller長得是啥樣子,路徑:執行緒組 > 新增 > 邏輯控制器 > 交替控制器,如下圖所示: 

2、關鍵引數說明如下:

Name:名稱,可以隨意設定,甚至為空;

Comments:註釋,可隨意設定,可以為空;

Ignore sub-controller blocks:忽略子控制器,即子控制器失效,由交替控制器接管。

勾選後,會無視節點下的所有控制器<交替控制器、隨機控制器例外>,將每個取樣器作為一個單獨位元組點執行
不勾選忽略子控制器,交替執行時,節點下次一級每個取樣器、邏輯控制器都認為是一個單獨子節點來交替執行。

Interleave across threads: 勾選此項,則交替控制器下的請求將應用至所有執行緒和迴圈中迭代。如有四個請求,三個執行緒,兩輪迴圈,那麼第一輪三個執行緒分別執行請求1,請求2,請求3,第二輪迴圈的三個執行緒執行請求4,請求1,請求2。

允許跨執行緒交替執行,勾選後,當執行緒組執行緒數大於1時,當前執行緒首次執行會根據執行緒數順序進行交替,後續執行按自己所屬執行緒的上一個次的執行的位置交替,如: 交替控制器下由A B C D  E 5個介面, 設定執行緒組 執行緒數3個,迴圈4次,則最終執行結果為  執行緒1執行 A B C D 執行緒2執行 B C D E 執行緒3執行 C D E A 。

 4.1.1簡單例項

1、首先在交替控制器下新增3個取樣器 訪問部落格園首頁、訪問北京巨集哥的部落格園首頁和訪問北京巨集哥的JMeter系列文章,執行緒組下新增一個取樣器 訪問度娘,與交替控制器同層級,執行緒組設定迴圈次數為2,如下圖所示:

2、配置好以後,執行JMeter,然後檢視結果樹(迴圈兩次,每次只執行交替控制器裡一個取樣器),如下圖所示:

4.1.2複雜例項

巨集哥這裡講解的複雜使用,就是將交替控制器巢狀使用,來看看執行結果,從而更進一步的理解和學習交替控制器。

1、建立一個父交替控制器:北京巨集爸,其下兩個子交替控制器:北京巨集哥 北京巨集弟,子交替控制器下面分別新增2個取樣器:訪問度娘  訪問部落格園首頁,設定執行緒組迴圈次數10,如下圖所示:

2、配置好以後,執行JMeter,然後檢視結果樹( 從結果可以看出,先交替子控制器的樣例,再交替父控制器下的樣例。大家明白了吧),如下圖所示:

4.1.3忽略子控制器塊

  在交替控制器的設定介面,有這樣一個選項,是否忽略子控制器,所以這裡一般也是交替控制器作為父級控制器時使用的選項,這裡的子控制器一般指非交替控制器的其他控制器 (如果子控制器也是交替控制器,該項實際和交替控制器的巢狀效果一樣了)

1、下面,我們在交替器下新增一個迴圈控制器,設定迴圈次數 2,執行緒組迴圈次數設定為 3,設定交替器 勾選 忽略子控制器,如下圖所示:

迴圈控制器:

執行緒組:

交替控制器:

2、 配置好以後,執行JMeter,然後檢視結果樹( 從結果可以看出,迴圈控制器沒有執行2次,只執行了1次),如下圖所示:

3、下面,我們再把交替控制器中 忽略子控制器 去掉勾選,其他設定不變,如下圖所示:

4、配置好以後,點選“儲存”,執行JMeter,然後檢視結果樹( 從結果可以看出,迴圈控制器執行2次,然後再執行 訪問度娘-哥弟 取樣器這樣交替執行了3次),如下圖所示:

綜上所述:以控制器為1個小單元,交替執行

4.2Once Only Controller

在每個執行緒內,該控制器下的內容只會被執行一遍,無論迴圈多少次,都只執行一遍。<巢狀在迴圈控制器之內時是個例外,每個執行緒組迴圈都會被執行一遍>。

此控制器通常用於控制需要登入的請求,測試過程中,我們往往都只需要登入一次,獲取到對應的登入資訊後即可執行後續相關的請求,而不是每執行一個請求都登入一次,如將login請求放入僅一次控制器,則線上程組迴圈執行期間,不論迴圈次數設定為多少次,login請求都將僅在第一次執行時執行

 1、我們先來看看這個Once Only Controller長得是啥樣子,路徑:執行緒組 > 新增 > 邏輯控制器 > 僅一次控制器,如下圖所示:

2、關鍵引數說明如下:

Name:名稱,可以隨意設定,甚至為空;

Comments:註釋,可隨意設定,可以為空。

4.2.1例項

巨集哥這裡以部落格園釋出文章為例,說一下測試場景:正常邏輯是我們需要一次登入部落格園然後多次釋出文章;而不是釋出一次文章就需要登入一次部落格園。以此為例新增測試指令碼。

1、按照上邊的測試場景,巨集哥新增測試指令碼,如下圖所示:

 2、配置好以後,點選“儲存”,執行JMeter,然後檢視結果樹( 從結果可以看出,一次登入部落格園然後多次釋出文章;而不是釋出一次文章就需要登入一次部落格園),如下圖所示:

4.2.2紅色字型實戰舉例 

<巢狀在迴圈控制器之內時是個例外,每個執行緒組迴圈都會被執行一遍>。

1、保持上邊的測試樹結構,然後將 僅一次控制器 用滑鼠拖到 迴圈控制器 裡邊,如下圖所示:

 2、配置好以後,點選“儲存”,執行JMeter,然後檢視結果樹( 從結果可以看出,巨集哥設定了3個執行緒,每個執行緒都登入一次部落格園),如下圖所示:

4.3Random Controller

隨機控制器節點下的元件隨機執行,與交替控制器不一樣的是節點下的元件執行順序不定。

 1、我們先來看看這個Random Controller長得是啥樣子,路徑:執行緒組 > 新增 > 邏輯控制器 >  隨機控制器,如下圖所示:

2、關鍵引數說明如下:

Name:名稱,可以隨意設定,甚至為空;

Comments:註釋,可隨意設定,可以為空;

Ignore sub-controller blocks:忽略子控制器,即子控制器失效,由隨機控制器接管,類似交替控制器。

4.3.1簡單例項 

1、建立測試計劃,隨機控制下新增三個請求,控制器外一個請求,執行緒4個;如下圖所示:

2、配置好以後,點選“儲存”,執行JMeter,然後檢視結果樹( 從結果可以看出,巨集哥設定了4個執行緒,每個執行緒都要訪問一次北京巨集哥的Jmeter系列文章,但是控制器下邊的取樣器的訪問卻是隨機訪問一個),如下圖所示:

4.3.2隨機巢狀迴圈-不忽略子控制器

1、按照小標題的內容,建立測試計劃,如下圖所示:

2、配置好以後,點選“儲存”,執行JMeter,然後檢視結果樹( 從結果可以看出,巨集哥設定了3個執行緒,隨機選擇隨機控制器下的兩個迴圈控制器),如下圖所示:

4.3.3隨機巢狀迴圈-忽略子控制器

1、按照小標題的內容,建立測試計劃,如下圖所示:

2、配置好以後,點選“儲存”,執行JMeter,然後檢視結果樹( 從結果可以看出,巨集哥設定了3個執行緒,迴圈控制器也失效了,每次都隨機選擇一個取樣器執行),如下圖所示:

4.3.4隨機巢狀交替-忽略子控制器

1、按照小標題的內容,建立測試計劃,如下圖所示:

2、配置好以後,點選“儲存”,執行JMeter,然後檢視結果樹( 從結果可以看出,巨集哥設定了10次迴圈,交替控制器也失效了,每次都隨機選擇一個取樣器執行),如下圖所示:

4.4Random Order Controller

隨機順序控制器其節點下的原件隨機執行,不過每個元件只執行一次。

當控制器被觸發時,將控制器下的所有子節點順序打亂執行一遍,執行一遍;執行一遍,不是執行一個。

注意:是將子節點的順序打亂,而非請求的順序打亂,子節點可以是其他邏輯控制器。

隨機控制器與隨機順序控制器名字十分接近,但兩者還是有著明顯的區別,可參考  上邊介紹的隨機控制器。

隨機控制器為每次只執行節點下的一個子節點,隨機順序控制器是將節點下的所有子節點都正常執行,只是將執行順序打亂

1、我們先來看看這個Random Order Controller長得是啥樣子,路徑:執行緒組 > 新增 > 邏輯控制器 > 隨機順序控制器,如下圖所示: 

2、關鍵引數說明如下:

Name:名稱,可以隨意設定,甚至為空;

Comments:註釋,可隨意設定,可以為空。

4.4.1例項

1、建立測試計劃,如下圖所示: 

2、配置好以後,點選“儲存”,執行JMeter,然後檢視結果樹( 從結果可以看出,巨集哥設定了3次迴圈,每次迴圈把所有的子節點都執行了),如下圖所示: 

4.5Recording Controller

其錄製控制器,顧名思義是錄製的時候會用到。實際上它是一個位置,當我們用JMeter代理進行錄製時,錄製的指令碼預設放在此控制器的節點下面。沒有實際的邏輯作用,我們用簡單控制器也可以代替它。由於這個沒有用到過,這裡巨集哥就不做詳細介紹了,如果後期用到的話,巨集哥會單獨寫一篇關於錄製控制器的文章給小夥伴或童鞋們來答疑解惑。

1、我們先來看看這個Recording Controller長得是啥樣子,路徑:執行緒組 > 新增 > 邏輯控制器 > 錄製控制器,如下圖所示: 

2、關鍵引數說明如下:

Name:名稱,可以隨意設定,甚至為空;

Comments:註釋,可隨意設定,可以為空;

Forever:勾選上這一項表示一直迴圈下去。

5.小結

 

 好了,今天關於邏輯控制器的上篇就講解到這裡,這一篇主要介紹了 Interleave ControllerOnce Only ControllerRandom Controller  Random Order ControllerRecording Controller

 

您的肯定就是我進步的動力。如果你感覺還不錯,就請鼓勵一下吧!記得隨手點波  推薦  不要忘記哦!!!

別忘了點 推薦 留下您來過的痕跡

 

相關文章