概述
If Controller
- 参数介绍
- 不勾选Interpret Condition as Variable Expression?
- 勾选Interpret Condition as Variable Expression?
- 勾选Evaluate for all children?
- 不勾选Evaluate for all children?
- JMeterThread.last_sample_ok
条件控制器,可以通过某个条件来控制其节点下的元件是否执行。即根据给定表达式的值决定是否执行该节点下的子节点,表达式的值为true则执行,为false则不执行。
参数介绍
界面上红色字体如下所示:
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.
为了提高性能建议使用“Interpret Condition as Variable Expression”,并使用__jexl3函数或__groovy函数对该变量表达式求值为true/false(如${__groovy(1==1),}),或者可直接输入true/false的变量(如${变量名}),用来控制是否执行。
${JMeterThread.last_sample_ok) can be used to test if last sampler was successful
${JMeterThread.last_sample_ok}可用于检测最后一个取样器是否成功执行
属性 | 描述 | 必填 |
---|---|---|
Name | 控制器名称,可以根据实际情况进行设置 | 否 |
Comments | 注释,描述在业务中的作用 | 否 |
Condition (evaluated with javascript) | 默认情况下,该条件被解释为返回"true"或"false"的JavaScript代码 | 是 |
Expression (must evaluate to true or false) | 表达式(值必须是true或false) | 是 |
Interpret Condition as Variable Expression? | 如果选择了这个,那么条件必须是一个计算值为"true"的表达式 | 否 |
Evaluate for all children? | 勾选:表达式会在if controller节点下的每个取样器之前执行一次,根据表达式结果判断是否执行该取样器。 不勾选:只在if controller入口处执行一次,根据结果判断是否执行下面的脚本。 | 否 |
不勾选Interpret Condition as Variable Expression?
如果你 不勾选“Interpret Condition as Variable Expression?”,If Controller内部使用javascript来计算条件,这将带来非常大的性能损失,并降低测试的可伸缩性,所以不建议使用这种情况。
实例:有这样一个场景,登录后获取Home Page内容,登录成功会返回code:200的代码,并且获取Home Page需要登录的token。
- 创建线程组后创建一个Login请求,在Login请求节点下添加两个后置处理器Regular Expression Extractor,一个获取token一个获取code,如下所示:
- 在线程组下添加一个BeanShell Sample,用来设置code和token的全局变量,如下图所示:
- 如果登录成功,那么我们就获取Home Page内容,所以我们在线程组添加一个逻辑控制器 If Controller来判断其子节点是否运行。在If Controller节点下添加一个获取Home Page的请求,并且请求下添加配置元件HTTP Header Manager,把token信息添加进去。
- 再在If Controller的Expression输入框下直接写入表达式判断是True还是False,判断登录后的code是否为200,如果为true就执行,如下图所示:
勾选Interpret Condition as Variable Expression?
此时,If Controller的Expression输入框中不能直接填写判断条件的表达式,需要利用__jexl3函数或__groovy函数将条件表达式求值计算为true/false才有效。表达式可以自己写,也可以利用Jmeter函数助手Function Helper Dialog来生成。
还是按照上面的示例进行讲解,只是需要把第四点修改一下即可。
If Controller的Expression输入框下利用__groovy函数${__groovy(${__property(sucesscode,,)}==200,)}
将条件表达式计算为true或者false,从而判断子节点是否执行,如下图所示:
勾选Evaluate for all children?
Evaluate for all children就是在执行每个请求前都会去执行If Controller设定的表达式,如果表达式为True继续执行,为False就不执行这个请求。
还是根据上面的示例,我们在If Controller节点下再增加一个请求,假如在发送这个请求前我们更改了code的值,那么我们这个请求还会发送吗?
此时的执行顺序是:先执行If Controller的表达式,如果为True就会执行HTTP Head Manage,再执行前置处理器,再执行Home Page请求;再执行HTTP Request之前需要再此去执行If Controller的表达式,如果为True就执行,为false就不执行。
不勾选Evaluate for all children?
不勾选,只会执行一次If Controller的表达式(即入口处执行一次),执行完表达式判断是否为True,如果为True就会执行其下子节点。根据上面的示例,Home Page和HTTP Request都会执行。
JMeterThread.last_sample_ok
在Expression输入框中输入${JMeterThread.last_sample_ok}表示判断上一个请求是否成功。
实例:在If Controller节点下添加两个请求,第一个请求失败,那么第二个请求不会执行,第一个请求成功,那么第二个请求也会执行。
执行结果如下图所示:
最后
以上就是听话白云为你收集整理的JMeter逻辑控制器之If Controller的全部内容,希望文章能够帮你解决JMeter逻辑控制器之If Controller所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复