JMeter逻辑控制器可以对元件的执行逻辑进行控制,就像编程一样,实现业务需求。

JMeter包括了以下逻辑控制器:

一共17种。除了仅一次控制器外,其他控制器下可以嵌套别的种类的逻辑控制器。

If Controller

控制此节点下的元件是否运行。

Expression:可以使用变量表达式或JavaScript。

勾选Interpret Condition as Variable Expression表示使用变量表达式,建议勾选上。

Use status of last Sample表示判断上个取样器是否成功,点击后会把${JMeterThread.last_sample_ok}添加到Expression输入框中:

Evaluate for all children:判断条件是否针对所有的子节点,默认不勾选,只在If Controller入口处判断一次,否则每次节点都会进行判断。

Transaction Controller

事务控制器能够帮我们把一堆请求归到一个大的事务中去,在报告分析时更方便。

Generate parent sample:是否生成父取样结果,勾选后有两个效果,一是Aggregate Report会看到Transaction Controller字样,它把节点下的取样器的运行结果(如消耗时间)累加在一起(注意事务控制器下如果有多个取样器,全部取样器都运行成功,整个事务控制器才算成功),比如:

二是View Return Tree中会看到多一个结果,比如:

Include duration of timer and pre-post processors in generated sample:包括定时器和前置-后置处理器的耗时,建议不用勾选,不然会影响统计结果。

Loop Controller

跟线程组的Loop设置一样。最终执行次数 = 线程组执行次数 x 循环控制器执行次数,比如线程组设置3次,循环控制器设置6次,那么控制器下面的元件会执行18次。

While Controller

其子节点下的元件将一直运行直到While条件为false。

Condition:接受变量表达式与变量,比如${inputVar}<10,当inputVar=7时,它的子节点将一直运行下去。

另外提供以下三个常量:

  • Blank:当循环中有取样器失败后停止。
  • LAST:当循环前有取样器失败则不进入循环。
  • Otherwise:当判断条件为false时停止循环。

Critical Section Controller

加锁让多线程顺序执行。

比如,不加锁,3个线程是并行执行的。:

加锁以后,变成顺序执行了:

ForEach Controller

Input variable prefix:输入变量前缀。可以是用户自定义变量里面的多个变量如id_1, id_2, id_3(这里就填写id):

也可以是正则表达式提取器匹配到的多个值(这里就填写varName):

Start index for loop (exclusive):循环变量下标起点(不包括自己)。

End index for loop (inclusive):循环变量下标终点(包括自己)。

Output variable name:输出变量名,比如returnVar,通过${returnVar}引用。

Add "_" before number:变量前缀后是否加“_”作为分隔符。

示例:

Include Controller

类似于程序中的函数,可以把其他.jmx文件包含进来。

被导入的测试计划有特殊要求:不能有线程组,只能包含简单控制器及控制器下的元件

比如一个查询订单的业务操作用Sampler来模拟,然后放到简单控制器中作为一个执行单元,别的地方也要用到时,就可以不重写直接引用过来。

Interleave Controller

其节点下的取样器会交替执行。

比如:

1个线程迭代3次,执行顺序是1 3, 2 3, 1 3。

Ignore sub-controller blocks:不执行子控制器,只执行当前这个交替控制器。比如:

1个线程迭代4次,执行顺序是1, 2, 3, 1,Loop Controller失效。注意,1 2 3是交替执行的,每次迭代只执行其中一个。(如果不勾选,Loop设置为2,那么执行顺序是:1, 2, 3 3, 1)

嵌套的例子:

1个线程迭代5次,执行顺序是:1, 3, 2, 4, 1。

Interleave across threads:跨线程交替运行。比如:

3个线程2次迭代,不勾选的执行顺序:1 2, 1 2, 1 2;勾选的执行顺序:1 2, 2 3, 3 4。

Once Only Controller

其子元件只运行一次。比如只登录一次,只读取一次CSV,只连一次数据库。

注意,子节点放个CSV Data Set Config,可以让每个线程只读一次,然后使用同一条数据进行反复请求。

多个线程是一行一行取值的,不会重复。

比如:

2个线程3次迭代,那么:

  • 线程a只读一次,取到尾号1845这条数据,然后用这条数据迭代请求3次。
  • 线程b只读一次,取到尾号0740这条数据,然后用这条数据迭代请求3次。

Random Controller

节点下的元件随机运行,运行顺序不定。

Ignore sub-controller blocks:不执行子控制器,只执行当前这个交替控制器。

Random Order Controller

节点下的元件随机执行,且每个元件只执行一次。

Recording Controller

没用。

Runtime Controller

用来控制其子元件的执行时长。

Runtime单位为秒,默认为1,去掉1或者设置为0,它的子元件不执行。

Simple Controller

简单控制器很简单,就是用来给Sampler分组的。它指定了一个执行单元,不会改变元件的执行顺序。

示例:

Throughput Controller

控制子元件的执行次数(不能控制吞吐量,想控制吞吐量可以使用Constant Throughput Timer)。

Percent Executions:按执行次数的百分比来计算控制的执行次数,此时Throughput取值是0~100。

Total Executions:按Throughput的值来指定执行次数。

Per User:只对Total Executions生效,勾选后每个线程单独计算,不勾选则所有线程加起来计算。比如2个线程,每个线程迭代10次,Throughput值为6,,勾选Per User则分别计算分别执行6次共12次;不勾选Per User则加起来计算,共执行6次。

Module Controller

