浅谈逻辑控制器之交替控制器

浅谈逻辑控制器之交替控制器

本文档将详细介绍其中一种重要逻辑控制器——交替控制器 (Interleave Controller),并提供其使用方法和应用场景。

交替控制器概述

交替控制器 (Interleave Controller) 是 JMeter 中的一个高级逻辑控制器,它使你能够按照交替或交错的方式执行其下的子采样器。这意味着,在每个迭代中,控制器会轮流选择不同的子采样器来执行,而不是连续执行所有子采样器或随机选择。这对于需要模拟特定交互模式,比如在会话管理中交替发送不同类型请求的场景特别有用。

使用步骤

  1. 添加交替控制器
    ○ 首先,打开或创建一个新的 JMeter 测试计划。
    ○ 在测试计划中,右击需要添加交替控制器的位置(通常在某个线程组内),选择“添加” -> “逻辑控制器” -> “交替控制器”。

  2. 配置交替控制器
    ○ 默认情况下,交替控制器不需要额外配置即可开始工作。但是,你可以通过勾选特定选项来调整其行为:

    ■ 忽略子控制模块(Ignore Sub-controller Blocks): 当勾选时,控制器下的所有子控制器和取样器将按顺序执行,而非交替执行。
    ■ Interleave Across Threads: 如果你的测试计划包含多个线程,勾选此选项将使得交替执行不仅限于单个线程内,而是跨线程交替执行。这可以用于更复杂的并发测试场景。

  3. 添加子采样器
    ○ 在交替控制器下,右击并选择“添加” -> 你需要的采样器类型(如 HTTP 请求)。根据需要添加多个子采样器,这些采样器将按照交替的顺序执行。

  4. 运行测试
    ○ 配置好线程组和其他必要组件后,启动测试。交替控制器将按照设定的规则执行其下的子采样器。

实例说明

情况1:常规用法

我们编写如下脚本
在这里插入图片描述
线程组:运行次数设置为4,其他保持默认
交替控制器:保持默认
BeanShell 取样器1:编写如下代码:

log.info("test1");

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

log.info("test2");

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

log.info("test3");

运行脚本,我们可以通过Jeter日志看到如下结果

2024-06-27 09:31:31,561 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2024-06-27 09:31:31,576 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 09:31:31,576 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 09:31:31,576 INFO o.a.j.u.BeanShellTestElement: test3
2024-06-27 09:31:31,576 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 09:31:31,576 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-1

情况2:忽略子控制模块(Ignore Sub-controller Blocks)配置

我们编写如下脚本
在这里插入图片描述
线程组:运行次数设置为4,其他保持默认
循环控制器:循环次数设置为3
BeanShell 取样器1:编写如下代码:

log.info("test1");

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

log.info("test2");

1.不勾选Ignore Sub-controller Blocks,运行脚本,我们可以通过Jeter日志看到如下结果

2024-06-27 09:45:27,867 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2024-06-27 09:45:27,867 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 09:45:27,867 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 09:45:27,867 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 09:45:27,867 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 09:45:27,867 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 09:45:27,867 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 09:45:27,883 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 09:45:27,883 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 09:45:27,883 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-1

2.勾选Ignore Sub-controller Blocks,运行脚本,我们可以通过Jeter日志看到如下结果

2024-06-27 09:46:37,954 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2024-06-27 09:46:37,954 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 09:46:37,954 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 09:46:37,954 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 09:46:37,954 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 09:46:37,969 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-1

情况3:Interleave Across Threads配置

我们编写如下脚本
在这里插入图片描述
线程组中线程数设置为3,运行次数设置为4,其他保持默认,其他内容跟情况1中一致

  1. 不勾选Interleave Across Threads,运行脚本,我们可以通过Jeter日志看到如下结果

2024-06-27 11:13:11,905 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2024-06-27 11:13:11,905 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 11:13:11,905 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 11:13:11,905 INFO o.a.j.u.BeanShellTestElement: test3
2024-06-27 11:13:11,921 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 11:13:11,921 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-1
2024-06-27 11:13:11,921 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-1
2024-06-27 11:13:11,966 INFO o.a.j.t.ThreadGroup: Started thread group number 1
2024-06-27 11:13:11,967 INFO o.a.j.e.StandardJMeterEngine: All thread groups have been started
2024-06-27 11:13:12,260 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-2
2024-06-27 11:13:12,261 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 11:13:12,263 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 11:13:12,264 INFO o.a.j.u.BeanShellTestElement: test3
2024-06-27 11:13:12,266 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 11:13:12,267 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-2
2024-06-27 11:13:12,267 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-2
2024-06-27 11:13:12,586 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-3
2024-06-27 11:13:12,586 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 11:13:12,602 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 11:13:12,602 INFO o.a.j.u.BeanShellTestElement: test3
2024-06-27 11:13:12,602 INFO o.a.j.u.BeanShellTestElement: test1

