Jmeter(十九)逻辑控制器之if控制器
一、Jmeter逻辑控制器
可以控制取样器(Sampler)的执行顺序,它由多个逻辑控制语句封装成不同功能的组件组成。只对其子节点的Sampler有效。
分为两种类型:
1、控制测试计划执行过程中节点的逻辑执行顺序,如:循环控制器,if控制器等。
2、对测试计划中的脚本进行分组,方便Jmeter统计执行结果以及进行脚本的运行时控制等,如:吞吐量控制器,事务控制器等。
二、if控制器
Expression (must evaluate to true or false) :表达式(值必须是true或false),也就是说,在右边文本框中输入的条件值必须是true 或 false。
Interpret Condition as Variable Expression?:默认勾选项,将条件解释为变量表达式(需要使用__jexl3 或者 __groovy 表达式)
Evaluate for all children?:条件作用于每个子项。
Use status of last sample:上一个取样器执行成功后才执行if控制器下的子项
1、文本框上的黄色感叹号,就是提示你,建议采用__jexl3 or __groovy 表达式,以提高性能,也就是默认的方式。
2、if 控制器 只能作用于其下的子项
下面通过具体例子来看下if控制器的用法:
1、新建一个测试计划,定义一个用户变量mode,值为"baidu"
2、新建两个if控制器,根据mode的值进行不同的请求。默认是勾选Interpret Condition as Variable Expression?,就要使用到__jexl3 或者 __groovy函数。打开函数助手
把生成的函数字符串拷贝到if控制器中的Expression中就行了。
3、添加一个监听器“察看结果树”,执行测试计划,察看执行结果
4、把测试计划中mode的值改为"tenxun",再次执行察看结果。
5、如果要直接使用表达式,不用__jexl3 或者 __groovy函数,那么就要去掉Interpret Condition as Variable Expression?的勾选,如图:
6、Evaluate for all children的用法
新建一个测试计划,定义一个用户变量flag,值为"Y"
在线程组下新加一个if控制器,勾选Evaluate for all children,其下有三个取样器
在腾讯请求的取样器下添加一个JSR233 PostProcessor的后置处理器,作用就是改变变量flag的值
执行测试计划,查看结果树
可以看到第三个请求->阿里请求没有被执行,原因就是执行完第二个请求->腾讯请求后,flag的值变为N了,已经不满足if控制器的条件了。
如果把if控制器中的Evaluate for all children选项去掉,会怎么样了?
执行测试计划,查看结果树
可以看到if控制器下的三个取样器都被执行了。
Evaluate for all children的作用就是使if控制器的条件作用于每一个子项。
7、Use status of last sample的用法
在测试计划下添加2个请求,百度请求和腾讯请求,腾讯请求放在if控制器下,在if控制器中点击Use status of last sample按钮,就会自动生成一个${JMeterThread.last_sample_ok}
执行测试计划,查看结果树,可以看到两个取样器都被执行了
修改百度请求(把请求地址写错,比如写成www.baidu1.com),使请求失败,再次执行测试计划,查看结果树
可以看到百度请求失败后,没有再去执行腾讯请求了。
Use status of last sample的作用就是只有当上一个请求成功后,才会执行if控制器下的请求。