Jmeter(十一) - 从入门到精通 - JMeter逻辑控制器 - 下篇(详解教程)
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 Controller、Once Only Controller、Random Controller 、 Random Order Controller和Recording Controller。
您的肯定就是我进步的动力。如果你感觉还不错,就请鼓励一下吧!记得随手点波 推荐 不要忘记哦!!!
别忘了点 推荐 留下您来过的痕迹

Jmeter(十一) - 从入门到精通 - JMeter逻辑控制器 - 下篇(详解教程)的更多相关文章
- Jmeter(一) - 从入门到精通 - 环境搭建(详解教程)
1.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态和动态资源的性能,例如:静态文件, ...
- Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)
1.简介 Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”. 意思 ...
- Jmeter(十) - 从入门到精通 - JMeter逻辑控制器 - 中篇(详解教程)
1.简介 Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”. 意思 ...
- Jmeter(二十一) - 从入门到精通 - JMeter断言 - 上篇(详解教程)
1.简介 最近由于宏哥在搭建自己的个人博客可能更新的有点慢.断言组件用来对服务器的响应数据做验证,常用的断言是响应断言,其支持正则表达式.虽然我们的通过响应断言能够完成绝大多数的结果验证工作,但是JM ...
- Jmeter(十三) - 从入门到精通 - JMeter定时器 - 上篇(详解教程)
1.简介 用户实际操作时,并非是连续点击,而是存在很多停顿的情况,例如:用户需要时间阅读文字内容.填表.或者查找正确的链接等.为了模拟用户实际情况,在性能测试中我们需要考虑思考时间.若不认真考虑思考时 ...
- Jmeter(八) - 从入门到精通 - JMeter配置元件(详解教程)
1.简介 JMeter配置元件可以用来初始化默认值和变量,读取文件数据,设置公共请求参数,赋予变量值等,以便后续采样器使用.将在其作用域的初始化阶段处理.配置元件(Config Element)提供对 ...
- Jmeter(十七) - 从入门到精通 - JMeter后置处理器 -上篇(详解教程)
1.简介 后置处理器是在发出“取样器请求”之后执行一些操作.取样器用来模拟用户请求,有时候服务器的响应数据在后续请求中需要用到,我们的势必要对这些响应数据进行处理,后置处理器就是来完成这项工作的.例如 ...
- Jmeter(三十一) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy4(详解教程)
1.简介 上一篇文章中宏哥给小伙伴或童鞋们介绍讲解了手动添加Variable list的值,而实际工作中Badboy为我们提供了Variable setter工具,让我们不再使用哪一种比较笨拙的方法了 ...
- Jmeter(四十四) - 从入门到精通高级篇 - Jmeter远程启动(本地运行+远程运行)(详解教程)
1.简介 这篇文章其实很简单,就是为下一篇文章做一个铺垫,所以宏哥给小伙伴或童鞋们提前热身一下. 2.什么是远程运行? 远程执行,就是脚本放在本地,执行却在另一台电脑上执行,当然,可以是远程多台电脑一 ...
随机推荐
- 你还不懂 Tomcat 的优化吗?
前言 Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet.JSP 程序的首选.相信大家对于 Tomcat 已经是非常熟悉了,本 ...
- EF用导航熟悉遍历从表时,删除主表出错
var entitys= Repository.Table.Where(a => ids.Contains(a.UUID)).ToList(); entitys.ForEach(a => ...
- 附件1:setTimeout与闭包
我在详细图解作用域链与闭包一文中的结尾留下了一个关于setTimeout与循环闭包的思考题. 利用闭包,修改下面的代码,让循环输出的结果依次为1, 2, 3, 4, 5 for (var i=1; i ...
- JVM调优总结(六)-新一代的垃圾回收算法
垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限.但是他无法解决的一个问题,就是Full GC所带来的应用暂停.在一些对实时性要 ...
- 函数:exit()
函数名: exit() 所在头文件:stdlib.h(如果是"VC6.0"的话头文件为:windows.h) 功 能: 关闭所有文件,终止正在执行的进程. exit(1)表示异常退 ...
- Java IO(十九)PrintStream 和 PrintWriter
Java IO(十九)PrintStream 和 PrintWriter 一.介绍 (一).PrintStream PrintStream 是打印输出流,它继承于FilterOutputStream. ...
- Java实现 LeetCode 530 二叉搜索树的最小绝对差(遍历树)
530. 二叉搜索树的最小绝对差 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值. 示例: 输入: 1 \ 3 / 2 输出: 1 解释: 最小绝对差为 1,其中 2 ...
- Java实现 POJ 2749 分解因数(计蒜客)
POJ 2749 分解因数(计蒜客) Description 给出一个正整数a,要求分解成若干个正整数的乘积,即a = a1 * a2 * a3 * - * an,并且1 < a1 <= ...
- Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
算法提高 特殊的质数肋骨 时间限制:1.0s 内存限制:256.0MB 问题描述 农民约翰母牛总是产生最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们.农民约翰确定他卖给买方的是 ...
- Java实现 LeetCode 18 四数之和
18. 四数之和 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target ...