相似于编程语言中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控制器之下进行测试。