可以看到交替的内容在各自线程组中进行,打印内容从test1>test2>test3>test1
2. 勾选Interleave Across Threads,运行脚本,我们可以通过Jeter日志看到如下结果

2024-06-27 11:14:33,597 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2024-06-27 11:14:33,597 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 11:14:33,597 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 11:14:33,612 INFO o.a.j.u.BeanShellTestElement: test3
2024-06-27 11:14:33,612 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 11:14:33,612 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-1
2024-06-27 11:14:33,612 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-1
2024-06-27 11:14:33,659 INFO o.a.j.t.ThreadGroup: Started thread group number 1
2024-06-27 11:14:33,660 INFO o.a.j.e.StandardJMeterEngine: All thread groups have been started
2024-06-27 11:14:33,956 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-2
2024-06-27 11:14:33,956 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 11:14:33,956 INFO o.a.j.u.BeanShellTestElement: test3
2024-06-27 11:14:33,956 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 11:14:33,956 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 11:14:33,956 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-2
2024-06-27 11:14:33,956 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-2
2024-06-27 11:14:34,284 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-3
2024-06-27 11:14:34,284 INFO o.a.j.u.BeanShellTestElement: test3
2024-06-27 11:14:34,284 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 11:14:34,284 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 11:14:34,284 INFO o.a.j.u.BeanShellTestElement: test3
2024-06-27 11:14:34,284 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-3

可以看到交替的内容在线程组间中进行,打印内容当线程组1-1中循环到test1以后,线程组1-2是从test2开始,而线程组3在由于线程组2是test2结束所以开始以test3开始

应用场景

● 会话管理模拟:例如,在模拟用户登录后交替访问不同页面或功能,以更真实地反映用户的浏览行为。
● API 负载均衡测试:在需要对多个 API 端点进行负载测试时,交替执行请求可以模拟不同服务的并发使用情况。
● 并发用户模拟:当测试应用需要处理来自不同用户的不同类型请求时,交替控制器可以帮助模拟这种交错的请求模式。

注意事项

● 交替控制器的交替行为基于迭代次数,因此确保线程组设置有足够多的迭代以观察到交替效果。
● 在多线程测试中使用“Interleave Across Threads”选项时,注意这可能影响测试结果的可预测性,需谨慎使用。

总结

交替控制器为 JMeter 用户提供了灵活的测试逻辑设计能力,特别是在需要模拟复杂用户行为或系统交互的场景下。通过合理配置,它可以有效地帮助测试人员构建更加贴近现实的应用负载测试方案。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【vue3】【vant】 移动本草纲目案例发布收藏项目源码

更多项目点击👆👆👆完整项目成品专栏 【vue3】【vant】 移动本草纲目案例发布收藏项目源码 获取源码方式项目说明:其中功能包括 项目包含:项目运行环境文件截图 获取源码方式 加Q群:632562109项目说明&am…

应用案例 | Panorama SCADA:开创性的铁路电气控制系统

案例概况 客户:英国铁路网运营商Network Rail 合作伙伴:Telent Technology Services Ltd 应用:实现对铁路牵引电网的高效管理与精准控制 应用产品:宏集Panorama E2 SCADA系统 一、应用背景 英国铁路网运营商Network Rail计划…

谈论Fail2ban+Nginx处理CC攻击和DDOS攻击

