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.1Runtime Controller

运行控制器用来控制其子元件的执行时长。市场单位是秒。

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

2、关键参数说明如下:

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

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

Runtime:默认为1,去掉1则默认为0,此时不执行其节点下的元件。 与线程组中的调度器的持续时间 效果一致。不填 或 0,不会执行样例

4.1.1Runtime控制器控制其下取样器执行2s

1、创建测试计划,设置 Runtime 控制器的运行时间 为 2,线程组设置默认不变,如下图所示:

Runtime 控制器设置

线程组设置

2、配置好以后,运行JMeter,然后查看结果树,如下图所示:

4.1.2使用线程组中的调度器控制样例运行3s

1、创建测试计划,设置 Runtime 控制器的运行时间 为 2,线程组设置运行时间3,如下图所示:

线程组设置

Runtime 控制器设置

2、配置好以后,运行JMeter,然后查看结果树,如下图所示:

线程组设置3,Runtime控制器设置2,但是运行时间是2s。所以从上边的运行时间得出结论:如果线程组中设置了持续时间,Runtime 控制器也设置了 运行时间,那么会优先于线程组中的设置。

4.2Simple Controller

Simple Controller用来指定了一个执行单元,它不改变元件的执行顺序。在它下边还可以嵌套其他控制器。简单控制器可以编辑只有名称和注释。就像他的名字一样,简单,可以理解为一个文件夹,就是分组用的,没有其他特殊功能,但相比不添加简单控制器,区别在于简单控制器可以被模块控制器所引用。其作用就是分组,比如QQ好友列表,可分为家人、同学、等。一般是请求较多,需要分组时采用。

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

2、关键参数说明如下:

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

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

4.2.1简单实例

1、创建测试计划,线程组设置循环10,如下图所示:

2、配置好以后,运行JMeter,然后查看结果树,如下图所示:

4.3Throughput Controller

用来控制其下元件的执行次数,并无控制吞吐量的功能,想要控制吞吐量可以使用Constant Throughput Timer,后边会讲解到。吞吐量控制器有两种模式:Total Executions:设置运行次数与Percent Executions:设置运行比例(1~100之间)。

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

2、关键参数说明如下:

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

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

Total Executions:执行百分比(1-100);

percent Executions:执行数量;

Throughput:根据上边选择的方式填写,百分比为0~100;

Per User:线程数,当选Total Executions时,是线程数;当选percent Executions时,是线程数*循环次数。
4.3.1不勾选Per User

1、线程组中设置 线程数量 2,循环次数 10,吞吐量控制器 设置 Total Executions,吞吐量设置为 2,其下添加一个取样器,如下图所示:

2、配置好以后,运行JMeter,然后查看结果树(执行了2次),如下图所示:

3、现在将 吞吐量控制器 设置为百分比的控制方式,吞吐量设置为:50%,如下图所示:

4、配置好以后,点击“保存”运行JMeter,然后查看结果树(执行了10次,计算方式:10=吞吐量50% * 循环次数10 * 线程数 2),如下图所示:

4.3.2勾选Per User

1、线程组中设置 线程数量 2,循环次数 10,吞吐量控制器 设置 Total Executions,吞吐量设置为 2,其下添加一个取样器,勾选Per User,如下图所示:

线程组设置

吞吐量控制器

2、配置好以后,点击“保存”,运行JMeter,然后查看结果树(总共执行了4次,其中吞吐量设置为2,执行2次,线程设置为2,执行2次,总共4次),函数 __threadNum 只是简单地返回当前线程的编号,如下图所示:

3、现在将 吞吐量控制器 设置为百分比的控制方式,吞吐量设置为:50,如下图所示:

4、配置好以后,点击“保存”运行JMeter,然后查看结果树(执行了10次,计算方式:10=吞吐量50% * 循环次数10 * 线程数 2),如下图所示:

综上所述:

勾选Per User:

1.线程数*循环次数>=线程数*吞吐量时,Total Executions模式的执行次数=线程数*吞吐量。

2.线程数*循环次数<线程数*吞吐量时,Total Executions模式的执行次数=当线程数*循环次数。

不勾选Per User:

1.线程数*循环次数<=吞吐量时,Total Executions模式的执行次数=线程数*循环次数。

2.线程数*循环次数>吞吐量时,Total Executions模式的执行次数=吞吐量。

l Percent Executions:设置运行比例(1~100之间),单位为%

不管Per User是否勾选,按Percent Executions模式的执行次数都不受Per User影响,Percent Executions模式的执行次数=线程数*循环次数*吞吐量%。(循环次数=线程组循环次数*循环控制器循环次数)

l Per User:勾选该项的话则按虚拟用户数(线程数)来计算执行次数,不勾选则按所有虚拟用户数来计算执行次数

