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

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

Switch Controller是Apache JMeter中一个强大的逻辑控制器,它允许用户基于特定的变量值或参数来控制哪些子采样器被执行。与简单地按照配置顺序执行的控制器不同,Switch Controller根据提供的“switch value”来决定执行哪个子元素,这为测试计划提供了高度的灵活性和动态性。

工作原理

Switch Controller的工作机制类似于编程语言中的switch-case语句。它检查一个变量(或属性)的值,并基于这个值来选择执行哪一个子采样器或控制器。如果指定的值与任何一个子元素的名称匹配,则执行该元素;如果不匹配或值为空,则默认情况下不执行任何子元素。

配置步骤

  1. 添加Switch Controller: 在JMeter的测试计划中,右键点击需要放置Switch Controller的父级元素(如线程组),选择“添加” -> “逻辑控制器” -> “Switch Controller”。
  2. 设置Switch Value: 在Switch Controller属性中,可以设置一个变量名或直接提供一个值作为“Switch Value”。这个值通常来自于用户定义的变量、属性或者通过前置处理器(如User Defined Variables, Regular Expression Extractor等)提取的值。
  3. 添加子元素: 根据预期的Switch Value,为每个可能的值添加一个或多个子采样器或控制器,并命名这些子元素以匹配Switch Value。例如,如果Switch Value可能是"login", “search”, 或 “checkout”,则应创建相应命名的子采样器。
  4. 配置子元素: 对每个子元素进行具体配置,包括HTTP请求、定时器、断言等,以满足不同的测试场景需求。

应用实例

情况1:用索引进行业务区分

我们编写如下脚本
在这里插入图片描述
线程组:线程数设置为5,其他保持默认。
BeanShell 取样器:编写如下代码:

//通过函数助手使用Random函数获取一个随机值,数据从0-2
String s = "${__Random(0,2,)}";
//打印这个值
log.info("此次随机数据是:" + s);
//使用swithVal变量获取s的值,变成全局变量,方便后续switch控制器引用
vars.put("swithVal",s);

Switch控制器:Switch Value设置为${swithVal}
BeanShell 取样器1:编写如下代码:

log.info("test1");

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

log.info("test2");

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

log.info("test3");

执行脚本,我们查看JMeter日志如下

2024-06-28 16:58:57,293 INFO o.a.j.u.BeanShellTestElement: 此次随机数据是:0
2024-06-28 16:58:57,294 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-28 16:58:57,487 INFO o.a.j.u.BeanShellTestElement: 此次随机数据是:1
2024-06-28 16:58:57,489 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-28 16:58:57,681 INFO o.a.j.u.BeanShellTestElement: 此次随机数据是:1
2024-06-28 16:58:57,682 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-28 16:58:57,880 INFO o.a.j.u.BeanShellTestElement: 此次随机数据是:1
2024-06-28 16:58:57,881 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-28 16:58:58,081 INFO o.a.j.u.BeanShellTestElement: 此次随机数据是:2
2024-06-28 16:58:58,082 INFO o.a.j.u.BeanShellTestElement: test3

上述内容可以看到,随机值为0时,BeanShell 取样器1执行,随机值为1时,BeanShell 取样器2执行,随机值为2时,BeanShell 取样器3执行,所以Switch控制器下方的索引从0开始

情况2:用取样器名称进行业务区分

我们编写如下脚本
在这里插入图片描述
BeanShell 取样器:编写如下代码:

//通过函数助手使用Random函数获取一个随机值,数据从0-2
String s = "${__Random(0,2,)}";
//取样器名称组装
String sampName = "BeanShell 取样器" + s;
//打印这个值
log.info("此次随机数据是:" + sampName);
//使用swithVal变量获取s的值,变成全局变量,方便后续switch控制器引用
vars.put("swithVal",sampName);

其他设置跟情况1一致,执行脚本,我们查看JMeter日志如下

