JMeter:循环控制器While Controller的用法小结

news2024/11/20 4:54:50

前言

在之前的博文“JMeter案例优化:测试执行结束后,实现tearDown的几种方式”中,尝试了JMeter的循环控制器While Controller,发现还有点小复杂,将学习过程记录下来,免得遗忘。

注:我使用的是JMeter 5.5

添加While Controller

右击需要添加While Controller的线程组,选择Add->Logic Controller->While Controller

添加成功后,界面如下:

最重要的,就是Condition这个文本框了,循环条件。

循环条件

While Controller的循环条件有三种可能值:空,LAST和表达式,下面将一一举例说明。

1、空:

条件为空时,本循环体中最后一个采样器执行失败时退出。

1.1 循环体内最后一个采样器执行失败的情形

1.1.1 While Controller中添加两个Dummy Sampler,分别命名为11和22
1.1.2 改写22的Response Data,响应中的result字段为1-10的随机数
{"result": "${__Random(1,10,)}"}

1.1.3 22添加JSON Assertion:result <= 7。则当result>7时,断言失败,构造出本采样器失败的情形。
^[0-7]?$

 1.1.4 循环提外添加一个Dummy Sampler,当循环结束后,执行本采样器。

构造完毕,执行一次:

当采样器22的响应为8时,断言失败,循环体内最后一个采样器的执行结果为fail,满足循环结束条件,循环结束。

1.2 循环体内非最后一个采样器执行失败的情形(第一个采样器失败)

 将上例中的11 和 22调换位置,22作为循环体内的第一个采样器,重新执行

可以看到,虽然22已经断言失败了,但是循环继续。因为循环条件仅判断循环体内最后一个采样器的结果。

2、LAST

值为LAST时,有两个条件

1、循环进入条件:若循环体前面的最后一个采样器失败,不进入循环。

2、循环退出条件:当循环体内的最后一个采样器失败时退出;

第2条,与表达式为空时一样。所以我们着重看第一个条件。

2.1 循环体前面的最后一个采样器成功,进入循环

我们将之前的While Controller复制一份,稍加改造

2.1.1 while Controller表达式改为LAST

2.1.2 循环体内仍然是最后一个采样器可能出现失败的情况

2.1.3 循环外的采样器放到循环体前面去,以便构造循环体前面的最后一个采样器成功的情形
2.1.4 循环外的采样器Response Data 修改为
{"result": true}

2.1.5 循环外的采样器添加JSON Assertion:

这样,这个采样器将断言成功,

执行一下

可见,因循环体前面的最后一个采样器执行成功,成功进入循环;

并在循环体内的最后一个采样器执行失败时,退出循环。

2.2 循环体前面的最后一个采样器失败,不进入循环

修改循环外的采样器的Response Data为:

{"result": false}

这样断言将失败,不会进入循环:

3、循环条件为变量、属性或函数,将一直循环,直到循环条件变成false

3.1 变量、属性

 以变量为例,同样,将前面的While Controller复制一份,稍加改造

3.1.1 11的Response Data 修改为
{"result": false}
 3.1.2 11添加JSON Extractor

 3.1.2 While Controller的Condition修改为${result}

执行结果:

1、进入循环,顺序执行11和22采样器

2、再次判断:11采样器的响应result为false,即所获取的变量${result}为false,满足循环退出条件,于是循环结束,没有执行第二轮。

3.2 函数

可以是__jexl3或__groovy函数。当函数的结果为false是,结束循环

比如JMeter案例优化:测试执行结束后,实现tearDown的几种方式中的例子:

${__jexl3(${__time(,)}-${__P(TESTSTART.MS,)}<=10000)}

当执行时间<=10秒时为true,继续循环;

当执行时间>10秒时为false,结束循环 。

Tip:循环次数:

JMeter提供了一个变量__jm__<Name of your element>__idx来统计循环次数,比如下图,循环控制器组件的名称是While Controller-var,便可以通过${__jm__While Controller-var__idx}来获取循环次数

从0开始计数:

不过这个变量作用域仅限于循环体内,出了循环体就不能用了。目前还没想到什么应用场景。

附:__jexl3常用语法总结

${__jexl3(${__Random(0,50,)}==0,)} //数字等于

${__jexl3(${__Random(0,50,)}!=0,)} //数字不等于

