浅谈逻辑控制器之ForEach控制器

浅谈逻辑控制器之ForEach控制器

ForEach控制器是一个非常实用的功能,它允许用户遍历某个变量的所有值,并为每个值执行控制器内的子采样器或逻辑。这对于处理从先前请求(如CSV Data Set Config、JSON Extractor、Regular Expression Extractor等)中提取的多个变量值特别有用。

简介

组件名称:ForEach Controller
功能:遍历指定的变量集合中的所有值,并为每个值独立执行一次控制器内的操作。

使用场景

  1. 数据驱动测试:当需要使用从响应中提取的一系列值来驱动后续请求时,例如遍历从一个列表中获取的所有用户ID进行登录测试。
  2. 结果处理:处理CSV文件或数据库查询返回的多行数据,对每一行数据执行相同的测试步骤。
  3. 参数化测试:动态地将一组变量值应用于同一测试场景的不同迭代中。

配置说明

在JMeter中添加ForEach控制器很简单,以下是配置步骤和关键参数解释:

  1. 右键点击测试计划、线程组或任何其他控制器,选择“添加” > “逻辑控制器” > “ForEach控制器”。
  2. 配置ForEach控制器:
    ○ 名称(Name):控制器的名称,用于标识。
    ○ 输入变量前缀(Input Variables Prefix):输入变量前缀。这是你希望遍历的变量的名称前缀。例如,如果你使用正则表达式提取器设置了变量名为userId_1、userId_2等。
    ○ 开始循环字段(不包含):循环的起始索引,通常情况下保持默认值0即可。
    ○ 结束循环字段(含):循环的结束索引(包含)。留空表示遍历所有匹配的变量值。
    ○ 输出变量名称(Output Variable Name):输出变量名。这是ForEach控制器为每次循环分配的新变量名,用于在控制器内部访问当前遍历到的值。
    ○ 数字之前加上下划线“”

示例说明

我们编写如下脚本
在这里插入图片描述
线程组:设置默认
BeanShell 取样器1:编写如下代码

String s1 = "test1";
String s2 = "test2";
String s3 = "test3";
String s4 = "test4";
String s5 = "test5";
String s6 = "test6";
vars.put("val1",s1);
vars.put("val2",s2);
vars.put("val3",s3);
vars.put("val_4",s4);
vars.put("val_5",s5);
vars.put("val_6",s6);
log.info(s1);
log.info(s2);
log.info(s3);
log.info(s4);
log.info(s5);
log.info(s6);

BeanShell 取样器2:编写如下代码

log.info("New val:${newVal}");

forEach控制器参数如下:
● 输入变量前缀:val
● 输出变量名称:newVal

情况1:开始循环字段和结束循环字段都为空,不勾选数字之前加上下划线"_"

运行脚本,查看结果

2024-06-25 12:04:03,414 INFO o.a.j.e.StandardJMeterEngine: All thread groups have been started
2024-06-25 12:04:03,416 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-25 12:04:03,416 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-25 12:04:03,417 INFO o.a.j.u.BeanShellTestElement: test3
2024-06-25 12:04:03,419 INFO o.a.j.u.BeanShellTestElement: test4
2024-06-25 12:04:03,419 INFO o.a.j.u.BeanShellTestElement: test5
2024-06-25 12:04:03,420 INFO o.a.j.u.BeanShellTestElement: test6
2024-06-25 12:04:03,420 INFO o.a.j.u.BeanShellTestElement: New val:test1
2024-06-25 12:04:03,421 INFO o.a.j.u.BeanShellTestElement: New val:test2
2024-06-25 12:04:03,421 INFO o.a.j.u.BeanShellTestElement: New val:test3
2024-06-25 12:04:03,422 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-1

情况2:开始循环字段和结束循环字段都为空,勾选数字之前加上下划线"_"

运行脚本,查看结果

2024-06-25 12:04:39,283 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2024-06-25 12:04:39,283 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-25 12:04:39,283 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-25 12:04:39,283 INFO o.a.j.u.BeanShellTestElement: test3
2024-06-25 12:04:39,283 INFO o.a.j.u.BeanShellTestElement: test4
2024-06-25 12:04:39,283 INFO o.a.j.u.BeanShellTestElement: test5
2024-06-25 12:04:39,283 INFO o.a.j.u.BeanShellTestElement: test6
2024-06-25 12:04:39,283 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-1

变量未进行识别

情况3:开始循环字段和结束循环字段分别为0和3,不勾选数字之前加上下划线"_"