前言:Fail2ban 是一款开源的入侵防御软件,用于防止暴力破解和其他形式的恶意攻击。虽然它主要设计用于检测和阻止基于日志的暴力破解尝试,但也可以用于处理低强度的CC(Challenge Collapsar)和部分DDoS(分布…

Python高精度浮点运算库之mpmath使用详解

概要 在科学计算和工程应用中,精确的数学计算至关重要。Python 作为一种灵活而强大的编程语言,提供了多种数学库,其中 mpmath 库因其高精度浮点运算和丰富的数学函数支持而备受关注。mpmath 库不仅适用于基本的高精度计算,还支持复数运算、矩阵运算和特殊函数计算,广泛应…

Python第三方库GDAL 安装

安装GDAL的方式多种,包括pip、Anaconda、OSGeo4W等。笔者在安装过程中,唯独使用pip安装遇到问题。最终通过轮子文件(.whl)成功安装。 本文主要介绍如何下载和安装较新版本的GDAL轮子文件。 一、GDAL轮子文件下载 打开Github网站…

Swoole v6 能否让 PHP 再次伟大?

大家好,我是码农先森。 现状 传统的 PHP-FPM 也是多进程模型的的运行方式,但每个进程只能处理完当前请求,才能接收下一个请求。而且对于 PHP 脚本来说,只是接收请求和响应请求,并不参与网络通信。对数据库资源的操作…

创纪录!沃飞长空完成新一轮融资,实力获资方认可

作为全球竞逐的战略性新兴产业,今年首次写入政府工作报告的“低空经济”热度正持续提升,在政策、产业等多个层面均有重大突破。行业的飞速发展也吸引了投资界的目光,越来越多资本正投向低空经济。 近期,国内领先的低空出行企业吉…

zabbix 7.0 新增功能亮点(三)— 监控项支持SNMP Hex数据预处理

作者 乐维社区(forum.lwops.cn) 许远 勇敢的人先享受世界,好奇心促使你探索未知的世界。zabbix 7.0 LTS发布已经有一段时间了。不得不说zabbix7.0作为一款开源监控工具而言是真的强大又丝滑,其中不少新特性嘎嘎溜,让人…

互联网医院系统开发中的移动端应用设计

在现代医疗服务中,互联网医院系统逐渐成为提升患者体验和优化医疗资源的重要手段。而移动端应用作为互联网医院系统的关键组成部分,其设计和开发尤为重要。本文将从设计原则、技术架构和具体实现等方面探讨互联网医院系统中的移动端应用设计,…

06-27 周四 理解torch.squeeze和unsqueeze

简介 最近在看动手学深度学习这本书的注意力机制章节,理解起来很吃力,主要原因是一些底层api的具体执行不理解。 代码 unsqueeze xtorch.ones((2, 1, 4)) y torch.ones((2,4,6)) z torch.bmm(x, y) print(f"z.shpae: ", z.shape)weights …

5G赋能安防视频监控:EasyCVR视频汇聚融合创新技术,共筑多场景安全防线

随着科技的快速发展,第五代移动通信技术(5G)已逐渐成为我们生活中的重要组成部分。其中,5G技术以其超高速、低延迟、大连接数的特点,正在深刻改变着我们的生活方式和社会运行模式。安防监控领域作为社会安全的重要组成…

GIT 基于master分支创建hotfix分支的操作

基于master分支创建hotfix分支的操作通常遵循以下步骤: 切换到master分支: 首先,确保你的工作区是最新的,并且你在master分支上。如果不在master分支,你需要先切换过去。 Bash git checkout master 拉取最新的master…

面试题4:POST 比 GET 安全?

不是。HTTP就没有加密功能。 我们知道 GET一般将参数放到URL的查询字符串中,如果是实现登录页面,我们的用户名和密码就直接显示到浏览器的地址栏中了,此时就会轻易的被他人获取账号密码,很不安全。而POST会把参数放到 body 里&am…

微信小程序毕业设计-餐厅点餐系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

相亲交友微信小程序系统源码

开启浪漫邂逅新篇章 相亲交友——随着年龄的增长,越来越多的人开始关注自己的婚姻问题,为了提高相亲服务的质量,这款应用就可以拓宽在线社交网络范围。​ 💑 引言:邂逅爱情的新方式 在繁忙的都市生活中,寻…

Stateflow快速入门系列(四):使用并行分解对同步子系统建模

要实现并发运行的工作模式,请在 Stateflow 图中使用并行状态。例如,作为复杂系统设计的一部分,您可以使用并行状态对同时被激活的独立组件或子系统建模。 状态分解 图或状态的分解类型指定图或状态包含互斥状态还是并行状态: 互…

Java 项目的构建工具 Maven

Maven 一、Maven 简介二、Maven 安装配置1、Maven 下载安装2、Maven 配置 三、IDEA 集成 Maven四、Maven 依赖管理1、依赖配置2、依赖传递3、依赖范围4、生命周期 五、Maven 高级特性1、分模块设计与开发2、Maven 继承3、Maven 版本管理4、Maven 聚合5、私服 一、Maven 简介 M…

记录一次即将出现的钓鱼新方式

钓鱼通常是内网渗透过程中的最为常见的入口方式,但是随着蓝队人员溯源反制思路开阔,入侵排查能力提升,钓鱼也越来越困难,这里就记一种不同寻常的钓鱼方式。 pip install 的执行流程: 先获取到远端的服务器地址 url 比…

MHA、MMM高可用方案及故障切换

目录 一、MHA高可用方案 1、MHA的组成 2、MHA的工作原理 3、部署MHA架构 第一部分:一主两从数据库架构部署 1、全部更改主机名、初始化操作、开启mysql服务、设置主机名管理、时间同步 2、MySQL服务器做主从复制 3、测试主从效果 第二部分:MHA架…

【DC-DC升压电推剪方案】FP6277,FP6296电源升压芯片在电推剪中扮演着一个怎样的角色?带你深入了解电推剪的功能和应用及工作原理

随着人们对个人形象要求的不断提高,理发器作为一个必备的家居用品,也在不断进行技术升级。而其中的核心装备之一,电推剪理发器升压芯片FP6277、FP6296,正在引领着现代理发技术的突破。本文将给大家带来的是电推剪在传统意义上运用…