本节摘要:JMeter 的脚本是一棵元件树,每种元件各司其职。本节讲线程组、采样器、监听器、配置元件、定时器、断言、前后置处理器——核心术语一次理清。
阅读完本节,你应当能够:
<!-- 线程组:100 用户,10 秒内启动,循环 1 次 --> <ThreadGroup> <stringProp name="ThreadGroup.num_threads">100</stringProp> <stringProp name="ThreadGroup.ramp_time">10</stringProp> <stringProp name="LoopController.loops">1</stringProp> </ThreadGroup>
采样器(Sampler)向目标发请求。最常用 HTTP 请求采样器,还有 JDBC、JMS、TCP 等。

| 元件 | 作用 | 例子 |
|---|---|---|
| 配置元件 | 提供默认配置 | HTTP 默认值、用户变量、CSV 数据文件 |
| 定时器 | 控制请求间隔 | 常数定时器、高斯随机定时器 |
| 前置处理器 | 请求前做准备 | 用户参数 |
| 后置处理器 | 请求后提取数据 | 正则提取器、JSON 提取器 |
| 断言 | 校验响应 | 响应断言、持续时间断言 |
| 监听器 | 记录展示结果 | 查看结果树、聚合报告、Backend Listener |
一次采样器请求,元件按固定顺序执行:
配置元件 → 定时器 → 前置处理器 → 采样器 → 后置处理器 → 断言 → 监听器
理解这个顺序很重要——比如后置处理器提取的数据,断言里才能用;定时器在采样器前生效控制间隔。
元件的作用域取决于它在树里的位置:挂在采样器下只对该采样器生效,挂在线程组下对组内所有采样器生效。配置元件和监听器的作用域同理。
⚠️ 常见坑:把断言挂在线程组下,对组内所有请求都校验——可能误伤不该校验的请求。断言尽量挂在具体采样器下,作用域要明确。
💡 关键直觉:JMeter 脚本是一棵元件树,各元件按"配置→定时器→前置→采样器→后置→断言→监听器"顺序执行。作用域看挂的位置,挂采样器下只对该采样器生效。
下一节讲 JMeter 适合什么场景、能力边界在哪。
JMeter 的核心概念围绕"模拟用户发请求"展开:线程组是并发的来源,每个线程代表一个虚拟用户;采样器是具体的请求动作;逻辑控制器控制执行顺序与条件;断言校验响应正确性;监听器收集与展示结果。理解这些元件的关系是搭建测试计划的第一步:线程组在最外层,采样器与控制器挂在其下,断言与监听器作为子节点作用于采样器。
| 术语 | 含义 | 典型元件 |
|---|---|---|
| 线程组 | 虚拟用户集合 | Thread Group |
| 采样器 | 发起请求 | HTTP Request |
| 逻辑控制器 | 控制执行流 | If Controller、Loop Controller |
| 配置元件 | 提供数据与配置 | CSV Data Set、HTTP Header |
| 断言 | 校验响应 | Response Assertion |
| 监听器 | 展示结果 | Aggregate Report |
| 定时器 | 控制请求间隔 | Constant Timer、Poisson Timer |
配置元件与采样器的作用范围不同:配置元件影响其所在层级及其子层级的所有采样器,而定时器、断言只作用于同层级采样器。理解作用域规则是避免脚本行为异常的关键,建议通过小实验验证作用域后再设计复杂测试计划。
作用域规则建议通过小实验验证:在一个线程组下挂两个 HTTP 请求,再在其中一个请求下挂定时器,运行后观察定时器是否只影响其所在分支。类似地,在测试计划根节点添加用户定义变量,观察其如何被所有线程组共享。亲手验证作用域规则,比死记文档更牢固,也能避免脚本行为与预期不符时的困惑。
测试计划 ├── 用户定义变量(全局配置) ├── 线程组 │ ├── HTTP 请求 │ │ ├── 断言(校验该请求) │ │ └── 定时器(作用于该请求) │ ├── 逻辑控制器(分支/循环) │ └── 监听器(收集该组结果) └── 监听器(全局结果)