运行脚本,查看结果

2024-06-25 12:05:48,968 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2024-06-25 12:05:48,970 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-25 12:05:48,974 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-25 12:05:48,974 INFO o.a.j.u.BeanShellTestElement: test3
2024-06-25 12:05:48,975 INFO o.a.j.u.BeanShellTestElement: test4
2024-06-25 12:05:48,975 INFO o.a.j.u.BeanShellTestElement: test5
2024-06-25 12:05:48,975 INFO o.a.j.u.BeanShellTestElement: test6
2024-06-25 12:05:48,977 INFO o.a.j.u.BeanShellTestElement: New val:test1
2024-06-25 12:05:48,977 INFO o.a.j.u.BeanShellTestElement: New val:test2
2024-06-25 12:05:48,977 INFO o.a.j.u.BeanShellTestElement: New val:test3
2024-06-25 12:05:48,977 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-1

情况4:开始循环字段和结束循环字段分别为3和6,勾选数字之前加上下划线"_"

运行脚本,查看结果

2024-06-25 12:06:25,076 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2024-06-25 12:06:25,076 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-25 12:06:25,076 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-25 12:06:25,076 INFO o.a.j.u.BeanShellTestElement: test3
2024-06-25 12:06:25,076 INFO o.a.j.u.BeanShellTestElement: test4
2024-06-25 12:06:25,076 INFO o.a.j.u.BeanShellTestElement: test5
2024-06-25 12:06:25,076 INFO o.a.j.u.BeanShellTestElement: test6
2024-06-25 12:06:25,076 INFO o.a.j.u.BeanShellTestElement: New val:test4
2024-06-25 12:06:25,076 INFO o.a.j.u.BeanShellTestElement: New val:test5
2024-06-25 12:06:25,076 INFO o.a.j.u.BeanShellTestElement: New val:test6
2024-06-25 12:06:25,076 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-1

注意事项

● 确保在ForEach控制器之前正确设置了变量提取器,并且已经成功提取到了期望的变量值。
● 如果你的变量命名不遵循一致的前缀规则,ForEach控制器可能无法正确识别并遍历它们。
● 考虑到性能,如果遍历的变量数量非常大,可能会对测试执行时间和资源消耗产生影响。
通过合理利用ForEach控制器,可以极大地增强JMeter测试脚本的灵活性和效率,特别是在处理动态数据和复杂场景时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/744535.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计工程师在FMEA团队中的职责是什么?

在复杂多变的工程环境中,FMEA(失效模式与影响分析)已成为确保产品质量、提高系统可靠性和降低潜在风险的关键工具。FMEA团队由多个专业领域的专家组成,其中设计工程师作为团队的重要成员,扮演着至关重要的角色。本文&a…

boost asio异步服务器(4)处理粘包问题tlv

粘包的产生 当客户端发送多个数据包给服务器时,服务器底层的tcp接收缓冲区收到的数据为粘连在一起的。这种情况的产生通常是服务器端处理数据的速率不如客户端的发送速率的情况。比如:客户端1s内连续发送了两个hello world!,服务器过了2s才接…

BP神经网络

BP神经网络 BP神经网络是一种多层前馈神经网络,它通过反向传播算法进行训练,旨在最小化损失函数,从而对输入数据进行精确的分类或回归预测。 背景 BP (Back Propagation) 神经网络是1986年由 Rumelhart 和 McClelland 为首的科学家提出的概…

SAP ABAP 之容器

文章目录 前言一、案例介绍/笔者需求二、自定义容器 a.实例化对象 b.自定义容器效果演示 c.Copy Code 三、自适应容器 a.常用 必须 参数理解 b.METRIC 度量单位 c.RATIO 百分比尺寸 d.STYLE 容器…

商业银行流动性创造指标数据集(2005-2022)

数据简介:中文数据库商业银行流动性创造指标参考邓伟等老师(2022)的做法,常备借贷便利与中期借贷便利数据来源于中国人民银行发布的《中国货币政策执行报告》。银行层面的微观指标主要来源于BankScope数据库和CSMAR数据库&#xf…

Spring Cloud Netflix:构建强大微服务生态系统的利器

Spring Cloud Netflix是一组集成框架,它将Netflix的多个开源组件整合到Spring Boot应用程序中,使得构建云原生应用程序变得更加简单。这些组件包括用于服务发现和注册的Eureka,断路器模式的实现Hystrix,用于API网关的Zuul&#xf…

