Believe in yourself.

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控制器下的请求。

 

posted @ 2020-08-14 15:13  eastonliu  阅读(3760)  评论(0编辑  收藏  举报