1. 程式人生 > >Jmeter(十) - 從入門到精通 - JMeter邏輯控制器 - 中篇(詳解教程)

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

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.1Critical Section Controller

我們先來看一下,官方原汁原味的解釋:The Critical Section Controller ensures that its children elements (samplers/controllers, etc.) will be executed by only one thread as a named lock will be taken before executing children of controller.

巨集哥這個二把刀的翻譯,給你們翻譯一下這段鳥語看看到底是什麼意思,大致意思是: Critical Section Controller(臨界區控制器),確保它的子元素(samplers /控制器等)在執行控制器的子程式之前只執行一個執行緒作為指定的鎖。呵呵!看到這句話是不是覺得一頭霧水啊,摸一摸自己所剩無幾的頭髮陷入沉思中.....沒有關係的,不要糾結了,巨集哥後邊會用具體例項講解一下,看完例項後,再回過頭來閱讀這句話,你就會恍然大悟了。

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

2、關鍵引數說明如下:

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

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

Lock name:鎖名稱,這裡可以填入其子節點下執行的執行緒的名稱,這個執行緒作為一個全域性鎖存在

4.1.1例項講解 

這部分主要是通過配合例項我們來理解一下開始那句話到底什麼意思。

1、巨集哥這裡先說一個訪問巨集哥部落格園的JMeter系列文章的測試場景:我們第一步首先要訪問部落格園的首頁,第二步找到巨集哥的訪問巨集哥部落格園的首頁,第三步點選JMeter類別。按順序完成三步,才能完成這個測試場景。那麼我們根據這個場景用JMeter來新增多個請求的取樣器。如下圖所示:

2、指令碼除錯是通了,執行JMeter,檢視結果樹,如下圖所示:

3、從上個圖,檢視結果樹中顯示請求結果資料不是按照順序請求,不符合預期,這個時候增加一個critical section controller(臨界部分控制器),增加一個鎖,就能控制執行順序。如下圖所示:

4、指令碼除錯是通了,執行JMeter,檢視結果樹,可以清楚地看出來是按預期的順序執行請求的。但是這樣響應時間會過長,這個後邊再做講解。如下圖所示: 

 4.1.2鎖名分類

(1)鎖名為空,認為每個鎖為不同的鎖

1、巨集哥通過具體例項,來看一下,建立鎖名為空的臨界部分控制器,如下圖所示:

2、執行JMeter,檢視結果樹,如下圖所示:

(2)鎖名相同,多個鎖認為是同一個鎖,同一個時間點只能存在一個執行中

1、巨集哥通過具體例項,來看一下,建立鎖名相同的臨界部分控制器,如下圖所示:

2、執行JMeter,檢視結果樹,如下圖所示:

(3)鎖名為變數,根據變數值來判斷是不是屬於同一個鎖,變數值為相同時,則認為是同一個鎖

1、巨集哥通過具體例項,來看一下,建立鎖名為變數的臨界部分控制器,如下圖所示:

2、執行JMeter,檢視結果樹,如下圖所示:

4.2ForEach Controller

ForEach 控制器:一般搭配使用者變數使用。依次呼叫使用者定義的變數,直到最後一個,結束迴圈。為了滿足ForEach Controller提取資料,變數命名的格式一般為“變數名_數字”,其中數字從1開始。
1、即遍歷迴圈控制器,顧名思義是定義一個迴圈規則。
2、用來遍歷當前元素的所有可執行場景。
3、在使用者自定義變數中讀取一系列相關的變數,該控制器下的取樣器或控制器都會被執行一次或多次,每次讀取不同的變數值。
4、這個控制器一般配合配置元件 → 正則表示式提取器來一起使用,可對頁面上的某些元素進行重複處理。

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

2、關鍵引數說明如下:

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

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

Input variable prefix:輸入變數字首,可以在“使用者自定義變數”中定義一組變數,迴圈控制器可以從中獲取到變數對應的值,然後作為迴圈控制器的迴圈條件,還可以輸出變數作為取樣器的引數。

Start index for loop:迴圈變數下標起點。迴圈指數開始(唯一)→ 遍歷查詢的變數範圍,開始的值(這裡如果不填寫,預設從 1 開始,如果沒有 1 開始的變數,執行時會報錯)

End index for loop:迴圈變數下標終點。迴圈指數結束(包含)→ 遍歷查詢的變數範圍,結束的值

Output variable name:輸出變數名稱,迴圈控制器生成的變數名稱。後續可通過${}引用

Add "_" before number ?: 變數字首後是否加“_”作為分隔符。如果定義的變數名中有下劃線的話就要勾選此項,否則找不到;反之,沒有的話不要勾選,否則同樣找不到變數