${__jexl3("${var}".equals("qwe"),)} //字符串相等

${__jexl3("${var}" eq "qwe",)}

${__jexl3("${var}" == "qwe",)}

${__jexl3(!"${var}".equals("q1we"),)} //字符串不相等

${__jexl3("${var}" ne "qwe1",)}

${__jexl3("${var}" != "qwe",)}

${__jexl3("${var}}".contains("pre"),)} //字符串包含

${__jexl3(!"${var}".contains("pre"),)} //字符串不包含

${__jexl3("${var}".size() < 3,)} //字符串长度,可以用size()或者length(),效果一样

${__jexl3("${var}".size() > 3,)}

${__jexl3("${var}".size() == 3,)}

${__jexl3("${var}".empty(),re)} //字符串为空

${__jexl3(${__Random(0,50,)}==0 || "${var}".contains("pre"),)} //组合条件zhozho

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

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

相关文章

【机器学习】机器学习与自然语言处理的融合应用与性能优化新探索

引言 自然语言处理&#xff08;NLP&#xff09;是计算机科学中的一个重要领域&#xff0c;旨在通过计算机对人类语言进行理解、生成和分析。随着深度学习和大数据技术的发展&#xff0c;机器学习在自然语言处理中的应用越来越广泛&#xff0c;从文本分类、情感分析到机器翻译和…

「ETL趋势」分区支持PostgreSQL、Greenplum、Gauss200, 定时任务支持Kettle

FineDataLink作为一款市场上的顶尖ETL工具&#xff0c;集实时数据同步、ELT/ETL数据处理、数据服务和系统管理于一体的数据集成工具&#xff0c;进行了新的维护迭代。本文把FDL4.1.9最新功能作了介绍&#xff0c;方便大家对比&#xff1a;&#xff08;产品更新详情&#xff1a;…

tobias实现支付宝支付

tobias是一个为支付宝支付SDK做的Flutter插件。 如何使用 你需要在pubspec.yaml中配置url_scheme。url_scheme是一个独特的字符串&#xff0c;用来重新启动你的app&#xff0c;但是请注意字符串“_”是不合法的。 在iOS端&#xff0c;你还需要配置并传入一个universal link。…

PCL 点云压缩算法-Octree空间分割算法

点云压缩 一、概述1.1 算法概念1.2 算法描述1.3 参数解释二、代码实现三、结果示例🙋 效果展示 一、概述 1.1 算法概念 Octree点云压缩算法:是一种用于表示三维空间中的点云数据结构。它将空间划分为一个八叉树,每个节点可以有最多八个子节点,代表了一个正方形的子空间…

jenkins学习

一、jenkins介绍 1.介绍 Jenkins 是一款流行的开源持续集成&#xff08;Continuous Integration&#xff09;工具&#xff0c;广泛用于项目开发&#xff0c;具有自动化构建、测试和部署等功能 2.特点 开源的Java语言开发持续集成工具&#xff0c;支持持续集成&#xff0c;持…

逻辑这回事(八)---- 时钟与复位

时钟设计总结 时钟和复位是FPGA设计的基础&#xff0c;本章总结了一些逻辑时钟复位设计、使用中出现的问题&#xff0c;给出了设计要点&#xff0c;避免后续问题重犯。时钟和复位&#xff0c;本文都先从板级谈起&#xff0c;再到FPGA芯片级&#xff0c;最后到模块级别。仅在此…

Docker-文件分层与数据卷挂载详解(附案例)

文章目录 文件分层数据卷挂载的含义数据卷挂载实践数据卷挂载案例数据卷挂载方式数据卷常用命令容器间数据共享 更多相关内容可查看 文件分层 例&#xff1a;拉取mysql5.7的镜像&#xff0c;在继续拉取mysql5.8的镜像&#xff0c;会出现一部分文件已存在的现象 这种分层技术 是…

昇思MindSpore学习笔记4-04生成式--GAN图像生成

摘要&#xff1a; 记录昇思MindSpore AI框架使用GAN生成式对抗网络模型生成图像的原理和实际使用方法、步骤。包括环境准备、数据集下载、数据加载、隐码、构建生成器与判别器、模型训练、模型推理等。 一、概念 GAN生成式对抗网络模型 (Generative Adversarial Networks) …

