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

相关文章

上海市计算机学会竞赛平台2023年8月月赛丙组下降幂多项式

题目描述 𝑥x 的 𝑘k 次下降幂定义为 𝑥(𝑘)(𝑥)(𝑥−1)(𝑥−2)⋯(𝑥−𝑘1)x(k)(x)(x−1)(x−2)⋯(x−k1) 𝑥x 的下降幂多项式是由 𝑥x 的一组…

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

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

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

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

【vuejs】 $on、$once、$off、$emit 事件监听方法详解以及项目实战

1. Vue实例方法概述 1.1 vm.$on vm.$on是Vue实例用来监听自定义事件的方法。它允许开发者在Vue实例上注册事件监听器,当事件被触发时,指定的回调函数会被执行。 事件监听:vm.$on允许开发者绑定一个或多个事件到Vue实例上,并且可…

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端口和想要测试的地址

借助 Cloudflare D1 和 Drizzle 在 Astro 上实现全栈

使用 Cloudflare D1 和 Drizzle ORM 将后端添加到 Astro 项目的分步指南 文章目录 安装 Astro添加 Cloudflare 适配器部署到 Pages安装 wrangler 并登录创建 D1 数据库创建 wrangler.toml 文件将 .wrangler 添加到 .gitignore更新 astro.config.ts安装 Drizzle 依赖项创建 driz…

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

队列 一.队列的概念及结构二.顺序队列与链队列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…

Vue的mvvm思想

Vue.js 是一个渐进式 JavaScript 框架,它的核心思想基于 MVVM 模式(Model-View-ViewModel)。MVVM 模式将用户界面(View)与业务逻辑(Model)分离,通过一个中间层(ViewModel…

create-react-app创建的项目中设置webpack配置

create-react-app 创建的项目默认使用的是 react-scripts(存在于node_modules文件夹中)来处理开发服务器和构建,它内置了一些webpack相关配置。一般不会暴露出来给开发者,但是在有些情况下我们需要修改下webpack默认配置&#xff…

使用Python发送电子邮件:轻松实现自动化沟通

哈喽,大家好,我是木头左! 1. 为什么使用Python发送电子邮件? 在当今这个信息爆炸的时代,电子邮件已经成为了日常生活中不可或缺的一部分。无论是工作还是生活,都可能需要通过电子邮件与他人进行沟通。而Python作为一种简单易学、功能强大的编程语言,正逐渐成为了自动化…

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 管道以实现无缝自动化。现在,想象一下这个经过微调的系统被重置为原点,不是因为严重的故障或安全漏洞,而是因为数据…

前端框架海洋:如何破浪前行,寻找你的“黄金舟”

在当今前端开发的世界里,框架和样式库如同繁星,琳琅满目,令人目不暇接。Vue、React、Angular三大巨头稳坐江山,而新兴的Svelte、Solid等后起之秀也不甘示弱,加之各类UI库如Bootstrap、Tailwind CSS、Ant Design等&…