在当前测试计划中引入新的测试片段,测试片段由控制器、取样器及辅助元件构成,能够完成负载的模拟。

示例:

把测试片段里面的Loop Controller引了进来。

Module To Run:下拉列表,选择引入哪一个脚本片段(既包括测试片段也包括当前测试计划的控制器)。

Switch Controller

类似于高级语言中的Switch逻辑控制语句。

Switch Value:可以为数字,匹配取样器编号(子节点中取样器编号从0开始),不指定或指定编号超出了子节点数,则运行第0个取样器;也可以为字符,匹配取样器名称,匹配不上就会默认查找名称为default的取样器,如果没有则不运行。

小结

本文对JMeter所有控制器进行了介绍,从这些控制器能感受到JMeter之所以这么流行,是因为它实在太成熟了,这里面的技术需要多少沉淀才能做得出来呀。有时间一定得看看JMeter的源码深度学习下。

参考资料:

《全栈性能测试修炼宝典JMeter实战》

JMeter逻辑控制器完整介绍的更多相关文章

  1. JMeter主要组件介绍

    JMeter主要组件介绍   转自https://www.cnblogs.com/linbo3168/p/6023962.html 作者:linbo.yang 1.测试计划(Test Plan)是使用 ...

  2. Jmeter(十) - 从入门到精通 - JMeter逻辑控制器 - 中篇(详解教程)

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

  3. JMeter—逻辑控制器(六)

    参考<全栈性能测试修炼宝典JMeter实战>第六章 JMeter 元件详解中第一节JMeter逻辑控制器 JMeter逻辑控制器可以对元件的执行逻辑进行控制,除仅一次控制器外,其他可以嵌套 ...

  4. jmeter 逻辑控制器Logic Controller详解

    Jmeter之逻辑控制器(Logic Controller) 前言: 1. Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in w ...

  5. Jmeter系列(2)- Jmeter工具介绍、Jmeter安装目录介绍、Jmeter面板介绍

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html Jmeter支持哪些测试场景? Jme ...

  6. Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

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

  7. Jmeter(十一) - 从入门到精通 - JMeter逻辑控制器 - 下篇(详解教程)

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

  8. Jmeter(十二) - 从入门到精通 - JMeter逻辑控制器 - 终篇(详解教程)

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

  9. jmeter工作目录介绍、jmeter元件及组件介绍

    一.jmeter工作目录介绍: bin:放置各项配置文件(如日志设置.JVM设置).启动文件.启动Jar包.示例脚本等: docs:放置JMeter API的离线帮助文档: extras:JMeter ...

随机推荐

  1. OO Unit3 总结

    OO Unit3 总结 OO课Unit3人际关系网JML应用技术回顾 BUAA.1823.邓新宇 2020/5/23 梳理JML语言的理论基础.应用工具链情况 方法规格 JML中,同一个方法在不同的条 ...

  2. OO第一单元作业总结——表达式求导

    OO第一单元作业总结 第一次作业 基于度量分析代码结构 基本算法 第一次作业是简单多项式导函数求解,不需要对输入数据的合法性进行判定, 基本思想是用 (coeff, expo)表示二元组 coeff* ...

  3. 基于MATLAB的手写公式识别(2)

    基于MATLAB的手写公式识别 图像的预处理(除去噪声.得到后续定位分割所需的信息.) 预处理其本质就是去除不需要的噪声信息,得到后续定位分割所需要的图像信息.图像信息在采集的过程中由于天气环境的影响 ...

  4. 10- JMeter5.1.1 工具快速入门

    什么是JMeter JMeter是Apache组织开发的开源软件,由Java语言实现. 主要用于软件系统性能测试,他最初被设计用于web测试,后来被扩展到其他领域. Jmeter特点 http://w ...

  5. win10 添加全局快捷键

    前言 好久没写博客了,今天水一下 如何在win10 下添加一个全局唤醒的快捷键(打开截图软件) 步骤 win + Q 输入 管理工具 添加快捷方式 这里没有管理员权限,可以直接把创建好的 快捷方式 粘 ...

  6. 对c语言回调函数的理解

    对于回调函数,可以简单的理解为一种特别的函数调用方法,我们可以对比一下回调函数与普通函数在调用方法上的区别. 1. 普通函数调用 一般为实现方在其函数体执行过程中直接调用. 代码示例: #includ ...

  7. 3.逆向分析Hello World!程序-下

    5.继续补充,常用操作指令: Ctrl+G    Go to       移动到指定地址,用来查看代码或内存,运行时不可用 F4        Execute till Cursor 执行到光标位置, ...

  8. 删除自定义服务 寒江孤钓<<windows 内核安全编程>> 学习笔记

    书中第一章 成功启动first服务之后, 发现书中并没有介绍删除服务的方式, SRVINSTW工具中的移除服务功能,也无法找到我们要删除的服务, 于是,搜素了下,发现解决方法如下: 在cmd中输入 & ...

  9. Andrew Ng机器学习算法入门(九):逻辑回归

    逻辑回归 先前所讲的线性回归主要是一个预测问题,根据已知的数据去预测接下来的情况.线性回归中的房价的例子就很好地说明了这个问题. 然后在现实世界中,很多问题不是预测问题而是一个分类问题. 如邮件是否为 ...

  10. (二)SQL语句

    语法规则 不区分大小写,但是建议关键字大写,表名.列名小写 SELECT * FROM user; 支持多行编写sql语言(在SQLyog中可以用F12来快速格式化语句) # 查询cno=20201/ ...