1.简介

Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”。

意思是说,逻辑控制器可以控制采样器(samplers)的执行顺序。由此可知,控制器需要和采样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所有的采样器都会当做一个整体,执行时也会一起被执行。

JMeter逻辑控制器可以对元件的执行逻辑进行控制,除仅一次控制器外,其他可以嵌套别的种类的逻辑控制器。

2.逻辑控制器分类

JMeter中的Logic Controller分为两类:
(1)控制测试计划执行过程中节点的逻辑执行顺序,如:Loop Controller、If Controller等;
(2)对测试计划中的脚本进行分组、方便JMeter统计执行结果以及进行脚本的运行时控制等,如:Throughput Controller、Transaction Controller。

3.预览逻辑控制器 

首先我们来看一下JMeter的逻辑控制器,路径:线程组(用户)->添加->逻辑控制器(Logic Controller);我们可以清楚地看到JMeter5中共有17个逻辑控制器,如下图所示:

如果上图您看得不是很清楚的话,宏哥总结了一个思维导图,关于JMeter5的逻辑控制器类型,如下图所示: 

 通过以上的了解,我们对逻辑控制器有了一个大致的了解和认识。下面宏哥就给小伙伴或则童鞋们分享讲解一些通常在工作中会用到的逻辑控制器。 

4.常用逻辑控制器详解

  这一小节,宏哥就由上而下地详细地讲解一下常用的逻辑控制器。

4.1Interleave Controller

交替控制器,顾名思义是:互相交替,其节点下的取样器交替执行。根据被控制器触发执行次数,去依次执行控制器下的子节点<逻辑控制器、采样器>。被触发执行可以由线程组的线程数、循环次数、逻辑控制器触发。

1、我们先来看看这个Interleave Controller长得是啥样子,路径:线程组 > 添加 > 逻辑控制器 > 交替控制器,如下图所示: 

2、关键参数说明如下:

Name:名称,可以随意设置,甚至为空;

Comments:注释,可随意设置,可以为空;

Ignore sub-controller blocks:忽略子控制器,即子控制器失效,由交替控制器接管。

勾选后,会无视节点下的所有控制器<交替控制器、随机控制器例外>,将每个取样器作为一个单独字节点执行
不勾选忽略子控制器,交替执行时,节点下次一级每个取样器、逻辑控制器都认为是一个单独子节点来交替执行。

Interleave across threads: 勾选此项,则交替控制器下的请求将应用至所有线程和循环中迭代。如有四个请求,三个线程,两轮循环,那么第一轮三个线程分别运行请求1,请求2,请求3,第二轮循环的三个线程运行请求4,请求1,请求2。

允许跨线程交替执行,勾选后,当线程组线程数大于1时,当前线程首次执行会根据线程数顺序进行交替,后续执行按自己所属线程的上一个次的执行的位置交替,如: 交替控制器下由A B C D  E 5个接口, 设置线程组 线程数3个,循环4次,则最终执行结果为  线程1执行 A B C D 线程2执行 B C D E 线程3执行 C D E A 。

 4.1.1简单实例

1、首先在交替控制器下添加3个取样器 访问博客园首页、访问北京宏哥的博客园首页和访问北京宏哥的JMeter系列文章,线程组下添加一个取样器 访问度娘,与交替控制器同层级,线程组设置循环次数为2,如下图所示:

2、配置好以后,运行JMeter,然后查看结果树(循环两次,每次只执行交替控制器里一个取样器),如下图所示:

4.1.2复杂实例

宏哥这里讲解的复杂使用,就是将交替控制器嵌套使用,来看看执行结果,从而更进一步的理解和学习交替控制器。

1、创建一个父交替控制器:北京宏爸,其下两个子交替控制器:北京宏哥 北京宏弟,子交替控制器下面分别添加2个取样器:访问度娘  访问博客园首页,设置线程组循环次数10,如下图所示:

2、配置好以后,运行JMeter,然后查看结果树( 从结果可以看出,先交替子控制器的样例,再交替父控制器下的样例。大家明白了吧),如下图所示:

4.1.3忽略子控制器块

  在交替控制器的设置界面,有这样一个选项,是否忽略子控制器,所以这里一般也是交替控制器作为父级控制器时使用的选项,这里的子控制器一般指非交替控制器的其他控制器 (如果子控制器也是交替控制器,该项实际和交替控制器的嵌套效果一样了)

1、下面,我们在交替器下添加一个循环控制器,设置循环次数 2,线程组循环次数设置为 3,设置交替器 勾选 忽略子控制器,如下图所示:

循环控制器:

线程组:

交替控制器:

2、 配置好以后,运行JMeter,然后查看结果树( 从结果可以看出,循环控制器没有执行2次,只执行了1次),如下图所示:

3、下面,我们再把交替控制器中 忽略子控制器 去掉勾选,其他设置不变,如下图所示:

4、配置好以后,点击“保存”,运行JMeter,然后查看结果树( 从结果可以看出,循环控制器执行2次,然后再执行 访问度娘-哥弟 取样器这样交替执行了3次),如下图所示:

综上所述:以控制器为1个小单元,交替执行

4.2Once Only Controller

在每个线程内,该控制器下的内容只会被执行一遍,无论循环多少次,都只执行一遍。<嵌套在循环控制器之内时是个例外,每个线程组循环都会被执行一遍>。

此控制器通常用于控制需要登录的请求,测试过程中,我们往往都只需要登录一次,获取到对应的登录信息后即可执行后续相关的请求,而不是每执行一个请求都登录一次,如将login请求放入仅一次控制器,则在线程组循环运行期间,不论循环次数设置为多少次,login请求都将仅在第一次执行时运行

 1、我们先来看看这个Once Only Controller长得是啥样子,路径:线程组 > 添加 > 逻辑控制器 > 仅一次控制器,如下图所示:

