­

Jmeter邏輯控制器之If Controller的使用解析

一、If Controller概述

  類似於編程語言中if語句,根據給定表達式的值決定是否執行該節點下的子節點,表達式的值

為true則執行,為false則不執行,默認使用javascript語法進行判斷。

官方文檔://jmeter.apache.org/usermanual/component_reference.html#If_Controller

二、配置項說明

Name:組件的名稱,可以自定義

Comments:注釋,可以自定義對該組件的說明

Expression (must evaluate to true or false) :表達式(值必須是true或false)

Interpret Condition as Variable Expression?:將條件解釋為變量表達式,此項默認勾選

Evaluate for all children?:條件作用與每個子節點,默認不勾選,僅在If Controller入口處判斷一次

  這裡,我們注意下黃色感嘆號處的提示:

 ”For performance it is advised to check “Interpret Condition as Variable Expression”

 and use __jexl3 or __groovy evaluating to true or false or a variable that contains true or false.


 ${JMeterThread.last_sample_ok) can be used to test if last sampler was successful”
1.在Expression輸入框中,建議將判斷條件解釋為變量表達式,並使用__jexl3函數或__groovy函數對該變量表達式
求值為true/false,或者可輸入值為true/false的變量。
2. ${JMeterThread.last_sample_ok} 可用於檢測最後一個取樣器是否成功執行。

三、實踐場景

3.1 默認勾選「interpret condition as variable expression」的用法

  此時,If Controller的Expression輸入框中不能直接填寫判斷條件的表達式,需要利用__jexl3函數或

__groovy函數將條件表達式求值計算為true/false才有效。表達式可以自己寫,也可以利用Jmeter函數

助手Function Helper Dialog來生成。

  把生成的表達式複製到Expression輸入框,添加View Results Tree,運行,以HTML格式查看結果。

3.2 不勾選「interpret condition as variable expression」的用法

  可以直接在Expression輸入框中輸入需要的表達式,然後運行,查看結果。

  執行成功,我們可以看到,不勾選「interpret condition as variable expression」時,黃色感嘆號處

的提示文字已由黑色變成了紅色,建議使用默認勾選,以提高性能。

3.3 表達式中使用變量

  在實際的工作中,可能會需要根據用戶變量或者上一個取樣器的返回值來進行條件判斷,從而決

定是否需要執行某一個的取樣器。

  1.新增一個User Defined Variables(用戶自定義變量)「 title 」,當title的值為半醉半醒半浮生時才

會執行訪問半醉半醒半浮生的博客取樣器。

  2.在表達式中引用自定義變量:${__groovy(‘${title}’==’半醉半醒半浮生’,)}

3.4 勾選「Evaluate for all children」的用法

  假定場景:If Controller下的取樣器執行後,在某個子節點改變了變量的值,那麼該子節點後面的

取樣器還會繼續執行嗎?

  我們對上面的腳本進行調整,勾選「Evaluate for all children」並新增兩個取樣器。

  添加前置處理器,Add >>> Pre Processors >>> JSR223 PreProcessor,改變「 title 」的值為「測試之家」

  執行邏輯分析,If Controller的表達式為: ${__groovy(‘${title}’==’半醉半醒半浮生’,)} ,按照順序

應該會執行控制器下面的三個取樣器,但是在執行完「訪問半醉半醒半浮生的博客」後,變量的值被修改為

「測試之家」,不滿足表達式的條件,所以最後一個取樣器不會被執行。

3.5 不勾選「Evaluate for all children」的用法

  在上面的場景中,如果我們不勾選「Evaluate for all children」,「訪問半醉半醒半浮生博客SoapUI系列

文章」這個取樣器會不會被執行呢?我們把複選框的勾選去掉,運行查看結果。

 四、注意事項

1.條件判斷語句若是字符串,則需要用引號包圍參數,如:”user” == “test001”

2.If Controller之下的請求才會受到If控制器的約束,若是平級則不會受約束,因此建議將業務請求放在

If控制器之下進行測試。