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.什么是远程运行? 远程执行,就是脚本放在本地,执行却在另一台电脑上执行,当然,可以是远程多台电脑一 ...
随机推荐
- scipy.sparse的一些整理
一.scipy.sparse中七种稀疏矩阵类型 1.bsr_matrix:分块压缩稀疏行格式 介绍 BSR矩阵中的inptr列表的第i个元素与i+1个元素是储存第i行的数据的列索引以及数据的区间索引, ...
- c# 优化代码的一些规则——const 和 readonly[二]
前言 在c# 的世界中,在初学的时候,可能很难区分readonly 和 const,两者都是不可修改. 看到这两个单词,我们想的是,最多他们的区别也不会太大.然后事实却出乎我们的意料. 正文 这两个声 ...
- 转 vue动画总结
使用过渡类名(有进入及出去,适合显示隐藏,需要配合v-if) .v-enter,//进入前 .v-leave-to {//离开后 只需要入场动画 可以把v-leave-to删掉 opacity: 0; ...
- windows环境下Kubernetes及Docker安装(那些坑)
k8s 和 Docker容器技术,当前非常流行的技术. 让人日狗的是, 这套技术栈对CN的donet 程序员不怎么友好.娓娓道来,1. 好多镜像都是需要梯子才能访问: 2. window程序员天生 ...
- raw_input和input
昨天在OJ上做CTF的题目,发现有道python的题目很有意思,让我知道了raw_input和input的区别,并且能干一些别的事情. 官方文档上说,input()相当于eval(raw_input( ...
- 七个生产案例告诉你BATJ为何选择ElasticSearch!应用场景和优势!
本文来源于公众号[胖滚猪学编程],转载请注明出处. 从今天开始,想和你一起死磕ElasticSearch,学习分布式搜索引擎,跟着胖滚猪就对了! 既然是ES的第一课,那么最重要的是让你爱上它!不想说那 ...
- 磨刀-CodeWarrior11生成的Makefile解析
https://mp.weixin.qq.com/s/plvviDFLsLQeg9ZeP_3WMA 一. 简介 Code Warrior 11是基于Eclipse CDT开发的集成开发环境(IDE ...
- Java实现 LeetCode 500 键盘行
500. 键盘行 给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词.键盘如下图所示. 示例: 输入: ["Hello", "Alaska", & ...
- Java实现 蓝桥杯VIP 算法训练 整数平均值
题目描述 编写函数,求包含n个元素的整数数组中元素的平均值.要求在函数内部使用指针操纵数组元素,其中n个整数从键盘输入,输出为其平均值. (样例说明:5为输入数据的个数,3 4 0 0 2 是以空格隔 ...
- java实现平面4点最小距离
已知平面上若干个点的坐标. 需要求出在所有的组合中,4个点间平均距离的最小值(四舍五入,保留2位小数). 比如有4个点:a,b,c,d, 则平均距离是指:ab, ac, ad, bc, bd, cd ...