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

news2024/11/27 8:34:38

浅谈逻辑控制器之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.coloradmin.cn/o/1874912.html

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

相关文章

行业推荐!IG5216量产工具下载,IG5216开卡软件分享

国内固态硬盘常用,且有量产工具流传出来的主控厂商包括慧荣、群联、点序、英韧、得一微、瑞昱、联芸、迈威、国科、华澜微等等。 每个主控需要用各自对应的量产工具,不同的量产工具支持的闪存颗粒也有差异,因此要根据固态硬盘实际的主控型号…

Charles抓包工具系列文章(三)-- 接口映射工具(Map Remote和Map Local)

一、背景 前文的http请求都是静态的,像compose a new request,仅适用于接口的自测。 回放repeat 一个 http 请求,也无法做到动态调试。 这里的动态还是静态,是站在客户端的角度,数据是实时的,可调试的。 …

【R语言】plot输出窗口大小的控制

如果需要输出png格式的图片并设置dpi,可采用以下代码 png("A1.png",width 10.09, height 10.35, units "in",res 300) 为了匹配对应的窗口大小,在输出的时候保持宽度和高度一致即可,步骤如下: 如上的“10…

Verilog进行结构描述(四):Verilog逻辑强度(strength)模型

目录 1.Verilog提供多级逻辑强度。2.基本单元强度说明语法3.信号强度值系统4.Verilog多种强度决断 微信公众号获取更多FPGA相关源码: 1.Verilog提供多级逻辑强度。 逻辑强度模型决定信号组合值是可知还是未知的,以更精确的描述硬件的行为。下面这些情…

【ONLYOFFICE深度探索】:ONLYOFFICE桌面编辑器8.1震撼发布,打造高效办公新境界

文章目录 一、功能完善的PDF编辑器:解锁文档处理新维度二、幻灯片版式设计:释放创意,打造专业演示三、改进从右至左显示:尊重多元文化,优化阅读体验四、新增本地化选项:连接全球用户,跨越语言障…

Redis--18--Redis Desktop Manage下载与安装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Redis Desktop Manage1.官网下载https://redis.io/insight/ 2.安装方法3.使用方法3.1.进入RedisDesktopManager的主界面3.2 新建连接3.3 支持操作 Redis Desktop Ma…

面试-JMM的内存可见性

1.JAVA内存模型 分析: 由于JVM运行程序的实体是线程,而每个线程创建时,JVM都会 为其创建一个工作内存(栈空间),用于存储线程私有的数据。而java内存模型中规定所有变量都存储在主内存中。主内存是共享内存区域,所有线程都可以访问…

标准版回收站的商品怎么删除?

管理后台/维护/数据维护/清除数据 里面就可以清空回收站的商品

ElasticSearch-Windows系统ElasticSearch(ES)的下载及安装

前言 下载ElasticSearch 可以进入ElasticSearch官方下载地址,选择与电脑系统相对应的版本;博主已经上传资源,或者点此直接免费下载,本次演示版本为8.14.1。 注意: Elasticsearch 5 需要 Java 8 以上版本;…

VMware连接不到网络

我使用VMware创建了一个虚拟机,但是连接不到网络,试了很多网上的办法,但是还是没有解决问题,最后换了个思路,终于解决,下面分享解决方法: 1. 新解决思路 首先打开虚拟机(我用的是u…

python使用动态属性访问JSON类数据,Get it!

目录 1、基础访问:内置json模块 📦 1.1 json.loads转换字符串 1.2 动态属性访问技巧 2、面向对象方式处理JSON 🛰️ 2.1 创建JSON数据模型类 2.2 动态属性与方法绑定 3、类型安全: 数据类(dataclasses)应用 🔒 3.1 数据类基础 3.2 自动从JSON解构数据 3.3 动态…

一文把 RAG 每步的技术难点说明白

当前,百度智能云云数据库特惠专场开始!热销规格新用户免费使用,欢迎参与! 大模型效果让人惊艳,但是还是存在知识更新不及时,容易幻觉,没有内部知识的原因,所以带火了 RAG 技术。 根…

DiskGeniusV5.6.0.1565发布!

DiskGenius是一款功能强大的磁盘管理和数据恢复工具,V5.6.0.1565上线。新版本变化比较大,增加新的功能,修正已经问题,值得试一下。提醒大家,磁盘管理软件涉及数据安全,请始终使用最新版本! 下面…

变“回锅肉”专场的《歌手2024》,是不是高开低走了?

《歌手2024》播出已经过半,似乎出现了高开低走的不妙趋势。 6月26日,《歌手》节目组官宣第八期节目的补位歌手为谭维维,曾主动“请战”的她再次回到了《歌手》舞台,实力歌手加入节目按理说是件好事,却意外并未受到观众…

LangGPT:高质量提示词框架

题目:LangGPT: Rethinking Structured Reusable Prompt Design Framework for LLMs from the Programming Language作者: Ming Wang; Yuanzhong Liu; Xiaoming Zhang; Songlian Li; Yijie Huang; Chi Zhang; Daling Wang; Shi Feng; Jigang LiDOI: 10.48550/arXiv.2…

【知识图谱系列】(实例)python操作neo4j构建企业间的业务往来的知识图谱

本章节通过聚焦于"金额"这一核心属性,构建了一幅知识图谱,旨在揭示"销售方"与"购买方"间的商业互动网。在这张图谱中,绿色节点象征着购买方,而红色节点则代表了销售方。这两类节点间的紧密连线&…

【PyQt】20-动态显示时间(QTimer)

QTimer 前言一、QTimer介绍二、动态时间展示2.1 代码2.2 运行结果 总结 前言 好久没学习了。 一、QTimer介绍 pyqt里面的多线程可以有两种实现方式: 一、QTimer 二、QThread 多线程:同时完成多个任务。 定时器就是每隔一段时间调用一次。 二、动态时…

划重点!炒伦敦金看k线图的要点

对于刚刚开始参与伦敦金交易,还在学习如何看K线的投资者来说,掌握一些看k线图的要点,对于更好地分析市场的行情走势,找到有利的入场机很有帮助,以下是一些关键的建议,希望能够供大家参考。 K线有阳线和阴线…

一加12搞机(kernelsu+lsposed)

刷机 温馨提示:如果你不知道root的意义在哪,建议不要解锁和root,到时候救砖或者回锁都挺麻烦。 刷全量包 最新版的系统没有更新推送,所以去一加社区[0]找了个全量包来刷,。安装方式可以看帖子里的内容,说…

容器化spring boot应用程序

容器化spring boot应用程序有多种方式,如基于简单的Dockerfile,多阶段Dockerfile以及基于Docker Compose等,我们将逐步给大家介绍,本节主要介绍基于简单的Dockerfile进行容器化spring boot的应用程序。 创建Spring boot应用程序 …