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.1Critical Section Controller
我们先来看一下,官方原汁原味的解释:The Critical Section Controller ensures that its children elements (samplers/controllers, etc.) will be executed by only one thread as a named lock will be taken before executing children of controller.
宏哥这个二把刀的翻译,给你们翻译一下这段鸟语看看到底是什么意思,大致意思是: Critical Section Controller(临界区控制器),确保它的子元素(samplers /控制器等)在执行控制器的子程序之前只执行一个线程作为指定的锁。呵呵!看到这句话是不是觉得一头雾水啊,摸一摸自己所剩无几的头发陷入沉思中.....没有关系的,不要纠结了,宏哥后边会用具体实例讲解一下,看完实例后,再回过头来阅读这句话,你就会恍然大悟了。
1、我们先来看看这个Critical Section Controller长得是啥样子,路径:线程组 > 添加 > 逻辑控制器 > 临界部分控制器,如下图所示:
2、关键参数说明如下:
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空;
Lock name:锁名称,这里可以填入其子节点下执行的线程的名称,这个线程作为一个全局锁存在
4.1.1实例讲解
这部分主要是通过配合实例我们来理解一下开始那句话到底什么意思。
1、宏哥这里先说一个访问宏哥博客园的JMeter系列文章的测试场景:我们第一步首先要访问博客园的首页,第二步找到宏哥的访问宏哥博客园的首页,第三步点击JMeter类别。按顺序完成三步,才能完成这个测试场景。那么我们根据这个场景用JMeter来添加多个请求的取样器。如下图所示:
2、脚本调试是通了,运行JMeter,查看结果树,如下图所示:
3、从上个图,查看结果树中显示请求结果数据不是按照顺序请求,不符合预期,这个时候增加一个critical section controller(临界部分控制器),增加一个锁,就能控制执行顺序。如下图所示:
4、脚本调试是通了,运行JMeter,查看结果树,可以清楚地看出来是按预期的顺序执行请求的。但是这样响应时间会过长,这个后边再做讲解。如下图所示:
4.1.2锁名分类
(1)锁名为空,认为每个锁为不同的锁
1、宏哥通过具体实例,来看一下,创建锁名为空的临界部分控制器,如下图所示:
2、运行JMeter,查看结果树,如下图所示:
(2)锁名相同,多个锁认为是同一个锁,同一个时间点只能存在一个运行中
1、宏哥通过具体实例,来看一下,创建锁名相同的临界部分控制器,如下图所示:
2、运行JMeter,查看结果树,如下图所示:
(3)锁名为变量,根据变量值来判断是不是属于同一个锁,变量值为相同时,则认为是同一个锁
1、宏哥通过具体实例,来看一下,创建锁名为变量的临界部分控制器,如下图所示:
2、运行JMeter,查看结果树,如下图所示:
4.2ForEach Controller
ForEach 控制器:一般搭配用户变量使用。依次调用用户定义的变量,直到最后一个,结束循环。为了满足ForEach Controller提取数据,变量命名的格式一般为“变量名_数字”,其中数字从1开始。
1、即遍历循环控制器,顾名思义是定义一个循环规则。
2、用来遍历当前元素的所有可执行场景。
3、在用户自定义变量中读取一系列相关的变量,该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值。
4、这个控制器一般配合配置元件 → 正则表达式提取器来一起使用,可对页面上的某些元素进行重复处理。
1、我们先来看看这个ForEach Controller长得是啥样子,路径:线程组 > 添加 > 逻辑控制器 > ForEach控制器,如下图所示:
2、关键参数说明如下:
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空;
Input variable prefix:输入变量前缀,可以在“用户自定义变量”中定义一组变量,循环控制器可以从中获取到变量对应的值,然后作为循环控制器的循环条件,还可以输出变量作为取样器的参数。
Start index for loop:循环变量下标起点。循环指数开始(唯一)→ 遍历查询的变量范围,开始的值(这里如果不填写,默认从 1 开始,如果没有 1 开始的变量,执行时会报错)
End index for loop:循环变量下标终点。循环指数结束(包含)→ 遍历查询的变量范围,结束的值
Output variable name:输出变量名称,循环控制器生成的变量名称。后续可通过${}引用
Add "_" before number ?: 变量前缀后是否加“_”作为分隔符。如果定义的变量名中有下划线的话就要勾选此项,否则找不到;反之,没有的话不要勾选,否则同样找不到变量
4.2.1实例讲解
1、首先在自定义5个前缀为 北京宏哥 的变量,值分别为 a b c d e。并且 北京宏哥 后面的数字是连续的,如果不连续,则不会被循环到,如下图所示:
2、配置ForEach控制器,如下图所示:
3、添加请求 访问博客园首页 + 输出值:${宏哥},输出值是在控制器的输出变量 宏哥,通过 ${宏哥} 取到输出变量的值,如下图所示:
4、添加查看结果树,运行JMeter,查看结果树,如下图所示:
注意:敲黑板,敲脑袋!!!
1、输入变量的后缀数值一定要连续,比如 北京宏哥_1, 北京宏哥_2, 北京宏哥_3 ... 这样,如果中间有不连续的,循环会中断
2、循环开始的设定:如果变量为北京宏哥_1, 北京宏哥_2, 北京宏哥_3,而设定的开始为 1,则会从北京宏哥_2 开始循环
3、循环结束的设定:如果变量有3个 北京宏哥_1, 北京宏哥_2, 北京宏哥_3,而设定的结束为5,则只会循环 北京宏哥_1, 北京宏哥_2, 北京宏哥_3 ,如果设定的结束为2,则会循环 北京宏哥_1, 北京宏哥_2 。
4.3Include Controller
Include控制器用来导入外部的测试片段(非完整的测试计划),在执行时会执行导入的测试计划,但是被导入的测试计划有特殊要求,它不能有线程组,只能包含简单的控制器及控制器下的元件。换句话说就是相当于加了一个执行单元,一个封装了的业务操作单元,类似我们程序开发中的函数(方法)一样。例如一个查询学生信息的业务操作我们用取样器来模拟,然后放到简单控制器中作为一个执行单元,别的地方也要用到时,我们可以不用重复造轮子直接引用过来。
一般来说,Include控制器和测试片段(Test Fragment)配合使用的比较常见。
1、我们先来看看这个include Controller长得是啥样子,路径:线程组 > 添加 > 逻辑控制器 > Include控制器,如下图所示:
2、关键参数说明如下:
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空;
Filename:文件名,必输字段,如果没有,就会报错。通过Filename的路径和文件名引用外部的jmx文件。
宏哥推荐小伙伴或者童鞋们可以将 Include控制器 与 Module控制器(传送门)一起对比着学习,Include控制器 是从外部文件引用,只能引用整个测试片段的内容,Module控制器 是从内部文件中引用,引用上相对比较灵活,可以只引用部分测试片段或模块内容。这样一内一外不仅容易理解也容易记忆和学习。
4.3.1实例
(1)当Filename路径的值为空,程序执行报错,脚本执行中止,不会继续执行下面的脚本内容。
1、首先创建一个Filename路径为空的测试计划,如下图所示:
2、运行JMeter,查看结果树(程序执行报错,脚本执行中止,不会继续执行下面 访问博客园首页 的取样器),如下图所示:
(2)当Filename路径中的文件不存在,程序直接弹窗报错并停止执行。
1、首先创建一个Filename路径中的文件不存在的测试计划,点击“保存”按钮的时候,就会直接弹窗报错。如下图所示:
(3)当Filename路径的文件中不包含测试片段,跳过控制器,继续向下执行。
1、首先创建一个外部引用没有测试片段的测试计划,如下图所示:
2、创建一个Filename路径的文件中不包含测试片段的测试计划,将上边的外部引用-无测试片段文件添加到Include控制器中,如下图所示:
3、运行JMeter,查看结果树(跳过控制器,继续向下执行 访问博客园首页 的取样器),如下图所示:
(3)当Filename路径的文件中包含测试片段,执行完控制器,再继续向下执行。
1、首先创建一个外部引用有测试片段的测试计划,如下图所示:
2、创建一个Filename路径的文件中包含测试片段的测试计划,将上边的外部引用-有测试片段文件添加到Include控制器中,如下图所示:
3、运行JMeter,查看结果树(执行完控制器里的测试片段,再继续向下执行 访问博客园首页 的取样器),如下图所示:
到这里,大家应该理解了 Include Controller 和 Test Fragment 了吧。宏哥的理解就是,Test Fragment 相当于一个独立的部分,可以被其他测试计划引用,实现 样例的片段化,模块化,遇到重复需要的,比如登录、注册之类的,就可以用Test Fragment 和 Include Controller 了。这样可以避免重复造轮子,做许多无用功。
5.小结
好了,今天关于逻辑控制器的上篇就讲解到这里,这一篇主要介绍了 Critical Section Controller、ForEach Controller和Include控制器。
您的肯定就是我进步的动力。如果你感觉还不错,就请鼓励一下吧!记得随手点波 推荐 不要忘记哦!!!
别忘了点 推荐 留下您来过的痕迹
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.简介 监听器用来监听及显示JMeter取样器测试结果,能够以树.表及图形形式显示测试结果,也可以以文件方式保存测试结果,JMeter测试结果文件格式多样,比如XML格式.CSV格式.默认情况下,测 ...
- Jmeter(十三) - 从入门到精通 - JMeter定时器 - 上篇(详解教程)
1.简介 用户实际操作时,并非是连续点击,而是存在很多停顿的情况,例如:用户需要时间阅读文字内容.填表.或者查找正确的链接等.为了模拟用户实际情况,在性能测试中我们需要考虑思考时间.若不认真考虑思考时 ...
- Jmeter(八) - 从入门到精通 - JMeter配置元件(详解教程)
1.简介 JMeter配置元件可以用来初始化默认值和变量,读取文件数据,设置公共请求参数,赋予变量值等,以便后续采样器使用.将在其作用域的初始化阶段处理.配置元件(Config Element)提供对 ...
- Jmeter(十七) - 从入门到精通 - JMeter后置处理器 -上篇(详解教程)
1.简介 后置处理器是在发出“取样器请求”之后执行一些操作.取样器用来模拟用户请求,有时候服务器的响应数据在后续请求中需要用到,我们的势必要对这些响应数据进行处理,后置处理器就是来完成这项工作的.例如 ...
- Jmeter(四十四) - 从入门到精通高级篇 - Jmeter远程启动(本地运行+远程运行)(详解教程)
1.简介 这篇文章其实很简单,就是为下一篇文章做一个铺垫,所以宏哥给小伙伴或童鞋们提前热身一下. 2.什么是远程运行? 远程执行,就是脚本放在本地,执行却在另一台电脑上执行,当然,可以是远程多台电脑一 ...
- Jmeter(三十) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy3(详解教程)
1.简介 Badboy为方便自动化数据灵活性,以及脚本的重用,减少工作量:为此提供了脚本参数化的功能,这一篇文章宏哥以度娘搜索的关键字"北京-宏哥"进行参数化为例,宏哥带领你们实战 ...
随机推荐
- Collection接口和list,set子类
Collection接口常用的子接口有:List接口.Set接口List接口常用的子类有:ArrayList类.LinkedList类Set接口常用的子类有:HashSet类.LinkedHashSe ...
- DevOps知识点——3C知多少
CI / CD是任何DevOps操作的两大基石,这是一种开发软件的方式,旨在生产快速而强大的软件,随时以可持续的方式发布更新. 当例行更改代码时,开发周期会更加频繁.更有意义且更快速.通过此过程,我们 ...
- elementUI中el-input输入数字且保留指定小数位
<input type="text" placeholder="请输入保留一位小数的数字" class="user-input user-nam ...
- Remote desktop cannot verify?教你如何应对
远程桌面:IIS7远程桌面IIS7远程桌面管理工具(3389.vps.服务器批量管理.批量远程工具)简介: 1.批量管理WIN系列服务器,VPS,电脑. 2.批量导入服务器的IP,端口,账号和密码 ...
- 【asp.net core 系列】2 控制器与路由的恩怨情仇
0. 前言 在上一篇文章中,我们初步介绍了asp.net core,以及如何创建一个mvc项目.从这一篇开始,我将为大家展示asp.net core 的各种内容,并且尝试带领大家来挖掘其中的内在逻辑. ...
- 学习使用pyquery解析器爬小说
一.背景:个人喜欢在网上看小说,但是,在浏览器中阅读小说不是很方便,喜欢找到小说的txt版下载到手机上阅读,但是有些小说不太好找txt版本,考虑自己从网页上爬一爬,自己搞定小说的txt版本.正好学习一 ...
- Rocket - debug - Example: Write Memory
https://mp.weixin.qq.com/s/on1LugO9fTFJstMes3T2Xg 介绍riscv-debug的使用实例:使用三种方法写内存. 1. Using System Bus ...
- Rocket - diplomacy - LazyModule的实例化
https://mp.weixin.qq.com/s/9PsBt4_4qHx4i6C5XtuiUw 介绍LazyModule和Node构造方法的执行过程,即实例化过程. 1. NullIn ...
- Rocket - config - implicit Parameters
https://mp.weixin.qq.com/s/OH_Z1gdSUpfgM-tjx0OlrA 追溯配置信息的源头. 0. HasRocketCoreParameters Has ...
- Java实现 LeetCode 832 翻转图像(位运算)
832. 翻转图像 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, ...