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

前言

在之前的博文“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.mzph.cn/diannao/41644.shtml

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

相关文章

《C++20设计模式》外观模式

文章目录 一、前言二、实现1、UML类图2、实现 一、前言 一句话总结外观模式&#xff1a;简化接口&#xff0c;或者简化流程。&#x1f642; 相关代码可以在这里&#xff0c;如有帮助给个star&#xff01;AidenYuanDev/design_patterns_in_modern_Cpp_20 二、实现 原来需要很…

动手学深度学习(Pytorch版)代码实践 -循环神经网络-54~55循环神经网络的从零开始实现和简洁实现

54循环神经网络的从零开始实现 import math import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2l import matplotlib.pyplot as plt import liliPytorch as lp# 读取H.G.Wells的时光机器数据集 batch_size, num_steps 32, …

多特征线性回归

目录 一、多特征符号意义说明&#xff1a;二、多特征模型表示&#xff1a;三、Numpy向量表示、内积计算&#xff1a;1.向量表示&#xff1a;2.内积计算&#xff1a; 四、多元线性回归梯度下降算法&#xff1a; 一、多特征符号意义说明&#xff1a; x下标j&#xff1a;表示第j个…

怎么做外贸推广:10个详细教程和工具

1. 介绍 1.1 什么是外贸推广 外贸推广指的是将产品或服务推广到国际市场的过程。它的主要目的是吸引海外客户&#xff0c;增加销售额&#xff0c;并扩大企业的全球影响力。外贸推广不仅仅是销售产品&#xff0c;它还包括品牌建设、市场研究和客户关系管理。 谷歌外贸推广案例…

机器学习---线性回归

1、线性回归 例如&#xff1a;对于一个房子的价格&#xff0c;其影响因素有很多&#xff0c;例如房子的面积、房子的卧室数量、房子的卫生间数量等等都会影响房子的价格。这些影响因子不妨用 x i x_{i} xi​表示&#xff0c;那么房价 y y y可以用如下公式表示&#xff1a; y …

吴恩达机器学习 第三课 week3 强化学习(月球着陆器自动着陆)

目录 01 学习目标 02 概念 2.1 强化学习 2.2 深度Q学习&#xff08;Deep Q-Learning &#xff09; 03 问题描述 04 算法中的概念及原理 05 月球着陆器自动着陆的算法实现 06 拓展&#xff1a;基于pytorch实现月球着陆器着陆 07 总结 写在最前&#xff1a;关于强化学习…

python conda查看源,修改源

查看源 conda config --show-sources 修改源 可以直接vim .condarc修改源&#xff0c;

Shell学习——Shell变量

文章目录 Shell变量使用变量只读变量删除变量变量类型字符串变量&#xff1a; 在 Shell中&#xff0c;变量通常被视为字符串。整数变量&#xff1a; 在一些Shell中&#xff0c;你可以使用 declare 或 typeset 命令来声明整数变量。数组变量&#xff1a; Shell 也支持数组&#…

平价猫粮新选择!福派斯鲜肉猫粮,让猫咪享受美味大餐!

福派斯鲜肉猫粮&#xff0c;作为一款备受铲屎官们青睐的猫粮品牌&#xff0c;凭借其卓越的品质和高性价比&#xff0c;为众多猫主带来了健康与美味的双重享受。接下来&#xff0c;我们将从多个维度对这款猫粮进行解析&#xff0c;让各位铲屎官更加全面地了解它的魅力所在。 1️…

【三】ubuntu24虚拟机集群配置免密登陆

文章目录 环境背景1. 配置域名映射2. 配置免密登录2.1 在每台机器上生成SSH密钥对&#xff1a;2.2 将公钥分发到其他机器&#xff1a;2.2.1 报错问题2.2.2 修复方法 3. 验证免密登录在 ubuntu1 上&#xff1a;在 ubuntu2 上&#xff1a;在 ubuntu3 上&#xff1a; 测试连接 环境…

