最近工作不忙,利用空閑時間整理了下Jmeter的相關知識,下面給大家分享下Jmeter中 如果(if)控制的使用和應用。
如下圖:線程組 > 添加 > 邏輯控制器 > 如果 (if) 控制器


Expression (must evaluate to true or false) :表達式(值必須是true或false),也就是說,在右邊文本框中輸入的條件值必須是true 或 false,(默認情況下)
Interpret Condition as Variable Expression?:默認勾選項,將條件解釋為變量表達式(需要使用__jexl3 or __groovy 表達式)
Evaluate for all children?:條件作用於每個子項(具體理解見后面的列子說明)
注:
1、文本框上的黃色感嘆號,就是提示你,建議采用__jexl3 or __groovy 表達式,以提高性能,也就是默認的方式。
2、if 控制器 只能作用於其下的子項
一、默認用法,采用__jexl3 or __groovy 表達式
如下圖,if 控制器 下 有一個 訪問百度首頁 的取樣器,只有if條件滿足時,才會執行該取樣器。采用默認方式,將條件1==1,放入 __jexl3表達式中。

如果不知道表達式如何使用,可使用Jmeter 的函數助手,如下:

二、直接輸入條件
如下圖,去掉 “Interpret Condition as Variable Expression?” 前面復選框,直接輸入條件 1==1。訪問百度首頁的取樣器將被執行。

三、條件中使用變量
很多情況下,需要根據用戶變量或者上一個取樣器的返回值來進行條件判斷,覺得是否需要執行某一個的取樣器。
如下,新增一個用戶變量:ischildren。條件:ischildren 的值為 y 的時候,才執行 訪問百度首頁 的取樣器。


或者可以用表達式:${__jexl3("${ischildren}"=="y",)}。
四、Evaluate for all children? 的用法
在 上面了解了條件中如何使用變量,那么如果 if 控制器下的取樣器執行后,改變了該變量的值,if 控制器下 其后的取樣器還會被執行嗎?看看下面的列子:


if 控制器下 有 3 個取樣器,變量 ischildren 的初始值為 y,if 控制器的條件為:${__jexl3("${ischildren}"=="y",)}。
開始滿足條件,那么應該執行 訪問百度首頁 、訪問百度新聞頁、訪問百度貼吧 3個取樣器,
但是 訪問百度新聞頁 執行后,將ischildren 的值變了 n,已經不能滿足 "${ischildren}"=="y" 條件。
所以 訪問百度貼吧 這個取樣器不會被執行。

如果這個時候,去掉 Evaluate for all children? 的勾選,會發生什么呢,大家可以自己動手試試。
補充:
條件有:
== 等於,如 1==1 或 ${__jexl3(1==1,)}
> 、< 大於 小於,如 2>1,1<2,或 ${__jexl3(2>1,)}
>=、<= 大於等於 小於等於,如 2>=1 ,或 ${__jexl3(2>=1,)}
!=、!不等於,非,如 "y"!="n",非 則取 != 的反值
多條件可用:|| 或,&& 和,如:2<5 && 2>1,${__jexl3(2<5 && 2>1,)}
另外,如果時字符串必須要用引號,變量都認為時字符串的形式,如:${__jexl3("${ischildren}"=="y",)}
今天分享到這里啦,大家多多指點,測試任務來了,又要干活了。
