Jmeter邏輯控制器之If Controller的使用解析
一、If Controller概述
類似於程式語言中if語句,根據給定表示式的值決定是否執行該節點下的子節點,表示式的值
為true則執行,為false則不執行,預設使用javascript語法進行判斷。
官方文件:https://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"
三、實踐場景
3.1 預設勾選“interpret condition as variable expression”的用法
此時,If Controller的Expression輸入框中不能直接填寫判斷條件的表示式,需要利用__jexl3函式或
__groovy函式將條件表示式求值計算為true/false
助手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控制器之下進行測試。