小门板儿

Menu

jmeter详解–逻辑控制器

一、如果(If)控制器

概述:类似于编程语言中if语句,根据给定表达式的值决定是否执行该节点下的子节点,表达式的值为true则执行,为false则不执行 步骤:逻辑控制器--if控制器

image-20210809192808524

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、添加前缀相同的自定义变量

image-20210809194228789

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

image-20210809194447390

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

image-20210809194732631

4、执行结果:http请求将循环调用test_2,test_3,test_4的变量值

示例2:与JSON Extractor使用

如果接口响应中返回的json数据格式中包含数组,且下一个接口需要调用的参数碰巧在数组中存在多个值,则可以使用JSON Extractor提取多个值,然后用ForEach遍历参数进行赋值

JSON Extractor 内容如下:

image-20210809200916416

forEach控制器:

image-20210809201146941

http请求:

image-20210809201357745

三、Runtime Controller

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

image-20210814200901944

http请求-baidu设置运行时间为3s,http请求-qq设置运行时间2s,运行后总的运行时间为4s

四、仅一次控制器(once only controller)

在多线程循环的时候,将使其子节点下的取样器请求只运行一次

将线程组的循环次数设置为10次,分别加两个请求,其中请求2只请求一次

image-20210814202232615

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

image-20210814202500390

五、事务控制器

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

image-20210815182945796

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

没有选中的效果:

image-20210815183419892

选中之后的效果:

image-20210815183700122

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

image-20210815183923209

执行结果:

image-20210815184038102

六、吞吐量控制器

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

image-20210815192600520

吞吐量控制器字段介绍:

Total Executions:执行数量

percent Executions:执行百分比(1-100)

Per User:线程数,当选Total Executions时,是线程数;当选percent Executions时,是线程数*循环次数

示例1:

线程组-线程数2,循环次数6,吞吐量控制器A:Total Executions吞吐量5个,吞吐量控制器B:percent ExecutionsTotal Executions吞吐量50

image-20210815193553522

执行结果:请求A跑5个,请求B跑6个

示例2:

每个控制器都勾选 Per User

线程组-线程数2,循环次数6,吞吐量控制器A:Total Executions吞吐量5个,吞吐量控制器B:percent ExecutionsTotal Executions吞吐量50

image-20210815193907498

执行结果:请求A跑10个,请求B跑6个

七、while controller

image-20210815195142298

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个样例

image-20210815195836708

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

image-20210815195957889

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

image-20210815200335397

示例二:Condition 填LAST

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

image-20210815201344741

执行结果后,发现循环只跑一遍,与不填 的结果是一样的

但是输入LAST的时候,还会出现一个结果,那就是:如果While 控制器 的前一个样例执行失败,则不会进入While 控制器

如下:在While 控制器 前面 添加一个样例,使样例 执行失败。

image-20210815201636640

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

image-20210815201834208

示例三:自定义条件

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

image-20210815204004737
image-20210815204114817

— 于 共写了2502个字
— 标签:

评论已关闭。