JMeter 逻辑控制之IF条件控制器
逻辑控制之IF条件控制器
测试环境
JMeter-5.4.1
循环控制器介绍
添加While Controller
右键线程组->添加->逻辑控制器->While控制器

控制器面板介绍
添加后,面板如下

仅Expression值为true,才会执行位于其下的操作
最好勾选(默认配置)Interpret Condition as Variable Expression?,这样Expression输入框可以有两种输入选择:
-
输入一个值为
true或者false的变量比如,如果你想测试,最后一个采样器执行是否成功,可以输入
${JMeterThread.last_sample_ok} -
输入对bool表达式求值的函数(建议使用
${__jexl3()},当然也可以用支持__groovy) ,形如${__jexl3(${COUNT} < 10 && "${VAR}" == "abcd",)}
例如,没勾选上述配置之前,使用条件:${__jexl3(${VAR} == 23)},该条件计算结果(true或者false)会被传递给JavaScript,最后由JavaScript反回该结果值。勾选上述配置之后,会将该条件计算结果直接与true比较,不需要使用JavaScript.
检测变量是否为定义或者为null,可以采用以下表达式,假设变量命名为 myVar:
${__jexl3("${myVar}" == "\${myVar}")}
或者:
${__jexl3("${myVar}" != "\${myVar}")}
如果不勾选 Interpret Condition as Variable Expression? 控制器会使用javascript计算表达式,这会带来很大的性能消耗,并且降低测试的扩展性。
Evaluate for all children
如果勾选,则执行其下所有子组件时都会重新计算条件值,否则仅在进入控制器时时进行计算
示例:如下图,If Controller条件为${__jexl3("${myVar}" == "\${myVar}")},执行HTTP Request1之前没有设置myVar变量。

没勾选Evaluate for all children之前,运行时,HTTP Request2也会被执行,反之,HTTP Request2不会被执行。
例子(JavaScript)
${COUNT} < 10"${VAR}" == "abcd"
如果在解释代码时出错,那么条件结果值会被设置为false
当使用__groovy时,注意不要在字符串中使用变量替换,形如${__groovy("${myVar}" == 1)},否则使用了改变脚本的变量不能被缓存。取而代之,使用vars.get("myVar"),参见下文
例子(Variable Expression)
${__groovy(vars.get("myVar") != "Invalid" )}(检查myVar变量是否等于Invalid)${__groovy(vars.get("myInt").toInteger() <=4 )}(检查myInt变量是否小于等于4)${__groovy(vars.get("myMissing") != null )}(检查是否设置了myMissing变量)${__jexl3(${COUNT} < 10)}${RESULT}${JMeterThread.last_sample_ok}(检查最后一个采样器采样是否成功)
作者:授客
微信/QQ:1033553122
全国软件测试QQ交流群:7156436
Git地址:https://gitee.com/ishouke
友情提示:限于时间仓促,文中可能存在错误,欢迎指正、评论!
作者五行缺钱,如果觉得文章对您有帮助,请扫描下边的二维码打赏作者,金额随意,您的支持将是我继续创作的源动力,打赏后如有任何疑问,请联系我!!!
微信打赏
支付宝打赏 全国软件测试交流QQ群
浙公网安备 33010602011771号