当前位置: 首页 > article >正文

第六篇:《JMeter逻辑控制器:循环、条件和交替执行》

在实际业务测试中并非只是简单的顺序执行。有时需要重复执行某些操作循环有时需要根据条件决定执行哪个分支条件有时需要模拟多个用户的交替行为交替。JMeter 提供了丰富的逻辑控制器来实现这些流程控制。本文将介绍最常用的循环控制器、If 控制器、ForEach 控制器和交替控制器并通过实战案例让你掌握它们的使用。一、逻辑控制器概述逻辑控制器可以改变其子元件的执行顺序和执行次数。类似于编程语言中的 for、if、switch 等控制语句。常用逻辑控制器二、循环控制器Loop Controller2.1 使用场景需要重复执行一组请求 N 次例如批量创建 10 条数据。2.2 配置右键某线程组或上一级控制器 → Add → Logic Controller → Loop Controller在“Loop Count”中填写循环次数。注意循环控制器与线程组的循环不同线程组循环次数每个线程执行整个测试计划 N 次循环控制器仅循环控制器内部的请求 N 次2.3 实战批量创建用户假设有一个创建用户的 POST 接口需要创建 5 个不同用户。可以将创建请求放在循环控制器内循环次数设为 5并在请求参数中使用计数器变量 ${__counter(,)} 来区分用户名。json{“username”: “userKaTeX parse error: Expected group after _ at position 2: {_̲_counter(true,)…{__counter(true,)}test.com”}三、If 控制器If Controller3.1 使用场景根据某个变量或条件决定是否执行其内部的请求。例如登录成功后执行后续操作否则跳过。3.2 配置右键 → Add → Logic Controller → If Controller条件表达式有两种常用模式简单地检查变量是否等于某个值${code} 0使用 JMeter 的 __jexl3 或 __groovy 函数KaTeX parse error: Expected group after _ at position 2: {_̲_jexl3({code} “0”,)}建议使用 __jexl3 或 __groovy因为更稳定且支持复杂逻辑。3.3 语法示例条件 含义KaTeX parse error: Expected group after _ at position 2: {_̲_jexl3({code} “0”,)} 变量 code 等于字符串 “0”KaTeX parse error: Expected group after _ at position 2: {_̲_jexl3({count} 0,)} 变量 count 大于 0KaTeX parse error: Expected group after _ at position 2: {_̲_jexl3({token} ! “null”,)} token 不为 nullKaTeX parse error: Expected group after _ at position 2: {_̲_jexl3({__Random(1,100,)} 50,)} 随机数大于 50注意If 控制器内部的请求只有在条件为 true 时才会执行。条件表达式要写正确否则永远为 false。3.4 实战条件性执行清理操作场景测试前如果数据库中存在测试数据则先执行清理接口。可以通过一个前置请求查询是否存在数据提取数量到变量 count然后在 If 控制器中判断 count 0 时执行删除接口。四、ForEach 控制器ForEach Controller4.1 使用场景当你有一组类似的变量时例如从 JSON 提取器提取了多个值可以使用 ForEach 控制器遍历它们。4.2 配置项4.3 典型用法假设通过 JSON 提取器提取了所有订单 ID配置如下变量名orderIdsJSON Path$.data.orders[*].idMatch No. 设置为 -1所有匹配该提取器会生成 orderIds_1、orderIds_2…… 和 orderIds_matchNr总个数然后在 ForEach 控制器Input variable prefixorderIdsOutput variable nameorderId循环内部使用 ${orderId} 访问每个 ID进行删除或其他操作。4.4 注意事项需要先有生成 xxx_n 变量的提取器或用户自定义变量。如果变量索引不连续ForEach 会停止在第一个缺失处。五、交替控制器Interleave Controller5.1 使用场景模拟多个用户交替执行不同操作例如每个虚拟用户每次循环执行一个不同的请求如浏览商品、加入购物车、结算轮流执行。5.2 配置右键 → Add → Logic Controller → Interleave Controller可选“忽略子控制器块”等选项。默认情况下每次循环会按顺序选择下一个子请求执行线程内独立。5.3 示例交替控制器下包含三个 HTTP 请求搜索商品、查看详情、加入购物车。当线程组循环 3 次时第一次执行搜索第二次执行查看详情第三次执行加入购物车第四次又从搜索开始。与随机控制器的区别交替控制器是顺序轮换随机控制器是完全随机。六、其他实用控制器简介七、实战综合使用多种逻辑控制器场景模拟一个电商用户的典型流程登录 → 随机浏览搜索或查看详情→ 一旦找到商品就加入购物车循环直到成功→ 结算。7.1 测试计划概要仅一次控制器登录提取 token随机控制器随机选择“搜索商品”或“查看详情从列表选一个”循环控制器尝试加入购物车若失败则继续随机浏览使用 If 控制器判断是否成功单次操作结算这个组合展示了逻辑控制器的嵌套。7.2 注意事项逻辑控制器可以任意嵌套但嵌套过深会降低可读性。每个控制器的作用域要清晰特别是变量作用域。八、常见错误与解决九、总结本文核心循环控制器重复执行If 控制器条件分支ForEach 控制器遍历数组变量交替控制器轮流执行子请求多种控制器组合可实现复杂业务流

相关文章:

第六篇:《JMeter逻辑控制器:循环、条件和交替执行》

在实际业务测试中,并非只是简单的顺序执行。有时需要重复执行某些操作(循环),有时需要根据条件决定执行哪个分支(条件),有时需要模拟多个用户的交替行为(交替)。JMeter 提…...

给IPC相机调图像,别再瞎调了!一份保姆级的ISP线性模式调试顺序图(附避坑要点)

IPC相机图像调试实战指南:从线性模式到专业级画质优化 刚接触IPC相机图像调试的工程师们,常常会陷入参数迷宫——面对AE、AWB、Gamma、3DNR等数十个模块,该从何处入手?调试顺序的错误可能导致反复返工,甚至影响最终成像…...

ARMv8 A64指令集内存访问优化与LDRH/LDRSB指令详解

1. A64指令集与内存访问基础在ARMv8架构中,A64指令集作为64位执行状态的核心指令系统,其内存访问指令的设计直接影响处理器性能。与32位的A32指令集相比,A64在寄存器数量、地址空间和指令编码等方面都有显著改进。1.1 ARMv8内存访问特点ARM架…...

从网页地图卡顿说起:深入理解瓦片加载与前端性能优化(Leaflet/Mapbox实战)

从网页地图卡顿说起:深入理解瓦片加载与前端性能优化(Leaflet/Mapbox实战) 当用户在地图应用中频繁缩放拖拽却遭遇卡顿、白屏时,体验会瞬间崩塌。作为前端开发者,我们该如何从底层机制入手解决这些问题?本文…...

技能图谱探索器:从数据建模到交互可视化的全栈实现

1. 项目概述:一个技能图谱的探索工具最近在GitHub上看到一个挺有意思的项目,叫nitzzzu/openclaw-skills-explorer。光看名字,openclaw和skills-explorer这两个词就挺有画面感的。我第一反应是,这应该是一个用来探索、梳理或可视化…...

从“共和国之辉”到AI原生应用:一个关于“哥布林”诞生的技术启示录

从“共和国之辉”到AI原生应用:一个关于“哥布林”诞生的技术启示录 2025年7月,一篇名为《Where the goblins came from》的文章在Hacker News上引发了超过710票的热议。当大多数技术评论者将目光聚焦于AI模型的最新突破时,这篇来自OpenAI的文…...

扫雷外挂逆向笔记:我是如何找到那个0x8F代表地雷的(含OD动态调试技巧)

扫雷外挂逆向笔记:从内存数据到游戏逻辑的侦探之旅 逆向工程最迷人的地方在于,它像一场精心设计的侦探游戏。当你面对一堆看似毫无规律的十六进制数值时,如何抽丝剥茧,找出它们与游戏逻辑之间的映射关系?本文将分享我在…...

3PEAK思瑞浦 TPA2772-VS1R MSOP8 运算放大器

特性 供电电压:3V至36V 偏移电压:在25C时最大3.5mV 轨到轨输入和输出 带宽:4.6 MHz 噪声容限:-良好,THD0.0008% 低噪声:1kHz时53nV/vHz 零交叉输入: -优异的总谐波失真加噪声:0.0008%...

3PEAK思瑞浦 TPA1882Q-SO1R-S SOP8 运算放大器

特性 供电电压:4.5伏至36伏或2.25伏至18伏 偏移电压:最大50V 差分输入电压范围至电源轨,可作为比较器工作 输入轨至-Vs,轨到轨输出 带宽:12MHz,斜率:10V/us 优异的EMI抑制性能:1GHz时85dB 过温保护 低噪声:1kHz时为10nV/vHz 符合AEC-Q100认证…...

别再手动调阈值了!OpenCV实战:用Otsu和自适应阈值搞定光照不均的图片分割

智能图像分割实战:Otsu与自适应阈值技术解决光照不均难题 在工业质检、医疗影像分析、自动驾驶等场景中,图像分割的准确性直接影响最终结果。但现实世界的光照条件往往复杂多变——同一张图片可能同时存在过曝和欠曝区域,传统全局阈值方法在…...

DenseNet参数量比ResNet少?从Bottleneck和Transition层设计,聊聊模型轻量化的核心思路

DenseNet与ResNet参数效率对比:从结构设计看模型轻量化本质 在深度学习模型设计中,参数量与计算效率一直是工程师们关注的核心指标。当DenseNet首次提出时,许多研究者对其参数效率感到惊讶——看似复杂的密集连接结构,实际参数量却…...

AI编码助手如何重塑开发体验:从工具到伙伴的范式转变

1. 项目概述:当AI编码助手遇上“氛围感”最近在GitHub上看到一个挺有意思的项目,叫“awesome-ai-vibe-coding”。初看这个标题,可能会有点摸不着头脑。“Awesome”系列我们见多了,是各种优质资源的集合;“AI Coding”也…...

知识图谱与量化LLM协同架构解析与应用

1. 知识图谱与量化LLM协同架构解析在自然语言处理领域,知识图谱(KG)与大型语言模型(LLM)的协同正展现出独特价值。这种架构的核心在于发挥两者的互补优势:KG提供结构化、可验证的语义网络,而LLM…...

别再花钱买板卡了!手把手教你用NI MAX免费创建虚拟PCI6224,搞定LabVIEW数字IO

零成本搭建LabVIEW开发环境:虚拟PCI6224板卡实战指南 当我在大学实验室第一次接触LabVIEW时,面对动辄上万的NI板卡价格标签,几乎浇灭了我的学习热情。直到发现NI MAX的虚拟设备功能——这个隐藏的宝藏工具,让我在没有物理硬件的情…...

基于事件驱动与SSH的轻量级实时文件同步工具Pynchy详解

1. 项目概述:一个轻量级、高可用的文件同步守护进程最近在折腾个人服务器和开发环境之间的文件同步,试过不少方案,要么太重,要么配置复杂,要么实时性不够。直到我发现了crypdick/pynchy这个项目,它用 Pytho…...

从公式到代码:用STM32实现直线滑台S曲线加减速控制的保姆级教程

从公式到代码:用STM32实现直线滑台S曲线加减速控制的保姆级教程 在工业自动化和精密设备领域,直线滑台模组的运动控制质量直接影响着加工精度和设备寿命。传统的梯形加减速算法虽然简单易实现,但在启停阶段会产生明显的机械冲击,导…...

Tiny AI Client:零依赖、轻量化的AI API调用库设计与实战

1. 项目概述与核心价值最近在折腾AI应用本地化部署和轻量化客户端时,发现了一个挺有意思的项目——piEsposito/tiny-ai-client。这名字起得就很直白,“tiny”意味着小巧,“ai-client”点明了它是一个AI客户端。乍一看,你可能会觉得…...

VS Code图表神器:零配置用代码画UML、流程图与架构图

1. 项目概述:在VS Code里优雅地“画”图作为一名长期在技术文档、架构设计和日常笔记中与图表打交道的老兵,我深知一个痛点:从想法到一张清晰可用的图表,中间往往隔着“安装Java环境”、“配置GraphViz路径”、“折腾渲染引擎”等…...

开源机械爪技术全解析:从结构设计到ROS集成开发指南

1. 项目概述与核心价值如果你是一名开发者,尤其是在开源社区里摸爬滚打过一阵子,那你肯定对“awesome-xxx”这类项目不陌生。它们通常是一个精心整理的列表,汇聚了某个特定技术领域或工具生态下的优质资源。今天要聊的这个fundgao/awesome-op…...

Vue3 + Vite项目集成vue-particles避坑指南:从安装到性能优化全流程

Vue3 Vite项目集成vue-particles全流程实战:从安装到性能调优 在Vue3和Vite构建的现代前端项目中,集成像vue-particles这样的视觉特效组件往往会遇到意想不到的兼容性问题。不同于传统的Webpack环境,Vite的ES模块系统和Vue3的组合式API带来了…...

别再让代码异味溜走:手把手教你用SonarQube为团队搭建代码质量守护神

别再让代码异味溜走:手把手教你用SonarQube为团队搭建代码质量守护神 当项目规模从几千行扩展到几十万行代码时,技术债务就像房间里的大象——人人都知道存在,却少有人主动清理。去年我们团队在重构一个核心模块时,发现其中隐藏的…...

从协议到代码:用Python仿真5G NR下行同步全流程(含PBCH解码与MIB解析)

从协议到代码:用Python仿真5G NR下行同步全流程(含PBCH解码与MIB解析) 在通信系统设计中,下行同步是终端接入网络的第一步关键操作。5G新空口(NR)技术引入了更复杂的同步信号结构,这对算法工程师和研究人员提出了更高要…...

全栈AI智能体开发实战:基于LangGraph与Next.js的工程化模板解析

1. 项目概述:一个全栈AI智能体模板的诞生 最近在GitHub上看到一个挺有意思的项目,叫 vstorm-co/full-stack-ai-agent-template 。光看名字,你可能会觉得这又是一个“AI全栈”的缝合怪,或者是一个过度包装的概念。但作为一个在AI…...

分数阶傅里叶变换在声纳阵列分析中的应用与优化

1. 分数阶傅里叶变换在声纳阵列分析中的核心价值在水下声学工程领域,准确计算声纳阵列的辐射模式一直是个技术难点。传统FFT算法虽然计算效率高,但在处理特定方位角的辐射特性时存在明显的精度局限。2005年日本防卫厅技术研究本所的这项研究,…...

从HackRF到USRP B210:我的SDR设备升级之路与真实体验对比

从HackRF到USRP B210:我的SDR设备升级之路与真实体验对比 作为一个长期沉迷于软件定义无线电(SDR)技术的爱好者,设备的选择往往决定了探索的边界。从最初的HackRF One到如今的USRP B210,这段升级旅程不仅是对硬件性能的…...

LynxPrompt Action:GitHub Actions 实现 AI 配置中心化与自动化管理

1. 项目概述:为什么我们需要一个AI配置的“中央仓库”? 如果你和我一样,日常开发中同时用着Cursor、Claude Code、GitHub Copilot,甚至还在尝试Windsurf和Aider,那你一定遇到过这个头疼的问题:每个工具的配…...

Windows动态光标优化:LuumaCursorHelper工具包详解与实战指南

1. 项目概述与核心价值最近在折腾一个挺有意思的小工具,起因是发现很多朋友在用LuumaCursor这款动态光标主题时,总会遇到一些“小麻烦”。比如,安装后光标在某些应用里不显示、动画卡顿,或者想自定义一下效果却无从下手。我自己也…...

解锁B站宝藏:一款让你轻松下载无水印高清视频的神器

解锁B站宝藏:一款让你轻松下载无水印高清视频的神器 【免费下载链接】BiliDownload B站视频下载工具 项目地址: https://gitcode.com/gh_mirrors/bil/BiliDownload 你是否经常在B站发现精彩视频,却苦于无法保存到本地?是否因为右上角的…...

Musa并行搜索工具:重塑信息检索工作流,提升多源对比效率

1. 项目概述:重新定义你的搜索工作流如果你和我一样,每天的工作都离不开在浏览器里反复横跳——为了一个技术问题,先在 Google 搜一遍,再去 Stack Overflow 看看有没有新答案,接着打开 ChatGPT 问问它的看法&#xff0…...

ComfyUI-Impact-Pack完整安装指南:解决AI图像增强插件功能缺失问题

ComfyUI-Impact-Pack完整安装指南:解决AI图像增强插件功能缺失问题 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地…...