Jmeter全方面讲解——Jmeter的元件使用介绍:(十)逻辑控制器详解
逻辑控制器有可能会打破Jmeter的执行顺序,Jmeter的逻辑控制器有:事务控制器、循环控制器、仅一次控制器、IF控制器、吞吐量控制器、ForEach控制器、随机控制器、While控制器、Include控制器、Runtime控制器、临界部分控制器、交替控制器、录制控制器、简单控制器、随机顺序控制器、Switch控制器、模块控制器。下面介绍几种控制器的使用。
一:事务控制器
Jmeter会将每个请求默认当为一个事务,但是由于实际业务中,一个事务可能需要好几个请求组成,如转账的事务,需要转出的接口请求正确且转入的接口请求正确才算是事务成功,但凡其中有一个请求出错,转账的事务都不会成功。如果某个事务需要好几个请求组合完成,那么我们就可以拿事务控制器将这些请求包装起来。被包装起来的请求都是正确的,事务控制器才是正确的,其中任何一个请求出错了,事务控制器就出错。
例子:事务控制器下添加了4个Http请求,每个请求都是对百度发起请求,只有每个请求都是通过的,事务控制器才会通过,否则事务控制器都是失败的。
(1)所有请求都正确的情况:
可以看到四个请求都是通过的情况下,事务控制器才是通过的
(2)事务控制器下存在有错误请求的情况:
可以看到只要其中有一个请求发生了错误,那么事务控制器也会错误。
二:循环控制器
我们希望对某个取样器循环请求时,就可以使用到循环控制器。
例子:
(1)为请求添加个循环控制器,循环次数填3
可以看到请求被循环请求了3次。
(2)为请求添加个循环控制器,循环次数选择永远,那么请求就会无休止地不断执行。
可以看到请求会持续不断地执行。
(3)配合线程属性设置,最终的循环次数为:线程数*循环次数*循环控制器次数,下面线程组设置3个线程,3次循环,为请求添加个循环控制器次数填3
可以看到总共执行了27次请求。
三:仅一次控制器
用于控制某个请求在一次脚本执行下只执行一次。
例子:在循环控制器下添加两个请求,其中一个请求用【仅一次控制器】包装起来,那么这个请求只会被执行一次。
可以看到被【仅一次控制器】包裹起来的“HTTP请求2”只被执行了一次。
四:IF控制器
用于控制满足什么条件下,再去执行被包裹起来的请求。该控制器应用范围比较广泛,满足我们日常开发中想要某个请求满足什么条件才能执行的需求。比如:我们希望系统中的所有请求都需要成功登录后才能执行对应请求,希望某个请求需要前一个请求是正确的情况下才执行等需求。
先来介绍下IF控制器的组成部分:
1、Expression:表示我们填入的条件表达式
2、Interpret Condition as Variable Expression:如果勾选,则我们填写的Expression需要借助于__jexl3函数或者__groovy函数,如果不勾选,则直接填写我们的条件表达式即可
3、Evaluate for all children:将该控制器作用域所有子项的取样器,一般不勾选。
4、Use status of last sample:将执行该IF控制器前的最后一个取样器作为判断,如果是通过的就返回真,否则返回false
实例1:借助__jexl3()函数完成表达式编写。先添加一个百度请求,添加后置处理器提取title变量:“百度一下,你就知道”,再添加一个被IF控制器包裹的请求,IF控制器填写表达式:如果${title}变量包含“百度”,则执行,不包含则跳过:
表达式代码:${__jexl3("${title}".contains("百度"),)}
通过该IF控制器,就可以判断${title}变量是否包含“百度”关键字,如果包含则执行被包起来的请求,不包含则跳过,执行结果:
由于${title}包含了“百度”字符串,所以会执行被IF控制器包裹起来的“HTTP请求3”
下面将表达式结果改成false,如图:
由于${title}变量没有包含"百度222"字符串,所以被IF控制器包裹起来的“HTTP请求3”就不会执行,如图:
实例二:不借助于__jexl3()或__groovy()编写表达式,此种方式性能较低,所以我们一般都会借助于__jexl3()或__groovy()编写我们的表达式。
执行结果跟实例一一致,只是性能有所下降:
实例三:使用Use status of last sample:使用执行该IF控制器前的最后一个取样器结果作为判断,如果最后一个取样器通过就返回true,如果失败就返回false。
执行结果:由于前面的取样器是通过的,所以返回true,所以就会执行“HTTP请求3”:
五:while控制器
该控制器就类似于编程语言的while(Boolean boolean)循环控制,比较少用,了解即可。此处有三种情况:
1、什么都不填或者填true:那就相当于while(ture)死循环,请求会持续不断一致执行。
2、填flase:没有意义,永远不会执行被包裹的请求
3、填写具体的表达式,表达式同上面的IF控制器
实例1:表达式填写true
可以看到请求会持续不断执行。
实例2:借助jexl3函数助手填写表达式
由于上面的条件表达式永远都为true,所以也会一直不断执行:
六:吞吐量控制器
该控制器主要用于按照指定比例或者次数执行请求
有两个选项:1、Total Executions:设置请求执行指定次数,这里有几种情况
(1)如果设置的Total Executions次数<线程组设置的线程数*循环次数,那么就会运行此处Total Executions设置的次数
(2)如果设置的Total Executions次数>线程组设置的线程数*循环次数,那么会运行线程数*循环次数
2、Percent Executions:设置请求按照指定比例执行,这里有几种情况
(1)所有吞吐量控制器的比例加起来刚好等于100,则对应执行次数按照线程组*循环次数*Percent Executions次
(2)所有吞吐量控制器的比例加起来不等于100,则还是对应执行次数按照线程组*循环次数*Percent Executions次
(3)如果执行次数按照线程组*循环次数*Percent Executions为整数,则执行次数的请求,如果不为整数,则会向下取整
实例1:按照百分比执行对应请求,线程数设置为3,循环数设置为10,添加3个吞吐量控制器,分别设置的比例为15%,15%,70%
如图:
请求1的执行次数为:3*10*15%=4.5,此处不为整数,要向下取整4次
请求2的执行次数为:3*10*15%=4.5,此处不为整数,要向下取整4次
请求3的执行次数为:3*10*70%=21,此处为整数21,执行21次
执行结果如图:
实例2:按照执行指定次数设置,线程数设置为3,循环数设置为10,添加3个吞吐量控制器,分别设置的请求次数为10,30,40
请求1的吞吐量控制器次数:10<线程数(3)*循环数(10)=30次,所以会执行10次
请求2的吞吐量控制器次数:30=线程数(3)*循环数(10)=30次,所以会执行30次
请求3的吞吐量控制器次数:40>线程数(3)*循环数(10)=30次,所以只会执行30次
执行结果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律