2、关键参数说明如下:

Name:名称,可以随意设置,甚至为空;

Comments:注释,可随意设置,可以为空。

4.2.1实例

宏哥这里以博客园发布文章为例,说一下测试场景:正常逻辑是我们需要一次登录博客园然后多次发布文章;而不是发布一次文章就需要登录一次博客园。以此为例添加测试脚本。

1、按照上边的测试场景,宏哥添加测试脚本,如下图所示:

 2、配置好以后,点击“保存”,运行JMeter,然后查看结果树( 从结果可以看出,一次登录博客园然后多次发布文章;而不是发布一次文章就需要登录一次博客园),如下图所示:

4.2.2红色字体实战举例 

<嵌套在循环控制器之内时是个例外,每个线程组循环都会被执行一遍>。

1、保持上边的测试树结构,然后将 仅一次控制器 用鼠标拖到 循环控制器 里边,如下图所示:

 2、配置好以后,点击“保存”,运行JMeter,然后查看结果树( 从结果可以看出,宏哥设置了3个线程,每个线程都登录一次博客园),如下图所示:

4.3Random Controller

随机控制器节点下的元件随机运行,与交替控制器不一样的是节点下的元件运行顺序不定。

 1、我们先来看看这个Random Controller长得是啥样子,路径:线程组 > 添加 > 逻辑控制器 >  随机控制器,如下图所示:

2、关键参数说明如下:

Name:名称,可以随意设置,甚至为空;

Comments:注释,可随意设置,可以为空;

Ignore sub-controller blocks:忽略子控制器,即子控制器失效,由随机控制器接管,类似交替控制器。

4.3.1简单实例 

1、创建测试计划,随机控制下添加三个请求,控制器外一个请求,线程4个;如下图所示:

2、配置好以后,点击“保存”,运行JMeter,然后查看结果树( 从结果可以看出,宏哥设置了4个线程,每个线程都要访问一次北京宏哥的Jmeter系列文章,但是控制器下边的取样器的访问却是随机访问一个),如下图所示:

4.3.2随机嵌套循环-不忽略子控制器

1、按照小标题的内容,创建测试计划,如下图所示:

2、配置好以后,点击“保存”,运行JMeter,然后查看结果树( 从结果可以看出,宏哥设置了3个线程,随机选择随机控制器下的两个循环控制器),如下图所示:

4.3.3随机嵌套循环-忽略子控制器

1、按照小标题的内容,创建测试计划,如下图所示:

2、配置好以后,点击“保存”,运行JMeter,然后查看结果树( 从结果可以看出,宏哥设置了3个线程,循环控制器也失效了,每次都随机选择一个取样器执行),如下图所示:

4.3.4随机嵌套交替-忽略子控制器

1、按照小标题的内容,创建测试计划,如下图所示:

2、配置好以后,点击“保存”,运行JMeter,然后查看结果树( 从结果可以看出,宏哥设置了10次循环,交替控制器也失效了,每次都随机选择一个取样器执行),如下图所示:

4.4Random Order Controller

随机顺序控制器其节点下的原件随机执行,不过每个元件只执行一次。

当控制器被触发时,将控制器下的所有子节点顺序打乱执行一遍,执行一遍;执行一遍,不是执行一个。

注意:是将子节点的顺序打乱,而非请求的顺序打乱,子节点可以是其他逻辑控制器。

随机控制器与随机顺序控制器名字十分接近,但两者还是有着明显的区别,可参考  上边介绍的随机控制器。

随机控制器为每次只执行节点下的一个子节点,随机顺序控制器是将节点下的所有子节点都正常执行,只是将执行顺序打乱

1、我们先来看看这个Random Order Controller长得是啥样子,路径:线程组 > 添加 > 逻辑控制器 > 随机顺序控制器,如下图所示: 

2、关键参数说明如下:

Name:名称,可以随意设置,甚至为空;

Comments:注释,可随意设置,可以为空。

4.4.1实例

1、创建测试计划,如下图所示: 

2、配置好以后,点击“保存”,运行JMeter,然后查看结果树( 从结果可以看出,宏哥设置了3次循环,每次循环把所有的子节点都执行了),如下图所示: 

4.5Recording Controller

其录制控制器,顾名思义是录制的时候会用到。实际上它是一个位置,当我们用JMeter代理进行录制时,录制的脚本默认放在此控制器的节点下面。没有实际的逻辑作用,我们用简单控制器也可以代替它。由于这个没有用到过,这里宏哥就不做详细介绍了,如果后期用到的话,宏哥会单独写一篇关于录制控制器的文章给小伙伴或童鞋们来答疑解惑。

1、我们先来看看这个Recording Controller长得是啥样子,路径:线程组 > 添加 > 逻辑控制器 > 录制控制器,如下图所示: 

2、关键参数说明如下:

Name:名称,可以随意设置,甚至为空;

Comments:注释,可随意设置,可以为空;

Forever:勾选上这一项表示一直循环下去。

5.小结

 

 好了,今天关于逻辑控制器的上篇就讲解到这里,这一篇主要介绍了 Interleave ControllerOnce Only ControllerRandom Controller  Random Order ControllerRecording Controller

 

您的肯定就是我进步的动力。如果你感觉还不错,就请鼓励一下吧!记得随手点波  推荐  不要忘记哦!!!

别忘了点 推荐 留下您来过的痕迹

 

版权声明:本文为du-hong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/du-hong/p/13091077.html