测试计划
序号 线程数 循环次数 模式 Throughput Per User 执行次数
1 2 10 Percent 50 Y 10
2 2 10 Percent 50 N 10
3 2 10 Total 7 Y 14
4 2 10 Total 7 N 7
5 2 2 Total 7 Y 4
6 2 2 Total 7 N 4

下面说明一下这6个场景:
(1)序号1和2场景,Per User 对总执行次数没有影响。
(2)序号3场景,Per User勾选,每个虚拟用户(线程)执行7次,共执行14次。
(3)序号4场景,Per User不勾选,则所有虚拟用户执行7次。
(4)序号5场景,Per User勾选,每个虚拟用户(线程)执行7次,共执行14次,由于Thread Group计划循环次数是4(2线程*2循环)次,所以最多只能执行4次。
(5)序号6场景,Per User不勾选,所有虚拟用户执行7次,由于Thread Group计划循环次数是4(2线程*2循环)次,所以最多只能执行4次。

4.4Module Controller

模块控制器可以快速的切换脚本,不用来回的新建,方便脚本调试。

可以理解为引用、调用的意思,执行内容为Module To Run种所选的内容,引用范围为当前测试计划内的测试片段、逻辑控制器<模块控制器除外>
被引用的逻辑控制器、测试片段可以为禁用状态,被引用后仍然会被执行。
可以将模块控制器与包括控制器一起学习比较,模块控制器是从内部文件中引用,引用上相对比较灵活,可以只引用部分测试片段或模块内容,包括控制器是从外部文件引用,只能引用整个测试片段的内容。
注意:被应用的模块位置不可随意变更,变更后会执行时出现提示引用失败
找到目标元素:快速查找与跳转的作用,点击后会立即跳转到所选的逻辑控制器的内容详情

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

2、关键参数说明如下:

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

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

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

4.4.1实例

1、创建测试计划,添加两个测试片段,并且在每个测试片段下添加一个取样器,然后,添加线程组,再添加模块控制器,最后添加查看结果树,如下图所示:

2、配置模块控制器,选择第一个测试片段,如下图所示:

3、配置好以后,点击“保存”运行JMeter,然后查看结果树(执行了第1个测试片段的取样器),如下图所示:

4、配置模块控制器,选择第二个测试片段,如下图所示:

5、配置好以后,点击“保存”运行JMeter,然后查看结果树(执行了第2个测试片段的取样器),如下图所示:

4.5Switch Controller

Switch Controller:开关控制器,通过其下样例顺序数值或名称 控制执行某一个样例。

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

2、关键参数说明如下:

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

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

Switch Value:指定请求的索引或者名称,索引从0开始,如果没有赋值,或者索引超过请求个数的话就执行第0个请求。可以是数字,也可以是字符,为字符时匹配取样器名称,如果匹配不上就会默认并找取样器名称为default的取样器,如果没有则不运行。

4.5.1数值

数值:表示将执行其下第 数值+1个取样器,例如:填1,将执行第2个取样器;填0或者不填,将执行第1个取样器;数值超出其下取样器数目时,执行第1个取样器。

1、创建一个测试计划,设置线程组和Switch控制器,如下图所示:

线程组

Switch控制器

2、配置好以后,点击“保存”运行JMeter,然后查看结果树(执行了第3<数值+1>个取样器),如下图所示:

3、修改Switch控制器的数值为0或者不填,如下图所示:

4、配置好以后,点击“保存”运行JMeter,然后查看结果树(执行了第1<数值为0或者不填,执行第1个取样器>个取样器),如下图所示:

4.5.2字符

1、创建一个测试计划,设置线程组和Switch控制器(直接使用取样器名字),如下图所示:

线程组

Switch控制器

2、配置好以后,点击“保存”运行JMeter,然后查看结果树(执行了使用名字的取样器),如下图所示:

5.小结

好了,今天关于逻辑控制器的上篇就讲解到这里,这一篇主要介绍了 Runtime Controller 、 Simple Controller 、Throughput ControllerModule Controller 和  Switch Controller

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

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

