jmeter逻辑控制器使用

在这里插入图片描述

简单控制器(Simple Controller)

作用:用来组合取样器和其他逻辑控制器

循环控制器(Loop Controller)

作用:控制该控制器下请求的循环次数
例如下图中线程数为2,循环控制器次数为3,执行后Home Page执行了2次,News Page执行了6次(线程2*循环3次)
如果勾选了forever,请求将会一直运行
在这里插入图片描述

一次性控制器(Once Only Controller)

作用:在多线程循环的时候,将使其子节点下的每个线程取样器请求只运行一次,例如登录请求
下图中线程数为2,循环3次,Home Page在Once Only Controller下所以每个线程只运行一次
注意点:循环一次只是针对每个线程的,N个线程数还是会运行N次
在这里插入图片描述

交替控制器(Interleave Controller)

作用:交替执行该控制器下的请求
下图中交替控制器下有三个请求,每次执行都会按顺序选择一个请求进行执行。当线程组循环次数为5,交替控制器下只有3个请求,循环到第四次后将从第一个(News Page)重新请求
在这里插入图片描述

下图中交替控制器下还有两个交替控制器,其中主控制器的忽略子控制器块选项未开启,第一个控制器下有两个请求,第二个控制器下有两个请求,执行的时候顺序为:
在这里插入图片描述
当主控制器的忽略子控制器块选项开启,执行顺序为
在这里插入图片描述
主控制器下的控制器为简单控制器,开启/不开启忽略子控制器的执行顺序:
在这里插入图片描述
在这里插入图片描述

随机控制器(Random Controller)

作用:类似于交替控制器,每次执行时随机选择一个控制器
在这里插入图片描述
在这里插入图片描述
忽略子控制器模块:开启后将子控制器看做一个请求,未开启则是将子控制器当成一组请求

随机顺序控制器(Random Order Controller)

作用:类似于简单控制器,将执行每个子节点下的取样器请求一次,但是执行是随机的(即随机执行所有的请求一次)。
随机控制器和随机顺序控制器的不同:随机是随机执行,顺序随机则是对所有请求随机一遍不会存在重复值,例如两个控制器下都有A、B、C三个请求,随机控制器的执行可能是B、C、C,随机顺序的结果则可能是B、C、A

吞吐量控制器(Throughput Controller)

执行次数:输入整数
执行百分比:输入0-100的整数
Per User:如果勾选该项则按虚拟用户数(线程数)来计算执行次数,如果没有选中该项则按所有虚拟用户数来计算执行次数。
下图中Per User未勾选,执行后的结果:在这里插入图片描述
勾选Per User的执行结果:
在这里插入图片描述

if控制器

该控制器通过判断表达式是否成立来执行请求,当表达式成立执行控制器下的请求

  • 勾选interpret condition as variable expression,表达式的结果必须是是true或者false,也就是说,在右边文本框中输入的条件值必须是 true 或 false(默认情况下)
  • 取消勾选后,可能会导致性能损失很大,并使测试的可扩展性降低,所以不推荐不勾选

请求登录后获取token,如果token不为空,则执行请求A,可以使用以下表达式

${__jexl3("${get_token}" != "\${get_token}")}
或者${__groovy("${get_token}" != "\${get_token}")}

在这里插入图片描述

  • 不勾选interpret condition as variable expression,设置变量var1 = 1,当表达式成立执行请求A
    在这里插入图片描述
    evaluate for all children:勾选后控制器下的每个请求执行前都会判断一次
    在这里插入图片描述
while控制器

作用:当控制器的条件为真将循环执行控制器下的请求,直到条件为假或不成立
可输入的条件:

  • 不输入任何条件:循环执行请求,控制器最后一个请求失败退出循环
  • LAST:控制器下最后一个循环的请求失败,退出循环。与空使用情况相似
  • 条件为假,退出循环

表达式:
当参数为表达式时(需要经过__jexl3函数进行转换,可以使用函数助手生成表达式),如果表达式的结果为true,则执行while controller;
反之则不执行,所以在参数中也可以直接输入true或者false来控制是否执行while controller
例如:${__jexl3(“${VAR2}”==“abcd”)}

switch控制器

