1、什么是逻辑控制器

JMeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”

意思是说,逻辑控制器可以控制采样器(Samplers)的执行顺序。

由此可知,控制器需要和采样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所有采样器,都会当做一个整体,执行时也会一起被执行。

JMeter提供了多种逻辑控制器,它们各个功能都不相同,大概可以分为两种使用类型:

  • 控制测试计划执行过程中,节点的逻辑执行顺序,如:ForEach Controller(ForEach控制器),Loop Controller(循环控制器)、If Controller(如果if控制器)等;
  • 对测试计划中的脚本进行分组,方便JMeter统计执行结果,以及进行脚本的运行时控制等,如:Throughput Controller(吞吐量控制器)、Transaction Controller(事务控制器)等。

2、ForEach控制器介绍

ForEach控制器一般和用户自定义变量一起使用,从用户自定义变量中读取一系列相关的变量。

ForEach控制器遍历读取不同的变量值,来控制其下的采样器或控制器执行一次或多次。

说明:

  1. 从上文中看到了一组数据,就说明这样的数据,通常为一个数组。
  2. 可以使用ForEach控制器遍历循环,说明这组数据有一定的规范和顺序标识。
  3. 看到用户自定义变量,就说明也可以用到参数化,从数据文件中读取数据。同理也可以从之前的请求接口中提取到需要的数据,进行遍历循环。

添加ForEach控制器组件操作:选中“线程组”右键 —> 添加 —> 逻辑控制器 —> ForEach控制器

界面如下图所示:

ForEach控制器组件界面说明:

  • 名称ForEach控制器组件的自定义名称,见名知意最好。
  • 注释:即添加一些备注信息,对该ForEach控制器组件的简短说明,以便后期回顾时查看。
  • 输入变量前缀:输入需要遍历的这一组数据的前缀,例如:appid_1appid_2,则appid就是前缀。
    提示:包括用户自定义变量,或者是参数化文件中的数据都要这样命名才能遍历。
  • 开始循环字段(不包含):循环的起始位置,如填0,实际是从第一个开始。默认为空也可。(亲测可以)
  • 结束循环字段(含):循环结束的位置,如填4,实际第4个不会被使用,只会到第3个。默认为空也可以,程序会循环执行到最后一个变量,再停止。(亲测可以)
  • Add "_" before number ?: 是否在上面输入的变量后增长下划线“_”。例如不勾选此项,变量为appid1appid2...以此类推。勾选此项后,变量名变为appid_1appid_2...以此类推。
    默认为勾选,默认的最好不要动,按照上面的变量名整理数据就好。在日常工作中,看准备数据的情况,来决定是否取消勾选。

Jmeter高级性能测试实战http://Jmeter高级性能测试实战

3、ForEach控制器的使用

我们以一个学院系统为例,完成以下步骤:

  1. 先查询出所有学院的列表。
  2. 把列表中的学院ID都提取出来,也就是得到我们需要一组数据。
  3. 然后使用ForEach控制器,循环遍历这些数据。
  4. 从而根据每个学院ID,单独查看学院的信息。

(1)测试计划内包含的元件

添加元件操作步骤

  1. 创建测试计划。
  2. 创建线程组:选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
  3. 在线程组中,添加取样器”HTTP请求“组件:选中“线程组”右键 —> 添加 —> 取样器 —> HTTP请求
  4. 在取样器中,添加后置处理器“JSON提取器”组件:选中“取样器”右键 —> 添加 —> 后置处理器 —> JSON提取器
  5. 在线程组中,添加逻辑控制器“ForEach控制器”组件:选中“线程组”右键 —> 添加 —> 逻辑控制器 —> ForEach控制器
  6. 在逻辑控制器中,添加取样器“HTTP请求”组件:选中“逻辑控制器”右键 —> 添加 —> 取样器 —> HTTP请求
  7. 在线程组中,添加监听器“察看结果树”组件:选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树

最终测试计划中的元件如下:

点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。

(2)获取学院列表请求内容

标准的Get请求,填写请求的基本要素即可。

如下图所示:

返回的数据为JSON格式的数据,如下图:

(3)JSON提取器内容

JSON提取器需要做的就是把每个学院的ID提取出来,存放到线程变量中,然后提供给后边的请求使用。

编辑内容如下:

我们把变量的名字定义为depid,这样提取出来的变量名就会变为depid_1depid_2,以此类推。

然后使用 JSON PATH 表达式来,提取我们需要的数据。

最后填写-1,表示保存所有提取到的值,0表示随机保存一个提取到的值。

如下图所示:

当然我们也可以使用正则表达式提取器组件来提取我们需要的数据,结果是一样的。

如下图所示:

最后我们可以使用Debug Sampler组件,来查看我们提取的值,是否保存在线程变量中了。

如下图所示:

4)ForEach控制器内容

ForEach控制器中所编写的内容:

  1. 输入变量前缀:就是我们上图中,存在线程变量中数据名称的统一前缀,为depid
  2. 在哪个变量开始遍历循环:0表示从第一个变量开始,因为不包含开头,也就是从depid_1变量开始。也可以默认不填写(亲测可以,但最好还是写上)。
  3. 在哪个变量停止遍历循环:一共有6个变量,因为包含结尾,所以填写6。也可以默认不填写(亲测可以,但最好还是写上)。
  4. 输出变量名称:也就是在其他的请求中,可引用这个变量的名字,我就定义为dep_id