4.2.1例項講解

1、首先在自定義5個字首為 北京巨集哥 的變數,值分別為 a b c d e。並且 北京巨集哥 後面的數字是連續的,如果不連續,則不會被迴圈到,如下圖所示:

2、配置ForEach控制器,如下圖所示:

3、新增請求 訪問部落格園首頁 + 輸出值:${巨集哥},輸出值是在控制器的輸出變數 巨集哥,通過 ${巨集哥} 取到輸出變數的值,如下圖所示:

4、新增檢視結果樹,執行JMeter,檢視結果樹,如下圖所示: 

注意:敲黑板,敲腦袋!!!

1、輸入變數的字尾數值一定要連續,比如 北京巨集哥_1, 北京巨集哥_2, 北京巨集哥_3 ... 這樣,如果中間有不連續的,迴圈會中斷

2、迴圈開始的設定:如果變數為北京巨集哥_1, 北京巨集哥_2, 北京巨集哥_3,而設定的開始為 1,則會從北京巨集哥_2 開始迴圈

3、迴圈結束的設定:如果變數有3個 北京巨集哥_1, 北京巨集哥_2, 北京巨集哥_3,而設定的結束為5,則只會迴圈 北京巨集哥_1, 北京巨集哥_2, 北京巨集哥_3 ,如果設定的結束為2,則會迴圈  北京巨集哥_1, 北京巨集哥_2 。

4.3Include Controller

Include控制器用來匯入外部的測試片段(非完整的測試計劃),在執行時會執行匯入的測試計劃,但是被匯入的測試計劃有特殊要求,它不能有執行緒組,只能包含簡單的控制器及控制器下的元件。換句話說就是相當於加了一個執行單元,一個封裝了的業務操作單元,類似我們程式開發中的函式(方法)一樣。例如一個查詢學生資訊的業務操作我們用取樣器來模擬,然後放到簡單控制器中作為一個執行單元,別的地方也要用到時,我們可以不用重複造輪子直接引用過來。

一般來說,Include控制器和測試片段(Test Fragment)配合使用的比較常見。

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

2、關鍵引數說明如下:

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

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

Filename:檔名,必輸欄位,如果沒有,就會報錯。通過Filename的路徑和檔名引用外部的jmx檔案。

巨集哥推薦小夥伴或者童鞋們可以將 Include控制器 與 Module控制器(傳送門)一起對比著學習,Include控制器 是從外部檔案引用,只能引用整個測試片段的內容,Module控制器 是從內部檔案中引用,引用上相對比較靈活,可以只引用部分測試片段或模組內容。這樣一內一外不僅容易理解也容易記憶和學習。

4.3.1例項

(1)當Filename路徑的值為空,程式執行報錯,指令碼執行中止,不會繼續執行下面的指令碼內容。

1、首先建立一個Filename路徑為空的測試計劃,如下圖所示:

2、執行JMeter,檢視結果樹(程式執行報錯,指令碼執行中止,不會繼續執行下面 訪問部落格園首頁 的取樣器),如下圖所示: 

(2)當Filename路徑中的檔案不存在,程式直接彈窗報錯並停止執行。

1、首先建立一個Filename路徑中的檔案不存在的測試計劃,點選“儲存”按鈕的時候,就會直接彈窗報錯。如下圖所示:

(3)當Filename路徑的檔案中不包含測試片段,跳過控制器,繼續向下執行。

1、首先建立一個外部引用沒有測試片段的測試計劃,如下圖所示:

2、建立一個Filename路徑的檔案中不包含測試片段的測試計劃,將上邊的外部引用-無測試片段檔案新增到Include控制器中,如下圖所示:

3、執行JMeter,檢視結果樹(跳過控制器,繼續向下執行 訪問部落格園首頁 的取樣器),如下圖所示: 

(3)當Filename路徑的檔案中包含測試片段,執行完控制器,再繼續向下執行。

1、首先建立一個外部引用有測試片段的測試計劃,如下圖所示:

2、建立一個Filename路徑的檔案中包含測試片段的測試計劃,將上邊的外部引用-有測試片段檔案新增到Include控制器中,如下圖所示:

3、執行JMeter,檢視結果樹(執行完控制器裡的測試片段,再繼續向下執行 訪問部落格園首頁 的取樣器),如下圖所示: 

到這裡,大家應該理解了  Include Controller 和  Test Fragment 了吧。巨集哥的理解就是,Test Fragment 相當於一個獨立的部分,可以被其他測試計劃引用,實現 樣例的片段化,模組化,遇到重複需要的,比如登入、註冊之類的,就可以用Test Fragment 和 Include Controller 了。這樣可以避免重複造輪子,做許多無用功。