三级_02_网络系统结构与设计的基本原则

1.下列关于接入技术特征的描述中&#xff0c;错误的是()。 无线统一网络中AC如果发现某个AP出现故障&#xff0c;将自动调高周围AP的发射功率以覆盖出现的空洞 ADSL技术具有非对称带宽特性 APON是一种无线接入技术 Cable Modem利用频分复用的方法将信道分为上行信道和下行信…

Linux系统的服务——以Centos7为例

一、Linux系统的服务简介 服务是向外部提供对应功能的进程&#xff0c;其运行在系统后台&#xff0c;能够7*24小时持续不断的提供外界随时发来的服务请求&#xff0c;且服务进程常驻在内存中&#xff0c;具有固定的端口号&#xff0c;通过端口号就能找到服务内容。 提供服务的一…

【PB案例学习笔记】-27制作一个控制任务栏显示与隐藏的小程序

写在前面 这是PB案例学习笔记系列文章的第27篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gite…

柯西施瓦茨不等式证明过程

柯西-施瓦茨不等式&#xff08;Cauchy-Schwarz Inequality&#xff09;是数学分析中的一个重要不等式&#xff0c;它在向量空间、内积空间等多个领域都有广泛应用。对于实数或复数域上的内积空间&#xff0c;柯西-施瓦茨不等式可以表述为&#xff1a; 对于任意向量 u \mathbf…

Android Gradle 开发与应用 (七): Gradle 插件开发与发布

目录 一、概述 二、Gradle插件的基础知识 2.1 Gradle插件的定义 2.2 Gradle插件的种类 2.3 Gradle插件的生命周期 三、开发一个Gradle插件 3.1 创建Gradle插件项目 3.2 编写插件实现 3.3 配置插件元数据 3.4 构建和测试插件 3.5 在项目中应用插件 四、发布Gradle插…

计算机未来大方向的选择

选专业要了解自己的兴趣所在。 即想要学习什么样的专业&#xff0c;如果有明确的专业意向&#xff0c;就可以有针对性地选择那些专业实力较强的院校。 2.如果没有明确的专业意向&#xff0c;可以优先考虑一下院校。 确定一下自己想要选择综合性院校还是理工类院校或是像财经或者…

C语言结构体的相关知识

前言 从0开始记录我的学习历程&#xff0c;我会尽我所能&#xff0c;写出最最大白话的文章&#xff0c;希望能够帮到你&#xff0c;谢谢。 1.结构体类型的概念及定义 1.1、概念&#xff1a; 结构体是一种构造类型的数据结构&#xff0c; 是一种或多种基本类型或构造类型的数…

springboot集成gzip和zip数据压缩传输-满足2k数据自动压缩(适用大数据信息传输)

文章目录 1&#xff09;、springboot的gzip压缩-满足2k数据自动压缩1.1后端压缩1.2前端解压1.3 满足最小响应大小&#xff08;2KB&#xff09;和指定MIME类型的响应进行GZIP压缩yml配置自定义配置或者使用Java配置 2&#xff09;、gzip压缩1.1接口使用-数据压缩发送前端1.2 接口…

Java面试题系列 - 第3天

题目&#xff1a;Java集合框架详解与高效使用策略 背景说明&#xff1a;Java集合框架是Java标准库的重要组成部分&#xff0c;提供了一系列容器类&#xff0c;如List、Set、Map等&#xff0c;用于存储和操作集合数据。熟练掌握集合框架的使用&#xff0c;对于编写高效、健壮的…

机器学习之神经网络

简介 神经网络(Neural Network)是一种模仿人类大脑的机器学习算法,由一系列相互连接的神经元组成。它能够自动学习数据的特征和规律,并对新的输入数据进行预测和分类。 神经网络作为一种模仿生物大脑机制的机器学习算法,其产生和发展主要源于以下几个方面的背景: 对人脑认知…