浅谈逻辑控制器之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,一经查实,立即删除!

相关文章

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

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

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

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

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…

专业报考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 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.…

JVM专题八:JVM如何判断可回收对象

在JVM专题七&#xff1a;JVM垃圾回收机制中提到JVM的垃圾回收机制是一个自动化的后台进程&#xff0c;它通过周期性地检查和回收不可达的对象&#xff08;垃圾&#xff09;&#xff0c;帮助管理内存资源&#xff0c;确保应用程序的高效运行。今天就让我们来看看JVM到底是怎么定…

Element UI搭建使用过程

本章内容基于上一篇---Vue-cli搭建项目基础版 Vue-cli搭建项目----基础版-CSDN博客 官网地址:Element - The worlds most popular Vue UI framework 介绍:完全基于Vue.js ,用于快速搭建用户界面. 第一步:安装ElementUI 在终端输入 npm i element-ui -S 在main.js输入 …

Mac提示此电脑不能读取您插的磁盘的原因,Mac磁盘无法读取内容怎么处理

为了能在不同设备中快速传输大容量的文件&#xff0c;我们常常会使用到外接磁盘进行文件的传输。但由于各种原因&#xff0c;比如硬件、文件系统格式等问题&#xff0c;Mac电脑插磁盘会出现无法读取的问题。本文会介绍Mac提示此电脑不能读取您插的磁盘的原因&#xff0c;以及Ma…

MySQL之可扩展性(八)

可扩展性 负载均衡 负载均衡的基本思路很简单:在一个服务器集群中尽可能地平均负载量。通常的做法是在服务器前端设置一个负载均衡器(一般是专门的硬件设备)。然后负载均衡器将请求的连接路由到最空闲的可用服务器。如图显示了一个典型的大型网站负载均衡设置&#xff0c;其中…

ONLYOFFICE 8.1 桌面编辑器测评:引领数字化办公新潮流

目录 前言 下载安装 新功能概述 1.PDF 编辑器的改进 2. 演示文稿中的幻灯片版式 3.语言支持的改进 4. 隐藏“连接到云”板块 5. 页面颜色设置和配色方案 界面设计&#xff1a;简洁大方&#xff0c;操作便捷 性能评测&#xff1a;稳定流畅&#xff0c;高效运行 办公环…

【python】一篇文零基础到入门:快来玩吧~

本笔记材料源于&#xff1a; PyCharm | 创建你的第一个项目_哔哩哔哩_bilibili Python 语法及入门 &#xff08;超全超详细&#xff09; 专为Python零基础 一篇博客让你完全掌握Python语法-CSDN博客 0为什么安装python和pycharm&#xff1f; 不同于c&#xff0c;c&#xff0…

HBuilder X 小白日记01

1.创建项目 2.右击项目&#xff0c;可创建html文件 3.保存CtrlS&#xff0c;运行一下 我们写的内容&#xff0c;一般是写在body里面 注释的快捷键&#xff1a;Ctrl/ h标签 <h1> 定义重要等级最高的(最大)的标题。<h6> 定义最小的标题。 H标签起侧重、强调的作用…

Socket编程详解(一)服务端与客户端的双向对话

目录 预备知识 视频教程 项目前准备知识点 1、服务器端程序的编写步骤 2、客户端程序编写步骤 代码部分 1、服务端FrmServer.cs文件 2、客户端FrmClient.cs文件 3、启动文件Program.cs 结果展示 预备知识 请查阅博客http://t.csdnimg.cn/jE4Tp 视频教程 链接&#…