jmeter详解–逻辑控制器
目录
一、如果(If)控制器
概述:类似于编程语言中if语句,根据给定表达式的值决定是否执行该节点下的子节点,表达式的值为true则执行,为false则不执行 步骤:逻辑控制器--if控制器

interpret condition as variable expression:如果勾选该项,那么变量表达式会进行求值,并与“ture”或“false”进行比较,而无需使用JavaScript 对所有子条件执行(evaluate for all children):如果勾选该项,则该controller在每一个子节点执行时执行一次;默认情况下,该控制器可以对包含在其下面的所有可运行的元素进行执行,但只在入口执行一次
二、ForEach控制器
业务逻辑:ForEach控制器一般与用户自定义变量/JDBC结果变量一起使用,可以认为他就是一种遍历型循环,该节点下的脚本内容会根据结和使用的变量被执行一次或者多次 输入变量前缀:比如上面的test_1,这里就输入test Start index for loop:开始循环字段,不包含输入的数值,按照上图从1开始,则这里输入0,为空和非数字都从0开始 End index for loop:结束循环字段,包含输入的数值,这里输入范围内的数值则遍历到该值后停止,如果非范围内的值,则一直遍历至结束 输出变量名称:将自定义变量值存储到testid中,后续引用的时候${} 格式
示例1:与用户自定义的变量使用
1、添加前缀相同的自定义变量

2、使用foreach控制器遍历变量

3、将变量应用到http请求中

4、执行结果:http请求将循环调用test_2,test_3,test_4的变量值
示例2:与JSON Extractor使用
如果接口响应中返回的json数据格式中包含数组,且下一个接口需要调用的参数碰巧在数组中存在多个值,则可以使用JSON Extractor提取多个值,然后用ForEach遍历参数进行赋值
JSON Extractor 内容如下:

forEach控制器:

http请求:

三、Runtime Controller
运行时间控制器,控制其下的Sampler运行时间,与线程组中的调度器效果一致

- Runtime:运行时长
- 和线程组的循环次数也有关系,如果是指定次数的话,总的运行时间 = 循环次数 * runtime
- 如果循环次数是永远,那么 Runtime 控制器下的子项也会永远运行示例:一个线程组组下对不同的请求分别设置不同的运行时间
http请求-baidu设置运行时间为3s,http请求-qq设置运行时间2s,运行后总的运行时间为4s
四、仅一次控制器(once only controller)
在多线程循环的时候,将使其子节点下的取样器请求只运行一次
将线程组的循环次数设置为10次,分别加两个请求,其中请求2只请求一次

结果如下:请求1-10次,请求2-1次

五、事务控制器
可以用于测试执行嵌套测试元素所花费的总时间,即相当于用户进行一系列操作的测试,只有整个事务控制器定义的事务成功,才算成功。比如用户登录系统有两个步骤,整个操作时间少于限定值时,测试才通过

Generate Parent Sample:如果选中,则生成样本作为其他样本的父项,否则样本将作为独立样本生成。使用根据自己需求使用
没有选中的效果:

选中之后的效果:

Include duration of timer and pre-post processors in generated sample:是否在生成的样本中包括计时器,预处理和后处理延迟。默认值为false。一般不建议选择,因为选择会把一些额外时间算入总时间

执行结果:

六、吞吐量控制器
吞吐量控制器(Throughput Controller)用来控制其下元件的执行次数,并无控制吞吐量的功能。 作用:控制其下的子节点的执行次数与负载比例分配

吞吐量控制器字段介绍:
Total Executions:执行数量
percent Executions:执行百分比(1-100)
Per User:线程数,当选Total Executions时,是线程数;当选percent Executions时,是线程数*循环次数
示例1:
线程组-线程数2,循环次数6,吞吐量控制器A:Total Executions吞吐量5个,吞吐量控制器B:percent ExecutionsTotal Executions吞吐量50

执行结果:请求A跑5个,请求B跑6个
示例2:
每个控制器都勾选 Per User
线程组-线程数2,循环次数6,吞吐量控制器A:Total Executions吞吐量5个,吞吐量控制器B:percent ExecutionsTotal Executions吞吐量50

执行结果:请求A跑10个,请求B跑6个
七、while controller

Condition (function or variable) :条件(函数或变量)。条件为 Flase 的时候,才会跳出 While 循环,否则一直执行 While 控制器下的样例。
3种条件:
1、不填(空):当 While 控制器下最后一个样例执行失败后 跳出循环
2、LAST :当 While 控制器下最后一个样例执行失败后 跳出循环,如果 While 控制器 前一个样例执行失败,则不会进入While循环,也就是不会执行While控制器下的样例。
3、自定义条件:值为True 或 False的函数/变量/属性 表达式
示例一:Condition 不填(空)
1、新增线程组,线程数为1,循环次数为1;新增一个While 控制器,在其下面添加3个样例

2、然后 设置最后一个样例执行失败:(一定是最后一个样例哦)

3、执行后,循环一次就退出了

示例二:Condition 填LAST
还是上面的设置不变,将While 控制器中的条件输入框中输入:LAST。

执行结果后,发现循环只跑一遍,与不填 的结果是一样的
但是输入LAST的时候,还会出现一个结果,那就是:如果While 控制器 的前一个样例执行失败,则不会进入While 控制器
如下:在While 控制器 前面 添加一个样例,使样例 执行失败。

执行结果发现,请求1执行了,但没有进入while控制器

示例三:自定义条件
自定义条件,类似前面分享的 if 控制器