5.小結

   好了,今天關於邏輯控制器的上篇就講解到這裡,這一篇主要介紹了 Critical Section Controller、ForEach Controller和Include控制器。

 

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

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

 

相關推薦

Jmeter() - 入門精通 - JMeter邏輯控制器 - 中篇教程

1.簡介 Jmeter官網對邏輯控制器的解釋是:“Logic Controllers determine the order in which Samplers are processed.”。 意思是說,邏輯控制器可以控制取樣器(samplers)的執行順序。由此可知,控制器需要和取

Jmeter(一) - 入門精通 - JMeter邏輯控制器 - 下篇教程

1.簡介 Jmeter官網對邏輯控制器的解釋是:“Logic Controllers determine the order in which Samplers are processed.”。 意思是說,邏輯控制器可以控制取樣器(samplers)的執行順序。由此可知,控制器需要和取

Jmeter(二四) - 入門精通 - JMeter函式 - 中篇教程

1.簡介   在效能測試中為了真實模擬使用者請求,往往我們需要讓提交的表單內容每次都發生變化,這個過程叫做引數化。JMeter配置元件與前置處理器都能幫助我們進行引數化,但是都有侷限性,為了幫助我們能夠更好地進行引數化,JMeter提供了一組函式來幫助我們引數化生成需要的資料,這些函式可以函式助手面板來進行編

Jmeter(三五) - 入門精通進階篇 - 關聯教程

1.簡介   上一篇中介紹瞭如果想要同時傳送多條請求,那麼怎樣才能讓每條資料某些請求引數改變呢。這就用到了jMeter引數化。在實際測試場景中,我們往往還有這樣的需求,登入後伺服器響應的token作為下次請求的引數,這就是所謂的引數關聯。   當請求之間有依賴關係,比如一個請求的入參是另一個請求返回的資料

Jmeter(二) - 入門精通 - JMeter邏輯控制器 - 終篇教程

1.簡介 Jmeter官網對邏輯控制器的解釋是:“Logic Controllers determine the order in which Samplers are processed.”。 意思是說,邏輯控制器可以控制取樣器(samplers)的執行順序。由此可知,控制器需要和取

Jmeter(九) - 入門精通 - JMeter邏輯控制器 - 上篇教程

1.簡介 Jmeter官網對邏輯控制器的解釋是:“Logic Controllers determine the order in which Samplers are processed.”。 意思是說,邏輯控制器可以控制取樣器(samplers)的執行順序。由此可知,控制器需要和取

Jmeter(四) - 入門精通 - JMeter定時器 - 下篇教程

1.簡介   使用者實際操作時,並非是連續點選,而是存在很多停頓的情況,例如:使用者需要時間閱讀文字內容、填表、或者查詢正確的連結等。為了模擬使用者實際情況,在效能測試中我們需要考慮思考時間。若不認真考慮思考時間很可能會導致測試結果的失真。例如,估計的可支撐使用者數偏小。在效能測試中,訪問請求之間的停頓時間被

Jmeter(五) - 入門精通 - JMeter匯入自定義的Jar包教程

1.簡介   原計劃這一篇是介紹前置處理器的基礎知識的,結果由於許多小夥伴或者童鞋們在微信和部落格園的短訊息中留言問如何引入自己定義的Jar包呢???我一一回復告訴他們和引入外掛的Jar包一樣的道理,一通百通。但是感覺他們還是很迷糊很迷惘,因此在這裡穿插一篇匯入自定義的Jar包。還有另外一個原因就是前置處理器

Jmeter(六) - 入門精通 - JMeter前置處理器教程

1.簡介   前置處理器是在發出“取樣器請求”之前執行一些操作。如果將前置處理器附加到取樣器元件,則它將在該取樣器元件執行之前執行。前置處理器最常用於在取樣器請求執行前修改其設定,或更新未從響應文字中提取的變數。前置處理器主要是用來處理請求前的一些準備工作,比如引數設定、環境變數設定等

Jmeter(七) - 入門精通 - JMeter後置處理器 -上篇教程

1.簡介   後置處理器是在發出“取樣器請求”之後執行一些操作。取樣器用來模擬使用者請求,有時候伺服器的響應資料在後續請求中需要用到,我們的勢必要對這些響應資料進行處理,後置處理器就是來完成這項工作的。例如系統登入成功以後我們需要獲取SessionId,在後面的業務操作中伺服器會驗證這

Jmeter(八) - 入門精通 - JMeter後置處理器 -下篇教程