如下图所示:

(5)查看学院请求内容

也是一个标准的Get请求,只需要填写请求的基本信息即可。

然后我们再需要引入数据的地方,进行参数化变量的引用。

因为该请求在ForEach控制器的控制下,所以ForEach控制器每次遍历循环得到的学院ID,都传送到请求里的dep_id变量中,这样就能查看对应的学院信息了。

如下图所示:

5)查看结果

运行脚本,查看结果,如下图所示:

Jmeter高级性能测试实战https://edu.csdn.net/course/detail/35834

性能测试之JMeter中ForEach控制器详解相关推荐

  1. 性能测试之JMeter中JSON断言详解

    JMeter中有个元件叫做断言(Assertion),它的作用和LoadRunner中的检查点类似.用于检查测试中得到的响应数据是否符合预期,用以保证性能测试过程中的数据交互与预期一致. 若接口的返回 ...

  2. jmeter csv参数化_性能测试之Jmeter中如何设置参数化数据

    参数化配置 jmeter中进行参数化设置,右击测试计划或者线程组,add->config element->CSV Data Set Config参数1.png Allow quoted ...

  3. 性能测试之Jmeter中如何设置参数化数据

    参数化配置 jmeter中进行参数化设置,右击测试计划或者线程组,add->config element->CSV Data Set Config参数1.png Allow quoted ...

  4. mybatis中foreach标签详解

    转载自:https://blog.csdn.net/gwd1154978352/article/details/75408498 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一 ...

  5. 性能测试之Jmeter 中 CSV 如何参数化测试数据并实现自动断言

    当我们使用Jmeter工具进行接口测试,可利用CSV Data Set Config配置元件,对测试数据进行参数化,循环读取csv文档中每一行测试用例数据,来实现接口自动化.此种情况下,很多测试工程师 ...

  6. 性能测试之Jmeter元件

    性能测试之Jmeter元件 1.性能测试的本质 性能测试的定义 基于协议模拟用户发请求,对服务器形成一定的负载,来测试服务器的性能指标是否满足用户(产品&公司)的需求. 关注点 时间性能 空间 ...

  7. Jmeter压测工具详解

    Jmeter压测工具详解 1. Jmeter概述 1.1 Jmeter简介 1.2 Jmeter适用场景 2. Jmeter安装配置 2.1 下载安装 2.2 环境配置(可不配) 2.3 Jmeter ...

  8. 学习笔记之-Kubernetes(K8S)介绍,集群环境搭建,Pod详解,Pod控制器详解,Service详解,数据存储,安全认证,DashBoard

    笔记来源于观看黑马程序员Kubernetes(K8S)教程 第一章 kubernetes介绍 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署 ...

  9. Linux中iptraf命令详解(IP局域网监控工具)

    2019独角兽企业重金招聘Python工程师标准>>> Linux中iptraf命令详解(IP局域网监控工具) 发布时间:2017-12-27 20:46:03   作者:佚名    ...

最新文章

  1. Lowest Common Ancestor of a Binary Search Tree(树中两个结点的最低公共祖先)
  2. 用java调用oracle存储过程总结
  3. IDEA 搭建 maven(1)
  4. sparklines图表
  5. Linux里的稀疏文件
  6. stl vector 函数_在C ++ STL中使用vector :: begin()和vector :: end()函数打印矢量的所有元素...
  7. 全局路径规划:图搜索算法介绍3(A stars tie breaker)
  8. 设计模式再学习之简单工厂模式
  9. supervisor常用命令
  10. Linux window查询网络端口
  11. javaERP跨境电商平台,跨境电商源码,电商ERP源码,ERP源码
  12. 计算机丢失dll文件怎么弄,电脑开机提示dll文件丢失怎么办?
  13. 智能随机分组系统(代码带备注)
  14. 分分钟搞定python破解无线wifi
  15. Python 负载均衡,数据轮询 hash字符串 hashlib
  16. RedMonk最新编程语言排行榜;Spring 框架现 RCE 漏洞……|叨资讯
  17. 电力系统的遥测、遥信、遥控、遥调
  18. linux系统触摸板双击,linux下Synaptics触摸板设置双指触摸
  19. (数字图像处理MATLAB+Python)第四章图像正交变换-第一节:离散傅里叶变换
  20. 搜索市场变局:话说云云

热门文章

  1. java验证码技术_java验证码前台技术
  2. Java折叠_[Java教程]Jquery中菜单的展开和折叠
  3. Server 2016DC查看五种AD角色的方法
  4. VMware vSAN 的内部版本号和版本 (2150753)--2020-10-27 更新
  5. OpenStack的八年之痒
  6. Linux学习总结(66)——CentOS7操作系统SSH安全加固
  7. Java基础学习总结(158)——开发Leader如何做CodeReview
  8. Java基础学习总结(65)——Java中的String,StringBuilder和StringBuffer比较
  9. python文字转图片_技能:如何使用Python将文本转为图片
  10. Django 博客开发教程 6 - 真正的 Django 博客首页视图