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

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

“While控制器”是一种高级控制结构,它允许用户基于特定条件来循环执行其下的子采样器或控制器,直至该条件不再满足。本文旨在详细介绍While控制器的功能、配置方法、使用场景以及实践示例,帮助测试工程师高效利用这一强大功能进行复杂的测试设计。

While控制器简介

While控制器是JMeter中的一种循环控制机制,与传统的“循环控制器”不同,它不是基于固定的迭代次数来决定循环的终止,而是根据一个可自定义的布尔表达式来动态决定是否继续执行循环内的操作。这意味着只要设定的条件为真(true),控制器就会持续执行其子元素。

配置与使用

设置条件表达式

在While控制器的属性设置中,需要提供一个条件表达式,该表达式基于JMeter函数、变量或任何返回布尔值的逻辑语句。例如,“${myVar}” != “finished” 表示只要变量 myVar 的值不等于 “finished”,循环就会继续,但是仅仅这样编写到while控制器中的逻辑是不会被判断的,不管是不是正确的都是循环,需要套一层函数,比如:${__jexl3(“${myVar}” != “finished”)},才会被判断。

后置处理器与变量管理

为了控制循环条件,经常需要结合后置处理器来更新循环控制变量的值。例如,使用“正则表达式提取器”从响应中提取数据并存储到变量中,然后在While控制器的条件表达式中引用这个变量。

使用场景

动态循环控制

当需要根据服务器响应动态决定测试流程时,如等待某个异步任务完成或检查数据更新状态,While控制器尤为有用。

负载模拟

模拟持续请求直到达到特定状态或条件,例如,不断查询任务状态直到任务完成。

错误处理与重试机制

可以用来实现错误处理逻辑,如在网络不稳定时重试请求,直到成功或达到最大尝试次数。

实践示例

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

String s = "finished";
vars.put("val",s);
log.info(s);

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

log.info("test");

情况1:While控制器输入字符(如abc)、数字(如0、1)、汉字(如测试)

运行脚本,查看结果

2024-06-25 10:14:44,632 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2024-06-25 10:14:44,634 INFO o.a.j.u.BeanShellTestElement: finished
2024-06-25 10:14:44,635 INFO o.a.j.u.BeanShellTestElement: test
……

结论:当输入字符是判定为true

情况2:While控制器输入Boolean类,如true时

运行脚本,查看结果

2024-06-25 10:14:44,632 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2024-06-25 10:14:44,634 INFO o.a.j.u.BeanShellTestElement: finished
2024-06-25 10:14:44,635 INFO o.a.j.u.BeanShellTestElement: test
……

结论:当输入字符是判定为true

情况3:While控制器输入Boolean类,如false时

运行脚本,查看结果

2024-06-25 10:17:34,471 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2024-06-25 10:17:34,472 INFO o.a.j.u.BeanShellTestElement: finished
2024-06-25 10:17:34,473 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-1

结论:当输入字符是判定为false

情况4:While控制器输入表达式是,如样例中表达式为:${__jexl3(“${val}” != “finished”)}

运行脚本,查看结果

2024-06-25 10:34:55,567 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2024-06-25 10:34:55,569 INFO o.a.j.u.BeanShellTestElement: finished
2024-06-25 10:34:55,569 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-1

结论:当输入字符是判定为false

情况5:While控制器输入表达式是,如样例中表达式为:${__jexl3(“${val}” == “finished”)}

运行脚本,查看结果
2024-06-25 10:14:44,632 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2024-06-25 10:14:44,634 INFO o.a.j.u.BeanShellTestElement: finished
2024-06-25 10:14:44,635 INFO o.a.j.u.BeanShellTestElement: test
……

结论:当输入字符是判定为true

注意事项

● 防止无限循环:务必确保条件表达式最终能够变为假,避免测试脚本陷入无限循环。
● 性能考量:频繁的循环检查可能对测试资源造成压力,合理设置循环条件和超时机制。
● 变量作用域:注意变量的作用域,确保While控制器能够访问到所需变量。

结论

While控制器为JMeter提供了强大的循环控制能力,使得测试脚本能够更加灵活地适应各种动态测试需求。通过合理设计条件表达式和管理相关变量,测试工程师可以创建出高度自适应和高效的测试计划。

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

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

相关文章

工信部中小企业局一行莅临盘古信息调研指导

近日,中小企业数字化转型城市试点调研交流活动在广东东莞举行,工业和信息化部中小企业局副局长商超,广东工业和信息化厅二级巡视员张振祥,工业和信息化部中小企业局创业创新处处长李海涛,东莞市委常委、副市长刘光滨&a…

泵设备的监测控制和智慧运维

泵是一种输送流体或使流体增压的机械。它通过各种工作原理(如离心、柱塞等)将机械能转换为流体的动能或压力能,从而实现液体的输送、提升、循环等操作。 泵的一些具体应用场景: 1.智能水务:在城市供水管网中&#xff…

python turtle 002代码表白

代码:pythonturtle002表白资源-CSDN文库 # 作者V w1933423 import turtle import mathdef draw_love():# 创建turtle画笔t turtle.pen()t turtle# 提起画笔,移动到起始位置t.up()t.goto(0, 150)t.down()# 设置颜色并开始填充t.color(red)t.begin_fill…

​中国9大流域地图SHP数据

九大流域片区是指中国境内九个主要流域片区。 分别包括东南诸河区、内陆河区、松辽河流区、海河流域区、淮河流域区、珠江流域片、西南诸河片、长江流域片和黄河流域片等。 如果这九大流域数据对你有用,请在文末查看该数据的领取方法。 中国9大流域图 流域&…

jeecg启动微服务并注册到本地nacos