1.簡介   後置處理器是在發出“取樣器請求”之後執行一些操作。取樣器用來模擬使用者請求,有時候伺服器的響應資料在後續請求中需要用到,我們的勢必要對這些響應資料進行處理,後置處理器就是來完成這項工作的。例如系統登入成功以後我們需要獲取SessionId,在後面的業務操作中伺服器會驗證這

Jmeter(九) - 入門精通 - JMeter監聽器 -上篇教程

1.簡介   監聽器用來監聽及顯示JMeter取樣器測試結果,能夠以樹、表及圖形形式顯示測試結果,也可以以檔案方式儲存測試結果,JMeter測試結果檔案格式多樣,比如XML格式、CSV格式。預設情況下,測試結果將被儲存為xml格式的檔案,檔案的字尾: ".jtl"。另外一種儲存格式為CSV檔案,該格式的好處就

Jmeter(二) - 入門精通 - JMeter監聽器 -下篇教程

1.簡介   監聽器用來監聽及顯示JMeter取樣器測試結果,能夠以樹、表及圖形形式顯示測試結果,也可以以檔案方式儲存測試結果,JMeter測試結果檔案格式多樣,比如XML格式、CSV格式。預設情況下,測試結果將被儲存為xml格式的檔案,檔案的字尾: ".jtl"。另外一種儲存格式為CSV檔案,該格式的好處就

Jmeter(二一) - 入門精通 - JMeter斷言 - 上篇教程

1.簡介   最近由於巨集哥在搭建自己的個人部落格可能更新的有點慢。斷言元件用來對伺服器的響應資料做驗證,常用的斷言是響應斷言,其支援正則表示式。雖然我們的通過響應斷言能夠完成絕大多數的結果驗證工作,但是JMeter還是為我們提供了適合多個場景的斷言元件,輔助我們來更好的完成結果驗證工作。在使用JMeter進

Jmeter(二二) - 入門精通 - JMeter斷言 - 下篇教程

1.簡介   斷言元件用來對伺服器的響應資料做驗證,常用的斷言是響應斷言,其支援正則表示式。雖然我們的通過響應斷言能夠完成絕大多數的結果驗證工作,但是JMeter還是為我們提供了適合多個場景的斷言元件,輔助我們來更好的完成結果驗證工作。在使用JMeter進行效能測試或者介面自動化測試工作中,經常會用到的一個功

Jmeter(二八) - 入門精通 - Jmeter Http協議錄製指令碼工具-Badboy1教程

1.簡介    在使用jmeter自動錄製指令碼時會產生很多無用的請求,所以推薦使用badboy錄製指令碼之後儲存為jmx檔案,在jmeter中開啟使用。因此巨集哥在這裡介紹一下Badboy這款工具,本來打算不做介紹了,原因是因為這款工具已經不在維護和更新了,但是考慮到有些童鞋們不能手擼測試指令碼,

Jmeter(二九) - 入門精通 - Jmeter Http協議錄製指令碼工具-Badboy2教程

1.簡介   上一篇文中已經對Badboy做了一個基本上詳細完整的介紹,這一篇巨集哥帶你們實戰一下,這一篇主要講解和分享:錄製和執行指令碼、引數化 首先讓我們使用N模式錄製一個指令碼,測試用例編號為:1.1.1 成功的釋出僅有文字主題。  2錄製指令碼 1. 建立名為1 Log in的Suite,

Jmeter(三) - 入門精通 - Jmeter Http協議錄製指令碼工具-Badboy3教程

1.簡介   Badboy為方便自動化資料靈活性,以及指令碼的重用,減少工作量;為此提供了指令碼引數化的功能,這一篇文章巨集哥以度娘搜尋的關鍵字“北京-巨集哥”進行引數化為例,巨集哥帶領你們實戰一下如何使用Badboy的引數化功能。 2.指令碼錄製   經過上一篇文章的學習想必大家對B

Jmeter(三四) - 入門精通進階篇 - 引數化教程

1.簡介   前邊三十多篇文章主要介紹的是Jmeter的一些操作和基礎知識,算是一些初級入門的知識點,從這一篇開始我們就來學習Jmeter比較高階的操作和深入的知識點了。今天這一篇主要是講引數化,其實前邊或多或少的介紹過類似的知識點,知識沒有系統的講解,由於這個在實際工作中用到比較多而且經常用到,所以巨集哥今

Jmeter(三) - 入門精通 - 測試計劃Test Plan的元件教程

1.簡介 上一篇中巨集哥已經教你如何通過JMeter來建立一個測試計劃(Test Plan),那麼這一篇我們就將JMeter啟動起來,建立一個測試計劃(Test plan),然後巨集哥給大家介紹一下測試計劃(Test Plan)有哪些元件組成的。 2.測試計劃(Test Plan)要素 本節主要描述