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.1if Controller

在實際工作中,當使用Jmeter進行介面測試或者效能測試時,有時需要根據不同條件做不同的操作,為了解決這個問題,Jmeter提供了IF控制器。顧名思義,IF控制器實現了程式碼中IF的功能,通過判斷表示式的True/False來判定是否執行相應的操作。通過條件判斷下邊的節點執行不執行。

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

2、關鍵引數說明如下:

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

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

Expression (must evaluate to true or false) :表示式(值必須是true或false),也就是說,在右邊文字框中輸入的條件值必須是true 或 false,(預設情況下)

Interpret Condition as Variable Expression?:預設勾選項,將條件解釋為變量表達式(需要使用__jexl3 or __groovy 表示式)

Evaluate for all children?:條件作用於每個子項(具體理解巨集哥會在後邊實戰篇列舉例子說明),判斷條件是否針對所有子節點,預設不勾選,只在if Controller的入口處判斷一次。

注意:敲黑板!!!敲腦殼啦!!!

1、文字框上的黃色感嘆號,就是提示你,建議採用__jexl3 or __groovy 表示式,以提高效能,也就是預設的方式。

2、if 控制器 只能作用於其下的子項

4.1.1預設用法

1、預設用法,就是採用__jexl3 or __groovy 表示式if 控制器下有一個 訪問北京巨集哥的部落格園首頁的取樣器,只有if條件滿足時,才會執行該取樣器。採用預設方式,將條件'北京巨集哥'=='北京巨集哥',放入 __jexl3表示式中。如下圖所示:

 2、如果不知道表示式如何使用,可使用Jmeter 的函式助手,函式助手圖示 > 選擇_jexl3 > 在值的輸入框輸入'北京巨集哥'=='北京巨集哥'  > 點選‘生成’ > 全選Ctrl+C複製 > Ctrl+V貼上到表示式處 如下圖所示:

3、配置好以後,執行JMeter,選擇HTML,然後檢視結果樹,如下圖所示:

4.1.2直接輸入條件

1、直接輸入只需要去掉 “Interpret Condition as Variable Expression?” 前面複選框,直接輸入條件: '北京巨集哥'=='北京巨集哥' 。訪問北京巨集哥的部落格園的首頁的取樣器將被執行。如下圖所示:

2、配置好以後,執行JMeter,選擇HTML,然後檢視結果樹,如下圖所示:

4.13條件中使用變數

我們在日常工作中在很多的測試場景下,需要根據使用者變數或者上一個取樣器的返回值來進行條件判斷,從而決定是否需要執行某一個的取樣器。

1、首先我們新增一個使用者變數:北京巨集哥。條件:北京巨集哥 的值為 巨集哥 的時候,才執行訪問北京巨集哥部落格園的首頁的取樣器。如下圖所示:

使用者變數及配置,如下圖所示:

2、IF Controller及配置,或者可以用表示式:${__jexl3('${北京巨集哥}'=='巨集哥' ,)}。如下圖所示: 

4.1.4Evaluate for all children? 的用法

1、巨集哥在上面的小節中講解和分享了在條件中如何使用變數,我們假設一種測試場景:如果 if 控制器下的取樣器執行後,改變了該變數的值,if 控制器下 其後的取樣器還會被繼續執行嗎?跟隨巨集哥一起來看看下面的列子:

2、改變“北京巨集哥”變數的值為“北京巨集哥”,如下圖所示:

3、JMeter執行過程的邏輯分析:

(1) if 控制器下 有 3 個取樣器,變數 北京巨集哥 的初始值為 巨集哥,if 控制器的條件為:${__jexl3("${北京巨集哥}"=="巨集哥",)}。

(2)開始執行的時候滿足條件,那麼按理說應該執行 訪問部落格園首頁 、訪問北京巨集哥的部落格園首頁、訪問巨集哥的JMeter系列文章 3個取樣器,

(3)但是 訪問北京巨集哥的部落格園首頁 執行後,將 北京巨集哥 的值變了 北京巨集哥,已經不能滿足 "${北京巨集哥}"=="巨集哥" 條件。

(4)所以 訪問巨集哥的JMeter系列文章 這個取樣器不會被執行。

4、執行JMeter,檢視結果樹,對比執行結果和巨集哥分析的一致,如下圖所示:

5、如果這個時候,去掉  Evaluate for all children? 的勾選,會發生什麼呢,大家可以自己動手試試。修改後記得點選“儲存”。下邊是巨集哥的執行結果,如下下圖所示:

另外,如果時字串必須要用引號,變數都認為是字串的形式,如:${__jexl3("${北京巨集哥}"=="巨集哥",)}。

4.2Transaction Controller

  事務響應時間是我們衡量業務效能的主要指標,事務控制器可以把其他節點下的取樣器執行消耗時間累加在一起,便於統計。同時對每一個取樣器的執行時間進行統計。
  如果事務控制器下的取樣器有多個,只有當所有的取樣器都執行成功,整個事務控制器定義的事物才算成功。
  用於將Test Plan中的特定部分組織成一個Transaction,JMeter中Transaction的作用在於,可以針對Transaction統計其響應時間、吞吐量等。比如說,一個使用者操作可能需要多個Sampler來模擬,此時使用Transaction Controller,可以更準確地得到該使用者操作的效能指標,如響應時間等。這個時間包含該控制器範圍內的所有處理時間,而不僅僅是取樣器的。

這個就非常有用了。我們前面有提到過事務的概念,有時候我們不關心單個請求的響應時間,而是關心一組相關請求的整體響應時間,怎麼來統計呢?就需要藉助事務這個概念,把這組請求,放到一個事務控制器下面。

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

2、關鍵引數說明如下:

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

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

generate parent sample:選擇是否生成一個父取樣器;

include duration of timer and pre-post processors in generated samle:是否包含定時器,選擇將在取樣器前與後加上延時。(巨集哥建議大家不要勾選,否則統計就比較麻煩了,還需要你扣除延時)

4.2.1generate parent sample用法

1、巨集哥列舉一個測試場景:我們需要了解 訪問部落格園首頁  訪問北京巨集哥的部落格園首頁這兩個請求的單個請求的響應時間,那麼就來看看如下例項。

(1)單個請求,那麼不勾選generate parent sample,如下圖所示:

2、執行JMeter,檢視聚合報告的單個請求的響應時間,如下圖所示:

1、巨集哥列舉一個測試場景:我們需要了解 訪問部落格園首頁  訪問北京巨集哥的部落格園首頁這兩個請求作為一組請求的響應時間,那麼就來看看如下例項。

(1)一組請求,那麼勾選generate parent sample,如下圖所示:

2、執行JMeter,檢視聚合報告的一組請求的響應時間,如下圖所示:

4.3Loop Controller

迴圈控制器可以控制在其節點下的元件的執行次數,可以是具體數字,也可以是變數。

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

2、關鍵引數說明如下:

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

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

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

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

如果同時設定了執行緒組的迴圈次數和迴圈控制器的迴圈次數,那迴圈控制器的子節點執行的次數為兩個數值相乘的結果。

4.3.1Thread Group和迴圈控制器的區別

1、現在巨集哥準備兩個請求,設定執行緒組1個執行緒,5次loop,下邊有一個請求:訪問北京巨集哥的部落格園首頁  一個Loop Controller(設定2次loop),下邊有一個請求:訪問部落格園首頁  

(1)執行緒組,如下圖所示:

(2)迴圈控制器,如下圖所示:

 

2、執行JMeter,檢視結果樹,為了清楚地看出結果,巨集哥將第一個請求故意配置成失敗的;如下圖所示:

從上邊的結果可以看出:

(1)如果同時設定了執行緒組的迴圈次數和迴圈控制器的迴圈次數,那迴圈控制器的子節點執行的次數為兩個數值相乘的結果。

(2)執行順序是:先執行執行緒組裡的迴圈,再執行迴圈控制器裡的迴圈。

4.4While Controller

While條件控制器,其節點下的元件將一直執行直到While 條件為false。

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

2、關鍵引數說明如下:

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

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

Condition:接受變量表達式與變數。條件為 Flase 的時候,才會跳出 While 迴圈,否則一直執行 While 控制器下的元件。

3、While控制器提供三個常量

(1)Blank:當迴圈中最後一個取樣器失敗後停止

(2)LAST:當循換前有取樣器失敗,不進入迴圈

(3)Otherwise:當判斷條件為false時,停止迴圈

4.4.1Blank

1、不填(空):當 While 控制器下最後一個樣例執行失敗後 跳出迴圈,如下圖所示:

2、執行JMeter,檢視結果樹,(你可以通過滑鼠拖動最後失敗的取樣器,移動到第一個或者第二個位置的時候,執行JMeter後,會發現在一直執行);如下圖所示:

4.4.2LAST

LAST :當 While 控制器下最後一個樣例執行失敗後 跳出迴圈,如果 While 控制器 前一個樣例執行失敗,則不會進入While迴圈,也就是不會執行While控制器下的樣例。

1、取樣器樹還是上邊的位置和順序。這次我們在While控制器表示式處填寫:LAST,如下圖所示:

2、執行JMeter,檢視結果樹,(你可以通過滑鼠拖動最後失敗的取樣器,移動到第一個或者第二個位置的時候,執行JMeter後,會發現在一直執行);細心的你可以發現迴圈只跑一遍,與不填 的結果是一樣的如下圖所示:

3、但是輸入LAST的時候,還會出現一個結果,那就是:如果While 控制器 的前一個樣例執行失敗,則不會進入While 控制器

在While 控制器 前面 新增兩個取樣器:取樣器1 訪問百度,取樣器2 訪問北京巨集哥 使取樣器2 訪問北京巨集哥 執行失敗。取樣器2必須在While控制器前邊且執行失敗。如下圖所示:

 4、執行JMeter,檢視結果樹,執行結果發現,取樣器1、取樣器2 執行了,但沒有進入While 控制器,如下圖所示:

4.4.3Otherwise

自定義條件:值為True 或 False的函式/變數/屬性 表示式;類似前邊講解的IF控制器,巨集哥這裡就照貓畫虎的舉個例子。

1、使用者自定義變數,變數名:北京巨集哥,變數值:true,如下圖所示:

2、While控制器配置,取到變數的值:${北京巨集哥},填寫到表示式的地方,如下圖所示: 

3、JMeter執行過程的邏輯分析:

(1)北京巨集哥使用者(執行緒組)下 有 1 個使用者自定義變數,變數 北京巨集哥 的值為 true,While控制器的條件為:${北京巨集哥} 取到的值始終是 true。

(2)所以一旦開始執行始終滿足條件,那麼按理說就應該一直執行 訪問部落格園首頁 、訪問北京巨集哥的部落格園首頁、訪問巨集哥的JMeter系列文章 3個取樣器,

4、執行JMeter,檢視結果樹,(執行JMeter後,會發現在一直執行),對比一下,與巨集哥的分析是不是高度一致哈;如下圖所示:

5.小結

 好了,今天關於邏輯控制器的上篇就講解到這裡,這一篇主要介紹了 IF控制器、Transaction Controller、Loop Controller和While控制器。

 

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

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

 

相關推薦

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測試結果檔案格式多樣,比如XML格式、CSV格式。預設情況下,測試結果將被儲存為xml格式的檔案,檔案的字尾: ".jtl"。另外一種儲存格式為CSV檔案,該格式的好處就

Jmeter(十三) - 入門精通 - JMeter定時器 - 教程

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

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

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

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

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

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 Http協議錄製指令碼工具-Badboy2教程

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

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

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

Jmeter(五) - 入門精通 - 建立網路計劃實戰和建立高階Web測試計劃教程

1.簡介   上一篇中巨集哥已經將其的理論知識介紹了一下,這一篇巨集哥就帶著大家一步一步的把上一篇介紹的理論知識實踐一下,然後再說一下如何建立高階web測試計劃。 2.網路計劃實戰   通過上一篇的學習,巨集哥將其分類為:     (1)不需要登入驗證身份就可以操作的。     (2)需要登入驗證身份之後才

Jmeter(七) - 入門精通 - 建立資料庫測試計劃實戰<MySQL資料庫>教程

1.簡介    在實際工作中,我們經常會聽到資料庫的效能和穩定性等等,這些有時候也需要測試工程師去評估和測試,上一篇文章巨集哥主要介紹了jmeter連線和建立資料庫測試計劃的過程,巨集哥在文中通過示例和程式碼非常詳細地介紹給大家,希望對各位小夥伴和童鞋們的學習或者工作具有一定的指導和參考學習價值,遇

Jmeter(八) - 入門精通 - JMeter配置元件教程

1.簡介 JMeter配置元件可以用來初始化預設值和變數,讀取檔案資料,設定公共請求引數,賦予變數值等,以便後續取樣器使用。將在其作用域的初始化階段處理。配置元件(Config Element)提供對靜態資料配置的支援,可以為取樣器設定預設值和變數。 首先我們來看一下JMeter的配置元件,路徑:新增-配置元

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

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

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

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

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

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

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

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

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

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

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

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

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

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