switch value:

  • 填写索引值(从0开始),例如控制器下有三个请求,输入1就可以执行第二个请求
  • 当索引值过大时,只会执行第一个请求,例如控制器下有三个请求,输入10,执行的请求仍为第一个
  • 索引值为空,执行第一个请求
  • 当输入非数字时,将会查找相同名称(名称需要完全匹配)的请求执行,当匹配不到名称则会查找"default"名称(不区分大小写)进行匹配,当“default”未匹配到则不会执行任何请求
  • 在这里插入图片描述
ForEach控制器

作用:

  • ForEach 控制器一般和用户自定义变量/JDBC结果变量一起使用,用于可以遍历读取相关的返回值
    该控制器下的 Samplers 和控制器都会被执行一次或多次,每次读取不同的变量值
  • ForEach 控制器和正则提取器是个好搭档,因为正则提取出来的变量值会用_分隔,而 ForEach 可以省略
    在这里插入图片描述

实例1:根据用户自定义的变量取值,然后输出变量
在这里插入图片描述
也可将输出变量设置为空,一般不建议该做法
在这里插入图片描述
当不勾选Add”_”before number的执行效果:
用户自定义的变量有“-”存在,匹配时不勾选时“-”,则无法匹配到数据,控制器的请求不执行
在这里插入图片描述

实例2:配合JDBC请求使用
在这里插入图片描述

  • JDBC 一共返回 100 条数据,通过变量去接住所有数据,对应有 100 个变量(mobile_1 到 mobile_100)
  • 循环 100 次,输入变量 mobile_1 - mobile_100 并输出为 new_mobile_1 - new_mobile_100
    实例3:
    在这里插入图片描述
  • 这里通过 Result Variable name 去接住所有数据,只有一个变量,是无法循环的
  • 所以我们需要通过正则提取器将需要的 mobile 字段的值提取出来
    在这里插入图片描述
    在这里插入图片描述

我们要的其实是箭头的那些,但是正则会提取不必要的字段值(如:mobile_new_11_g0),所以注意 ForEach 的输入变量前缀要写正确
循环 100 次,输入变量 mobile_new_1 - mobile_new_100 并输出为 mobile_1 - mobile_100

权重控制器(Weighted Switch Controller)

作用:为请求分配权重,控制请求执行的比重
在这里插入图片描述
勾选Random choice后会随机选一个子项执行,不能保证子项执行的实际百分比等于预期值
在这里插入图片描述

仅一次控制器

作用:线程组内的请求只会被执行一次,例如10个线程组循环40遍,该控制器下的请求则会被被执行10次,即每个线程组执行一次。
在这里插入图片描述

事务控制器(Transaction Controller)

作用:务控制器生成一个额外的样本,该样本测量执行嵌套测试元素所花费的总时间。相对于对控制器下的请求做一个统计
在这里插入图片描述

Generate Parent Sample:如果选中,事务控制器将作为其他取样器的父级样本,例如控制器下有ABC三个请求,不勾选时聚合报告可以看到ABC以及这个事务的统计数据,勾选后就只能看到事务的统计数据,下图为勾选后的执行结果
在这里插入图片描述
Include duration of timer and pre-post processors in generated sample:是否在生成的样本中包括计时器,预处理和后处理的延迟时间,勾选后的统计时间包括控制器范围内的所有处理,而不仅仅是样本。

包含控制器(Include Controller)

作用:使用外部的jmx文件,需要配合测试片段一起使用。
测试片段相当于一个独立的部分,可以被其他测试计划引用,类似公共模块或公共方法函数,遇到重复需要的,比如登录、注册之类的,就可以用测试片段和 Include 控制器 。
如果测试使用Cookie管理器或用户定义的变量,这些应该放在顶层测试计划中,而不是包含的文件中,否则不能保证它们工作。
在这里插入图片描述

临界区控制器(Include Controller)

作用:临界区控制器确保其子元素(采样器/控制器等)将仅由一个线程执行,因为在执行控制器的子元素之前将获取命名锁。可参考:https://blog.csdn.net/weixin_39307626/article/details/123176180
根据锁名来控制并发,同一个锁名之下,在同一时间点只能存在一个运行中,适用于控制并发的场景
锁名类型:

  • 锁名为空,认为每个锁为不同的锁
  • 锁名相同,多个锁认为是同一个锁,同一个时间点只能存在一个运行中
  • 锁名为变量,根据变量值来判断是不是属于同一个锁,变量值为相同时,则认为是同一个锁
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值