Jmeter(十二) - 从入门到精通 - JMeter逻辑控制器 - 终篇(详解教程)的更多相关文章

  1. Jmeter(十六) - 从入门到精通 - JMeter前置处理器(详解教程)

    1.简介 前置处理器是在发出“取样器请求”之前执行一些操作.如果将前置处理器附加到取样器元件,则它将在该取样器元件运行之前执行.前置处理器最常用于在取样器请求运行前修改其设置,或更新未从响应文本中提取 ...

  2. Jmeter(十八) - 从入门到精通 - JMeter后置处理器 -下篇(详解教程)

    1.简介 后置处理器是在发出“取样器请求”之后执行一些操作.取样器用来模拟用户请求,有时候服务器的响应数据在后续请求中需要用到,我们的势必要对这些响应数据进行处理,后置处理器就是来完成这项工作的.例如 ...

  3. Jmeter(二十二) - 从入门到精通 - JMeter断言 - 下篇(详解教程)

    1.简介 断言组件用来对服务器的响应数据做验证,常用的断言是响应断言,其支持正则表达式.虽然我们的通过响应断言能够完成绝大多数的结果验证工作,但是JMeter还是为我们提供了适合多个场景的断言元件,辅 ...

  4. Jmeter(十四) - 从入门到精通 - JMeter定时器 - 下篇(详解教程)

    1.简介 用户实际操作时,并非是连续点击,而是存在很多停顿的情况,例如:用户需要时间阅读文字内容.填表.或者查找正确的链接等.为了模拟用户实际情况,在性能测试中我们需要考虑思考时间.若不认真考虑思考时 ...

  5. Jmeter(十九) - 从入门到精通 - JMeter监听器 -上篇(详解教程)

    1.简介 监听器用来监听及显示JMeter取样器测试结果,能够以树.表及图形形式显示测试结果,也可以以文件方式保存测试结果,JMeter测试结果文件格式多样,比如XML格式.CSV格式.默认情况下,测 ...

  6. Jmeter(四) - 从入门到精通 - 创建网络测试计划(详解教程)

    1.简介 在本节中,您将学习如何创建基本的 测试计划来测试网站.您将创建五个用户,这些用户将请求发送到JMeter网站上的两个页面.另外,您将告诉用户两次运行测试.因此,请求总数为(5个用户)x(2个 ...

  7. Jmeter(三十二) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy5(详解教程)

    1.简介 这一篇文章,宏哥主要想讲解一下,录制完脚本不是就完事了,我们有时候还需要断言,看结果是否和我们预期的结果一致.这在测试中都是很重要的.用句老话说:只看结果不看过程. 2.录制脚本 想要断言, ...

  8. Jmeter(十五) - 从入门到精通 - JMeter导入自定义的Jar包(详解教程)

    1.简介 原计划这一篇是介绍前置处理器的基础知识的,结果由于许多小伙伴或者童鞋们在微信和博客园的短消息中留言问如何引入自己定义的Jar包呢???我一一回复告诉他们和引入插件的Jar包一样的道理,一通百 ...

  9. Jmeter(六) - 从入门到精通 - 建立数据库测试计划(详解教程)

    1.简介 在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,因此这篇文章宏哥主要介绍了jmeter连接和创建数据库测试计划的过程,宏哥在文中通过示例和代码非 ...

随机推荐

  1. mysql排序,同样的语句 查询结果不一样的问题

    一个项目,某段数据顺序出现异常导致运行异常.早期没有问题,用开发版本也没有问题,同样的查询排序语句在mysql客户端执行也没有问题. 这个排序不一致问题,这里记录下. 如下查询语句,根据‘order’ ...

  2. Spring_AOP_AspectJ支持的通知注解

    1.AOP前奏: 使用动态代理解决日志需求 ArithmeticCalculator.java package com.aff.spring.aop.helloworld; public interf ...

  3. C# 根据BackgroundWoker异步模型和ProgressBar控件,自定义进度条控件

    前言 程序开发过程中,难免会有的业务逻辑,或者算法之类产生让人能够感知的耗时操作,例如循环中对复杂逻辑处理;获取数据库百万乃至千万级数据;http请求的时候等...... 用户在使用UI操作并不知道程 ...

  4. PriorityBlockingQueue 和 Executors.newCachedThreadPool()

    1.PriorityBlockingQueue里面存储的对象必须是实现Comparable接口. 2.队列通过这个接口的compare方法确定对象的优先级priority. 规则是:当前和其他对象比较 ...

  5. 使用turtle库绘制渐变的圆

    import turtle as t t.pensize(3) t.pencolor("blue") t.penup() t.fd(-250) t.seth(0) t.pendow ...

  6. (Java实现) 洛谷 P1036 选数

    输入输出格式 输入格式: 键盘输入,格式为: n,k x1,x2,x3-xn 输出格式: 屏幕输出,格式为: 11个整数(满足条件的种数). 输入输出样例 输入样例#1: 4 3 3 7 12 19 ...

  7. Java实现 LeetCode 647 回文子串(暴力)

    647. 回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "a ...

  8. Java实现约瑟夫斯问题

    1 问题描述 引用自<算法设计与分析基础>第三版: 约瑟夫斯问题,是以弗拉瓦斯.约瑟夫斯(Flavius Josephus)的名字命名的.约瑟夫斯是一个著名的犹太历史学家,参加并记录了公元 ...

  9. java实现 洛谷 P1464 Function

    import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.S ...

  10. java实现第五届蓝桥杯六角幻方

    六角幻方 里面的*在编写的时候会自动编译成线,这里就用代码的格式把题目弄过来 把 1 2 3 ... 19 共19个整数排列成六角形状,如下: * * * * * * * * * * * * * * ...