springboot家乡特色推荐系统 LW +PPT+源码+讲解

3系统需求分析 3.1系统功能 通过前面的功能分析可以将家乡特色推荐系统的功能分为管理员和用户两个部分,系统的主要功能包括首页,个人中心,用户管理,文章分类管理,文章分享管理,系统管理等内容。任何用户…

【c语言】二级指针

1,定义 本质还是从指针的角度去理解,只不过存的指针的值 2,使用方法

第三方软件连接虚拟机

第三方软件连接虚拟机 1 查看本机VM(VMware)虚拟机网段2 开启虚拟机系统,修改网卡配置3 重新打开网络并测试连通性4 打开VM虚拟机网络开关5 通过第三方软件建立连接6 可能遇到的问题 1 查看本机VM(VMware)虚拟机网段 子…

38.控制功能实现

上一个内容:37.添加简易的调试功能 以 37.添加简易的调试功能 它的代码为基础进行修改 效果图: 下图红框位置的功能实现 Dlls项目中添加一个Dialog Dialog如下 然后给它添加一个类,MFC添加的类可能会报错添加 #include "afxdialogex.h…

煤矿智能巡检机器人:推动煤矿行业变革的关键力量

目前我国煤炭资源总量达到了2078.85亿吨,已探明储量为1432亿吨,煤矿能源现阶段还是我国重要的基础能源。而煤矿生产作业存在巨大危险,主要包括高温、高压、燃爆和有毒气体等环境因素,同时机械设备运转过程中潜藏着重大风险。这些危…

【Python/Pytorch - 网络模型】-- 高阶SVD算法

文章目录 文章目录 00 写在前面01 基于Python版本的高阶SVD算代码02 HOSVD 的步骤 00 写在前面 高阶奇异值分解(Higher-Order SVD,HOSVD)是一种将传统的奇异值分解(SVD)扩展到高阶张量的方法。它能够将一个高阶张量分…

【摄像头标定】使用kalibr进行双目摄像头标定(ros1、ros2)

使用kalibr进行双目摄像头标定 前言标定板标定①板端准备和录制②上位机准备和标定 前言 本文不是纯用ros1进行标定,需要ros1和ros2通信。给使用ros2进行开发,但又想用kalibr标定双目摄像头的小伙伴一个教程。本文双目摄像头的数据发布使用ros2&#xf…

fork 是一个创建新进程的系统调用

在计算机科学中,fork 是一个创建新进程的系统调用。具体来说,fork 调用会创建一个与当前进程几乎完全相同的副本,包括父进程的内存布局、环境变量、打开的文件描述符等。这个新的进程被称为子进程,而原始进程被称为父进程。 以下…

Spring+Vue项目部署

目录 一、需要的资源 二、步骤 1.首先要拥有一个服务器 2.项目准备 vue: 打包: 3.服务器装环境 文件上传 设置application.yml覆盖 添加启动和停止脚本 ​编辑 安装jdk1.8 安装nginx 安装mysql 报错:「ERR」1273-Unknown collation: utf8m…

springboot网上商城系统的设计与实现-计算机毕业设计源码08789

摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设网上商城系统。 本设…

客户有哪些封装案例,一句克服使用让PCBA工厂泪流满面

作者 | 高速先生成员--王辉东 天空下着雨,萧萧从窗前经过,看窗里。 翠萍那娇艳欲滴的脸上挂着两串泪滴。 萧萧一进去,问啥情况。 翠萍往电脑屏幕一指。 当萧萧看向屏幕一瞬间。 那些曾经以为早已遗忘的伤痛,会在某些时刻如潮…

Gradle学习-2 Groovy

1、Groovy基础语法 1.1、基本数据类型 Groovy支持数据类型:byte, short, int, long, float, double, char (1)创建一个Android Studio项目 (2)在根目录新建一个 leon.gradle,输入以下内容 leon.gradle…

突破Web3红海,DePIN如何构建创新生态系统?

撰文:TinTinLand 本文来源香港Web3媒体Techub News专栏作者TinTinLand 2023 年 DePIN 赛道的火热成为 Web3 行业的重点关注方向,当前如何以可扩展、去中心化、安全方式推动 DePIN 赛道赋能下的 AI 版图建设,寻找更多 Web3 行业创新机遇成为…

【已解决】Python报错:NameError: name ‘Image‘ is not defined

😎 作者介绍:我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun,视频号:AI-行者Sun 🎈 本文专栏:本文收录于《AI实战中的各种bug…