控制器 学习笔记

1、简单控制器:该控制器对JMeter如何处理添加到其中的采样器没有影响,只是方便我们分组命名而已。

添加简单控制器

 

 


线程组下可以添加控制器,控制器下可添加http请求,也可添加控制器。简单控制器如下

 

 2、随机控制器:随机控制器的作用类似于交替控制器,不同在于它不是通过其子控制器和采样器按顺序排列,而是在随机选取一个。

 

 

 

 

 

 

3、随机顺序控制器:随机顺序控制器类似简单控制器,区别在于该控制器下的节点请求执行顺序是随机的。

 

 

 

 4、循环控制器  注释: 线程组 这个设置界面也是有一个循环次数的设置,那么到底他们两个有什么关联呢。我理解为父子关系。首先在线程组中设置循环次数2,循环控制器中设置循环测试3

 

 

 

 

结果执行了6次

 

 

5、仅执行一次控制器

仅一次控制器
在线程组下添加逻辑控制器,仅一次控制器

例如:实际中只需要登陆一次,于是把登录放到一次控制器下

当设置一个线程时,循环10次,运行后查看结果树和聚合报告


 

 6.switch控制器

取得switch value的值,通过对节点下所有取样器、逻辑控制器的下标、名称匹配去执行,switch value的值可以为数字、字符串、变量等等

当switch value的值为0和正整数时,只会对当前节点下的取样器、逻辑控制器的下标进行匹配,不会对名称匹配。<下标是从0开始,即0为第一个取样器/逻辑控制器>

当switch value的值为空、为0、为正整数时,如果值超出了节点下的下标范围,则会默认执行节点下第一个取样器或逻辑控制器。

当switch value的值为负数、小数、字符串时,如果无法通过名称匹配到取样器、逻辑控制器,则会跳过当前控制器。

当switch value的值通过名称匹配到多个结果时,只会按照正序执行第一个取样器、逻辑控制器。

 

 

 

 

 

 

 

 7.ForEach控制

ForEach控制器一般和用户自定义变量一起使用,从用户自定义变量中读取一系列相关的变量。该控制器下的采样器或控制器都会被执行一次或多次,遍历读取不同的变量值。
下面用两个简单的例子介绍下用法:
例1:ForEach控制器结合用户自定义变量使用,遍历用户自定义变量

 

 变量名user通过下标0到3去用户自定义的变量中去找user1 user2 user3 并一一执行

 

 请求器中用变量调用

请求内容和用户自定义中参数user1设置的值你好 对应

 

 

 

8、Runtime控制器:控制其子节点运行多长时间,控制器将运行其子项,直到超出配置的运行时间。runtime为0时表示没有运行。

 示例:(1)添加Runtime控制器,登录http请求放入其中,线程组循环次数默认1。Runtime Controller的runtime设为5s

(2)添加监听器-察看结果树,点击运行,登录http请求运行了5s就结束了。

9、if控制器

打开函数助手

 

 

 

 

 

JMeter提供了多种逻辑控制器,它们各个功能都不相同,大概可以分为两种使用类型:

控制测试计划执行过程中,节点的逻辑执行顺序,如:ForEach Controller(ForEach控制器),Loop Controller(循环控制器)、If Controller(如果if控制器)等;
对测试计划中的脚本进行分组,方便JMeter统计执行结果,以及进行脚本的运行时控制等,如:Throughput Controller(吞吐量控制器)、Transaction Controller(事务控制器)等。

如果(If)控制器组件界面说明:

名称:如果(If)控制器组件的自定义名称,见名知意最好。
注释:即添加一些备注信息,对该如果(If)控制器组件的简短说明,以便后期回顾时查看。
Expression (must evaluate to true or false):填写条件表达式,评估结果必须为真或假。
换句话说,是执行流程验证的条件,用于决定是否应执行子元件。默认情况下,条件被解释为true或false的JavaScript代码。
Interpret Condition as Variable Expression?:将条件解释为变量表达式?
意思是说:
如果不勾选此选项,则输入的条件表达式,将会使用JavaScript进行解析,得到需要的true/false结果。
如果勾选此选项:
1)输入的条件表达式,不会使用JavaScript进行解析,而是将条件视为JMeter的变量。
2)如果需要进行条件判断,则需要使用__jexl3或者__groovy函数,来生成函数表达式。通过函数表达式,得到需要的true/false结果。
Evaluate for all children?:条件作用于每个子项进行评估。
如果勾选该项,则该控制器在每一个子节点执行时前,执行一次。
默认情况下,该控制器可以对在其下面的所有可运行的组件,进行控制执行,但只在入口执行一次。
说明:

 

意思为:

为了提升性能,建议将“将条件解释为变量表达式”勾选。
并使用__jexl3或者__groovy函数,来评估表达式条件的真假。
并且${JMeterThread.last_sample_ok}变量,可用于测试最后一个采样器是否成功。
默认“将条件解释为变量表达式”是勾选状态,取消勾选,则上面的提示会变红。


10、while控制器

1、不填(空):当 While 控制器下最后一个样例执行失败后 跳出循环

2、LAST :当 While 控制器下最后一个样例执行失败后 跳出循环,如果 While 控制器 前一个样例执行失败,则不会进入While循环,也就是不会执行While控制器下的样例。

3、自定义条件:值为True 或 False的函数/变量/属性 表达式

然后 设置最后一个样例执行失败(一定是最后一个样例哦),发现执行结果跑一遍就跳出循环了

 

 

 上面最相邻的执行失败 并不会进入while循环

 

 

posted @ 2022-03-24 22:38  alan520son  阅读(121)  评论(0编辑  收藏  举报