1、maven勾选环境和微服务模式,并刷新 2、pom文件修改nacos注册地址 3、本地启nacos gateway 和自己想要的cloud下面的模块pos sys 4、打断点测试接口,访问gateway端口和想要测试的地址

【数据结构】线性表之《队列》超详细实现

队列 一.队列的概念及结构二.顺序队列与链队列1.顺序队列2.链队列 三.链队列的实现1.创建队列2.初始化队列3.入队4.出队5.获取队头元素6.获取队尾元素7.队列的大小8.队列的判空9.清空队列10.销毁队列 四.队列的盲区五.模块化源代码1.Queue.h2.Queue.c3.test.c 六.栈和队列必做O…

unity-调用讯飞星火语音唤醒-新版windowsSDK

调用讯飞星火语音唤醒-新版windowsSDK 先贴一张在unity中 wins系统下成功调用新版的讯飞windowsSDK的运行截图 为什么要用讯飞的语音唤醒? 项目中需要在unity和win系统下进行语音唤醒开启语音对话,而语音唤醒比较成熟的方案大多都是在linux系统下的&…

kafka 生产者 API 实践总结

文章目录 前言创建 kafka 生产者同步与异步发送消息同步发送异步发送 生产者参数配置client.idacks消息传递时间 序列化器在Kafka中使用Avro记录 分区标头拦截器配额和节流 前言 kafka 对外提供的 API 主要有两类:生产者 API 和 消费者 API,本文将从Kaf…

Spring中事务的传播机制

一、前言 首先事务传播机制解决了什么问题 Spring 事务传播机制是包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的。 事务的传播级别有 7 个,支持当前事务的:REQUIRED、SUPPORTS、MANDATORY; 不支持当前事务的&…

[Django学习]前端+后端两种方式处理图片流数据

方式1:数据库存放图片地址,图片存放在Django项目文件中 1.首先,我们现在models.py文件中定义模型来存放该图片数据,前端传来的数据都会存放在Django项目文件里的images文件夹下 from django.db import modelsclass Image(models.Model):title models.C…

幻兽帕鲁更新时间 幻兽帕鲁最新更新内容一览

超级缝合怪游戏幻兽帕鲁相信大家都有所了解了,游戏刚出的时候也是引起很大的轰动,吸引了很多玩家,一度登上steam榜首,游戏借鉴了“全球最赚钱IP”任天堂宝可梦的收集神奇生物系统,缝合到更多开放世界游戏玩法里&#x…

【背包题解】DP代表了走到阶段i 的所有路线的最优解

1889:【提高】多重背包(2) 二维费用背包 2075 - 最大卡路里 1928 - 采购礼品 感谢 背包容量:(c) 6 重量 weight 2 2 4 6 2 1 2 3 4 5 价值 value 3 6 5 5 8 1 2 3 4 5 wvdp数组:记录有i件…

使用 GitOps 进行防灾 MinIO

想象一下,您已经花费了无数小时来完善 Docker Swarm 设置,精心设计每项服务,并调整 CI/CD 管道以实现无缝自动化。现在,想象一下这个经过微调的系统被重置为原点,不是因为严重的故障或安全漏洞,而是因为数据…

Python开发日记--手撸加解密小工具(2)

目录 1. UI设计和代码生成 2.运行代码查看效果 3.小结 1. UI设计和代码生成 昨天讨论到每一类算法设计为一个Tab,利用的是TabWidget,那么接下来就要在每个Tab里设计算法必要的参数了,这里我们会用到组件有Label、PushButton、TextEdit、Ra…

【算法】数组-基础知识与应用

一.基础理论 数组是存放在连续内存空间上的相同类型数据的集合。数组可以方便的通过下标索引的方式获取到下标对应的数据。 数组下标都是从0开始的。数组内存空间的地址是连续的 因为数组在内存空间的地址是连续的,所以我们在删除或者增添元素的时候&#xff0c…

【华为HCIA数通网络工程师真题-构建以太网交换网络】

华为HCIA数通网络工程师真题-构建以太网交换网络 一、1-10题 一、1-10题 1、如图所示,四台交换机都运行 STP,各种参数都采用默认值如果交换机C的G0/0/2端口发生阻塞并无法通过该端口发送配置 BPDU,则网络中 blocked 端口多久之后会进入到转发…

【数据结构与算法】动态查找表(二叉排序树,二叉平衡树)详解

二叉排序树的数据结构。 struct TreeNode {ElemType data;TreeNode *left, *right; }; using BiTree TreeNode *;结构体包含三个成员: data 是一个 ElemType 类型的变量,用于存储二叉搜索树节点的数据。left 是一个指向 TreeNode 类型的指针&#xff…

动态规划数字三角形模型——AcWing 1015. 摘花生

动态规划数字三角形模型 定义 动态规划数字三角形模型是在一个三角形的数阵中,通过一定规则找到从顶部到底部的最优路径或最优值。 运用情况 通常用于解决具有递推关系、需要在不同路径中做出选择以达到最优结果的问题。比如计算最短路径、最大和等 注意事项 …

【SAP HANA 35】HANA窗口函数PARTITION BY示例

窗口函数允许对数据进行高级分析和计算,例如排名和累计和。 -- 计算每个员工在其职位组中的工资排名 SELECTFirstName,LastName,Position,Salary,RANK() OVER (PARTITION BY FirstName,LastName ORDER BY Salary DESC) AS Rank FROM Employees;-- 计算每个员工在其…

机器学习-线性回归模型python demo

文章目录 前言机器学习-线性回归模型python demo1. 准备工作2. 实施2.1. 准备样本数据2.2. 创建线性回归模型2.3. 预测新的房价 3. 散点图、线形图 完整demo 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不…