2024-06-28 17:11:26,541 INFO o.a.j.u.BeanShellTestElement: 此次随机数据是:BeanShell 取样器2
2024-06-28 17:11:26,542 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-28 17:11:26,770 INFO o.a.j.u.BeanShellTestElement: 此次随机数据是:BeanShell 取样器1
2024-06-28 17:11:26,772 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-28 17:11:26,933 INFO o.a.j.u.BeanShellTestElement: 此次随机数据是:BeanShell 取样器2
2024-06-28 17:11:26,934 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-28 17:11:27,131 INFO o.a.j.u.BeanShellTestElement: 此次随机数据是:BeanShell 取样器1
2024-06-28 17:11:27,131 INFO o.a.j.u.BeanShellTestElement: test1

上述内容可以看到,当前Switch Value的值为BeanShell 取样器1时,BeanShell 取样器1执行;当前Switch Value的值为BeanShell 取样器2时,BeanShell 取样器2执行;当前Switch Value的值为BeanShell 取样器3时,BeanShell 取样器3执行

注意事项

● 确保Switch Value所对应的变量或属性已被正确设置并可在执行时获取到。
● 如果没有子元素的名称与Switch Value匹配,Switch Controller默认不执行任何子元素。可以通过勾选“Default"选项并指定一个默认执行的子元素来改变这一行为。
● 使用变量时,注意变量作用域和生命周期,确保在Switch Controller评估时变量已有效赋值。

总结

Switch Controller为JMeter测试脚本提供了动态控制执行流程的能力,使得测试计划能够根据不同的条件灵活地执行不同的测试片段。通过合理利用Switch Controller,测试工程师可以构建更加复杂且适应性强的性能测试场景。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙HCIP应用开发学什么?

HCIP-HarmonyOS Application Developer 课程大纲 一:HarmonyOS 系统介绍 -(3 课时) - 系统及应用场景介绍;HarmonyOS 系统介绍;HarmonyOS 定义 HarmonyOS 特征; - 统- OS,弹性部署&#xff1b…

深度相机识别物体——实现数据集准备与数据集分割

一、数据集准备——Labelimg进行标定 1.安装labelimg——pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple 2.建立相应的数据集存放文件夹 3.打开labelimg,直接在命令行输入labelimg即可,并初始化 4.开始标注,设置标注好…

【高考志愿】自动化

目录 一、专业概述 二、课程设计 三、就业前景与方向 四、志愿填报 五、自动化专业排名 一、专业概述 高考志愿自动化专业选择,无疑是迈向现代化工业与科技发展的一把金钥匙。自动化专业,作为现代工程领域的重要支柱,融合了计算机、电子…

Streams.js:简化 JavaScript 数据流处理

在现代的 Web 开发中,数据流处理是一个常见的需求。从处理用户输入到处理大规模数据集,JavaScript 开发者需要一种有效的方式来处理和转换数据流。Streams.js 是一个优秀的 JavaScript 库,提供了强大的工具来简化数据流处理的复杂性。 什么是…

宝兰德开源多款仓颉产品组件,共筑新语言生态

2024年6月21日下午,华为终端BG软件部总裁龚体先生在华为开发者大会主题演讲《鸿蒙原生应用,全新出发!》中向全球开发者介绍了华为自研仓颉编程语言,并发布了HarmonyOS NEXT仓颉语言开发者预览版。这是华为首次公开发布仓颉编程语言…

【人工智能学习之图像操作(三)】

【人工智能学习之图像操作(三)】 图像滤波滤波概念卷积平滑算子均值滤波高斯滤波中值滤波双边滤波锐化算子USM锐化梯度算子 傅里叶变换直方图直方图直方图均衡化自适应均衡化2D 直方图直方图反向投影 图像滤波 滤波概念 滤波过程就是把不需要的信号频率…

OpenGL系列(六)摄像机

在 OpenGL系列(六)变换 中,一个目标物体经过模型矩阵、观察矩阵和投影矩阵的变换才能正常显示出来,其中模型矩阵主要针对目标物体,它会影响物体的位姿。观察矩阵和投影矩阵主要针对观察者而已,这两个变换决…

Navicat安装与连接教程

navicat 的安装 官网:https://www.navicat.com.cn/ 进入官网之后点击左上角的产品,然后往下滑动就可以看见许多类型,我们使用的是MongoDB数据库,所以就下载Navicat 17 for MongoDB 进入到这里之后,选择自己的系统版本…

J2EE框架之mybatis学习——连接数据库实现查询操作

