当前位置:首页 > 技术 > 正文内容

JMeter逻辑控制器详解

访客 技术 2026年7月14日 1

If Controller(条件判断控制器)

根据指定条件是否成立来决定是否执行其下的采样器。当条件为真时,执行所有子元素。

  • 解释条件作为变量表达式: - 未勾选:可直接写布尔表达式,如 count > 5,无需函数包装。 - 勾选:仅当表达式结果等于字符串 true(忽略大小写)时才执行。
  • 对所有子节点评估: 启用后,每次执行子元素前都会重新计算条件表达式。

JEXL3 函数使用说明

${__jexl3(${count} == "1", result)}
  • 表达式参数: 要求执行的JEXL表达式。
  • 结果变量名(可选): 可将计算结果保存为变量供后续引用。

注意事项:

  • 若变量值为字符串类型,必须用双引号包裹,如 "${token}"
  • 数字类型可省略引号,但建议统一格式以避免错误。
  • 支持与 Java 相同的比较和逻辑运算符。

其他表达式写法对比

  • Groovy: ${__groovy(vars.get("count") == "1")}
  • JEXL3: ${__jexl3(${count} == "1")}${__jexl3(${count} < 10)}
  • JavaScript: ${__javaScript("${count}" == "1")}

Transaction Controller(事务控制器)

用于测量一组请求的整体响应时间,生成一个代表整个事务耗时的样本。

  • 包含计时器与前后处理器时间: 勾选后,将把计时器、前置/后置处理器的时间也计入总事务时间。通常不推荐启用,以免影响真实性能分析。
  • 失败判定: 事务中任意一个采样器失败,整个事务即视为失败。
  • 适用场景: 主要用于性能测试中的业务流程分析,接口测试中较少使用。

Once Only Controller(仅执行一次控制器)

在每个线程生命周期内仅执行一次其内部的采样器或逻辑控制器。

  • 无论线程组循环多少次,该控制器内的内容只运行一次。
  • 若上级存在 Loop Controller,仍只执行一次,不受其循环次数影响。
  • 它只会停止最近一层的循环控制。

示例结构:

- 线程组
  - Loop Controller (5 次)
    - Loop Controller (2 次)
      - Once Only Controller
        - HTTP Request

此时,HTTP 请求将仅执行 5 次。

Loop Controller(循环控制器)

允许在当前线程中重复执行其下所有元素指定次数,独立于线程组的循环设置。

例如,在线程组设定循环 3 次的前提下,若嵌套了 Loop Controller 设置为 2 次,则实际执行共 6 次。

While Controller(while 条件循环控制器)

基于条件持续执行其子元素,直到条件变为假为止。

  • 空值: 不输入任何内容,表示一直循环,直到某个请求失败。
  • LAST: 仅在最后一次请求失败时退出循环。
  • 其他值: 当条件表达式返回 false 时退出。
  • 可使用变量或函数作为条件来源,如 ${__jexl3(${flag} == "true")}

ForEach Controller(遍历控制器)

按数组形式遍历一组变量,常用于处理多个同名参数或批量数据。

  • 依赖用户定义变量(UDV)或已存在的变量序列,如 user_1, user_2...
  • 变量命名必须从 _1 开始,否则不会被识别。
  • 若需自定义索引范围,可通过设置起始索引实现(如索引 0 表示从 _1 开始)。
  • 实际行为是创建多个线程并行处理每一条数据,而非单线程循环。

Simple Controller(简单控制器)

仅用于组织测试计划结构,无任何执行逻辑功能。相当于一个容器,便于维护脚本层级关系。

Module Controller 与 Test Fragment(模块化设计)

通过 Test FragmentModule Controller 实现测试组件的复用。

  • Test Fragment: 与线程组同级,本身不会被执行,除非被模块控制器调用。
  • 用途:
    • 作为功能模块的临时存储区。
    • 支持封装常用请求,供多个测试计划复用。
  • 典型结构:
- Test Plan
  - Test Fragment
    - Login Request
    - Data Setup
  - Thread Group
    - Module Controller (调用 Test Fragment 内容)

此方式极大提升了脚本可维护性与复用性。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。