停车场小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;车主管理&#xff0c;商家管理&#xff0c;停车场信息管理&#xff0c;预约停车管理&#xff0c;商场收费管理&#xff0c;留言板管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;停车场信息…

IDEA创建Spring项目无法使用Java8的解决方案

文章目录 一&#xff0c;创建Project&#xff0c;无法选择Java81&#xff0c;无法选择Java82&#xff0c;选择JDK17报错 二&#xff0c;原因分析1&#xff0c;Spring Boot将来会全力支持Java17&#xff0c;不再维护支持Java8的版本 三&#xff0c;解决方案1&#xff0c;使用国内…

AndroidKille更新apktool插件-cnblog

AndroidKiller不更新插件容易报错 apktool插件更新 网址 Releases iBotPeaches/Apktool (github.com) 找到apktool管理器 填入apktool位置&#xff0c;并输入apktool名字 选择默认的apktool版本 x掉&#xff0c;退出重启 可以看到反编译完成了 dex2jar 更新 网址 Release…

数据库系统原理 | 查询作业1

整理自博主本科《数据库系统原理》专业课自己完成的实验课查询作业&#xff0c;以便各位学习数据库系统概论的小伙伴们参考、学习。 *文中若存在书写不合理的地方&#xff0c;欢迎各位斧正。 专业课本&#xff1a; ​ ———— 本次实验使用到的图形化工具&#xff1a;Heidisql…

Python酷库之旅-第三方库Pandas(006)

目录 一、用法精讲 10、pandas.DataFrame.to_excel函数 10-1、语法 10-2、参数 10-3、功能 10-4、返回值 10-5、说明 10-6、用法 10-6-1、数据准备 10-6-2、代码示例 10-6-3、结果输出 11、pandas.ExcelFile类 11-1、语法 11-2、参数 11-3、功能 11-4、返回值 …

模型驱动开发(Model-Driven Development,MDD):提高软件开发效率与一致性的利器

目录 前言1. 模型驱动开发的原理1.1 什么是模型驱动开发1.2 MDD的核心思想 2. 模型驱动开发的优势2.1 提高开发效率2.2 确保代码一致性2.3 促进沟通和协作2.4 方便维护和扩展 3. 实现模型驱动开发的方法3.1 选择合适的建模工具3.1.1 UML3.1.2 BPMN3.1.3 SysML 3.2 建模方法3.2.…

SQL注入基础入门

文章目录 前言SQL注入基本操作SQL注入类型分类数字型字符型搜索型xx型Json型数据类型提交的方式 SQL注入的位置分类报错注入报错注入实战案例 SQL注入语句分类insert注入update注入delete注入 编码Tips&#xff1a;Mysql版本区别information_schema数据库详解 其他注入手段宽字…

宿舍报修小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;基础数据管理&#xff0c;论坛管理&#xff0c;故障上报管理&#xff0c;新闻信息管理&#xff0c;维修人员管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;新闻信息…

Java项目:基于SSM框架实现的个人博客网站管理系统分前后台【ssm+B/S架构+源码+数据库+开题报告+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的个人博客网站管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、…

使用vue3+js+ele-plus实现国际化

先看看是不是你想要的 本文只涉及到中文和英文两种语言&#xff0c;若需其他语言请到ele-plus官网进行下载1、首先使用 npm i vue-i18n 命令下载i18n依赖包 npm i vue-i18n 2、在views文件夹内新建一个i18n文件&#xff0c;在i18n文件夹内新建三个文件2.1、新建 zh-cn.…

14-33 剑和诗人7 - 大模型语言和 DBCopilot 方法实现数据民主化

长期以来&#xff0c;数据库一直是海量信息的守护者&#xff0c;但访问这些知识历来是只有拥有专业技术技能的人才能享有的特权。这造成了巨大的知识壁垒&#xff0c;阻碍了数据访问的民主化&#xff0c;并使许多个人和组织无法获得这些存储库中包含的见解。 数据民主化的主要…

Renesas R7FA8D1BH (Cortex®-M85) ADC模块应用

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 FSP和KEIL配置ADC 2.1 ADC硬件接口 2.2 FSP配置ADC 3 软件功能实现 3.1 FSP生成项目 3.2 FSP ADC模块库函数介绍 3.2.1 库函数列表 3.2.2 函数介绍 4 ADC功能代码 4.1 编写代码 4.2 代码…