J2EE框架之mybatis学习——连接数据库实现查询操作 作业要求: 作者:杨建东 关于具体内容我正准备更新至我的CSDN【被瞧不起的神】也可移步我的公众号【猿小馆】 结合老师的课件和黑马程序员的课程学习。 因为我上课老师已经讲过了基本的概念和理解&a…

[leetcode]avoid-flood-in-the-city 避免洪水泛滥

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> avoidFlood(vector<int>& rains) {vector<int> ans(rains.size(), 1);set<int> st;unordered_map<int, int> mp;for (int i 0; i < rains.size(); i) {i…

LabVIEW网络开发资源

在LabVIEW开发中&#xff0c;利用网络资源进行学习和查找资料是提高技能和解决问题的重要途径。以下几个国内外优质资源可以帮助开发者获得丰富的技术支持和交流机会&#xff1a; 1. NI Community (NI社区) 简介: National Instruments官方运营的社区&#xff0c;提供丰富的资…

sql想查询一个数据放在第一个位置

sql想查询一个数据放在第一个位置 背景:比如在查询后台账号的时候想将管理员账号始终放在第一个,其他账号按照创建时间倒序排序, 可以这样写sql: SELECTid,create_time FROMuser ORDER BY CASEWHEN id 1 THEN1 ELSE 2 END ASC, create_time DESC 运行截图: 可以看到id…

[单master节点k8s部署]11.服务service

service service是一个固定接入层&#xff0c;客户端 可以访问service的ip和端口&#xff0c;访问到service关联的后端pod&#xff0c;这个service工作依赖于dns服务&#xff08;coredns&#xff09; 每一个k8s节点上都有一个组件叫做kube-proxy&#xff0c;始终监视着apiser…

专业报考628

目录 掌上高考相关专业两步走 研招网、软科最后 刚才看了&#xff0c;挺有用的育 就是一点&#xff0c; 查找相关专业 掌上高考 如果不知道喜欢什么专业&#xff0c;直接查大学&#xff0c;就查那个大学有什么不是物化强行绑定的 看**招生计划**一栏 如果有明确目标&#xf…

日志可视化监控体系ElasticStack 8.X版本全链路实战

目录 一、SpringBoot3.X整合logback配置1.1 log4j、logback、self4j 之间关系 1.2 SpringBoot3.X整合logback配置 二、日志可视化分析ElasticStack 2.1为什么要有Elastic Stack 2.2 什么是Elastic Stack 三、ElasticSearch8.X源码部署 ​四、Kibana源码部署 五、LogSta…

ffmpeg使用png编码器把rgb24编码为png图像

version #define LIBAVUTIL_VERSION_MAJOR 58 #define LIBAVUTIL_VERSION_MINOR 12 #define LIBAVUTIL_VERSION_MICRO 100 note 不使用AVOutputFormat code void CFfmpegOps::EncodeRGB24ToPNG(const char *infile, const char *width_str, const char *height_str, c…

BigInteger 和 BigDecimal(java)

文章目录 BigInteger(大整数&#xff09;常用构造方法常用方法 BigDecimal(大浮点数&#xff09;常用构造方法常用方法 DecimalFormat(数字格式化) BigInteger(大整数&#xff09; java.math.BigInteger。 父类&#xff1a;Number 常用构造方法 构造方法&#xff1a;BigIntege…

【CSS in Depth 2 精译】2.2.2 使用 rem 设置字号

当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力 2.1.1 响应式设计的兴起 2.2 em 与 rem 2.2.1 使用 em 定义字号2.2.2 使用 rem 设置字号 ✔️ 2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 2.2.2 使…

2663. 字典序最小的美丽字符串 Hard

如果一个字符串满足以下条件&#xff0c;则称其为 美丽字符串 &#xff1a; 它由英语小写字母表的前 k 个字母组成。 它不包含任何长度为 2 或更长的回文子字符串。 给你一个长度为 n 的美丽字符串 s 和一个正整数 k 。 请你找出并返回一个长度为 n 的美丽字符串&#xff0c;…

【CSS in Depth 2 精译】2.2 em 和 rem + 2.2.1 使用 em 定义字号

当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力 2.1.1 响应式设计的兴起 2.2 em 与 rem ✔️ 2.2.1 使用 em 定义字号 ✔️2.2.2 使用 rem 设置字号 2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 2.…