相似於編程語言中if語句,根據給定表達式的值決定是否執行該節點下的子節點,表達式的值javascript
爲true則執行,爲false則不執行,默認使用javascript語法進行判斷。html
官方文檔:https://jmeter.apache.org/usermanual/component_reference.html#If_Controllerjava
Name:組件的名稱,能夠自定義express
Comments:註釋,能夠自定義對該組件的說明apache
Expression (must evaluate to true or false) :表達式(值必須是true或false)編程
Interpret Condition as Variable Expression?:將條件解釋爲變量表達式,此項默認勾選編程語言
Evaluate for all children?:條件做用與每一個子節點,默認不勾選,僅在If Controller入口處判斷一次函數
這裏,咱們注意下黃色感嘆號處的提示:性能
此時,If Controller的Expression輸入框中不能直接填寫判斷條件的表達式,須要利用__jexl3函數或測試
__groovy函數將條件表達式求值計算爲true/false
纔有效。表達式能夠本身寫,也能夠利用Jmeter函數
助手Function Helper Dialog來生成。
把生成的表達式複製到Expression輸入框,添加View Results Tree,運行,以HTML格式查看結果。
能夠直接在Expression輸入框中輸入須要的表達式,而後運行,查看結果。
執行成功,咱們能夠看到,不勾選「interpret condition as variable expression」時,黃色感嘆號處
的提示文字已由黑色變成了紅色,建議使用默認勾選,以提升性能。
在實際的工做中,可能會須要根據用戶變量或者上一個取樣器的返回值來進行條件判斷,從而決
定是否須要執行某一個的取樣器。
1.新增一個User Defined Variables(用戶自定義變量)「 title 」,當title的值爲半醉半醒半浮生時才
會執行訪問半醉半醒半浮生的博客取樣器。
2.在表達式中引用自定義變量:${__groovy('${title}'=='半醉半醒半浮生',)}
假定場景:If Controller下的取樣器執行後,在某個子節點改變了變量的值,那麼該子節點後面的
取樣器還會繼續執行嗎?
咱們對上面的腳本進行調整,勾選「Evaluate for all children」並新增兩個取樣器。
添加前置處理器,Add >>> Pre Processors >>> JSR223 PreProcessor,改變「 title 」的值爲「測試之家」
執行邏輯分析,If Controller的表達式爲: ${__groovy('${title}'=='半醉半醒半浮生',)} ,按照順序
應該會執行控制器下面的三個取樣器,可是在執行完「訪問半醉半醒半浮生的博客」後,變量的值被修改成
「測試之家」,不知足表達式的條件,因此最後一個取樣器不會被執行。
在上面的場景中,若是咱們不勾選「Evaluate for all children」,「訪問半醉半醒半浮生博客SoapUI系列
文章」這個取樣器會不會被執行呢?咱們把複選框的勾選去掉,運行查看結果。
1.條件判斷語句如果字符串,則須要用引號包圍參數,如:"user" == "test001"
2.If Controller之下的請求才會受到If控制器的約束,如果平級則不會受約束,所以建議將業務請求放在
If控制器之下進行測試。