JMeter 可添加组件总览

在 JMeter 里,右键 测试计划 或 线程组,菜单里的“添加”通常包含以下几大类:

类别 作用 常见组件
线程(Users) 控制“谁来跑、跑多久、跑几次” 线程组、setUp 线程组、tearDown 线程组、开放模型线程组
配置元件(Config Element) 给请求提供公共配置 CSV 数据文件设置、HTTP 信息头管理器、HTTP Cookie 管理器、HTTP 请求默认值、用户定义的变量
取样器(Sampler) 真正发出请求 HTTP 请求、JDBC 请求、FTP 请求、TCP 请求、调试取样器
逻辑控制器(Logic Controller) 控制请求执行顺序 事务控制器、循环控制器、If 控制器、While 控制器、ForEach 控制器、Switch 控制器
前置处理器(Pre Processor) 请求发出前做处理 JSR223 前置处理器、BeanShell 前置处理器
后置处理器(Post Processor) 请求返回后做处理 JSON 提取器、正则表达式提取器、XPath 提取器、边界提取器
断言(Assertion) 判断响应是否正确 响应断言、JSON 断言、持续时间断言、大小断言
定时器(Timer) 控制请求间隔 固定定时器、随机定时器、常数吞吐量定时器、同步定时器
测试片段(Test Fragment) 可复用的测试模块 测试片段
非测试元件(Non-Test Element) 辅助工具 HTTP 代理服务器、HTTP 镜像服务器
监听器(Listener) 收集和展示结果 聚合报告、查看结果树、汇总报告、用表格查看结果、后端监听器

压力测试的先后框架

一次完整的 JMeter 压测,组件按执行顺序和逻辑层级组织如下:

text

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
测试计划(Test Plan)
│
├── setUp 线程组(可选)
│ └── 登录 / 初始化数据
│
├── 线程组(主压测)
│ ├── 配置元件
│ │ ├── CSV 数据文件设置
│ │ ├── HTTP 信息头管理器
│ │ ├── HTTP Cookie 管理器
│ │ └── 用户定义的变量
│ │
│ ├── 逻辑控制器(可选)
│ │ └── 事务控制器 / 循环控制器 / If 控制器
│ │
│ ├── 前置处理器(可选)
│ │ └── JSR223 前置处理器
│ │
│ ├── 定时器(可选)
│ │ └── 固定定时器 / 同步定时器
│ │
│ ├── 取样器
│ │ └── HTTP 请求
│ │
│ ├── 后置处理器(可选)
│ │ └── JSON 提取器 / 正则表达式提取器
│ │
│ └── 断言(可选)
│ └── 响应断言 / JSON 断言
│
├── tearDown 线程组(可选)
│ └── 清理数据 / 退出登录
│
└── 监听器
├── 聚合报告
└── 查看结果树(调试用)

执行顺序(从外到内)

JMeter 执行时,同一层级内按从上到下顺序执行,跨层级按以下顺序:

顺序 组件 说明
1 配置元件 先准备好配置(CSV、Header、Cookie)
2 前置处理器 请求前处理数据
3 定时器 控制请求节奏
4 取样器 真正发请求
5 后置处理器 提取响应数据
6 断言 校验响应
7 监听器 收集结果

记忆口诀:

配置 → 前置 → 定时 → 取样 → 后置 → 断言 → 监听


按功能归类总结

功能 对应组件 常用度
控制并发 线程组 极高
准备数据 CSV 数据文件设置 极高
设置请求头 HTTP 信息头管理器 极高
发请求 HTTP 请求 极高
提取响应 JSON 提取器 / 正则表达式提取器 高
校验结果 响应断言 高
控制节奏 定时器 中
控制流程 逻辑控制器 中
查看结果 聚合报告 / 查看结果树 极高
前后置处理 JSR223 处理器 中
环境准备/清理 setUp / tearDown 线程组 中

细节讲述

如何使用 JMeter 测试文件上传接口?

采样器选择http请求,通常选择post,填写好路径,然后勾选对POST使用multipart/form-data,

  • 对POST使用multipart/form-data:这个主要是为了以标准格式混合发送普通表单数据和文件。如果不勾选,JMeter 默认会把所有数据当成纯文本发送,导致服务器无法解析出文件,从而上传失败。

前置处理器

  1. JSR223 PreProcessor (JSR223 预处理程序)
  • 作用: 万能的**“代码编辑器”**。允许你写代码(比如 Groovy 脚本)来动态生成或修改数据。
  • 场景: 接口需要复杂的加密(如 AES、RSA、你之前做的 Base64 签名)、需要动态拼接复杂的 JSON 字符串、需要根据上一个请求的结果做复杂的逻辑判断。
  • 推荐度: ⭐⭐⭐⭐⭐(现在 JMeter 的首选,性能好,支持代码多)。
  1. 用户参数 (User Parameters)
  • 作用: 用来提前定义好一批变量,给后面的请求使用。
  • 场景: 类似于“数据池”。比如你准备了 5 个不同的账号和密码,设置好之后,每个虚拟用户跑的时候就会依次去取不同的账号,用于模拟多用户登录。
  1. HTML链接解析器 (HTML Link Parser)
  • 作用: 自动解析上一个请求返回的 HTML 页面代码,找出里面所有的超链接(<a href="...">)。
  • 场景: 以前用来做简单的 Web 页面爬取或模拟点击。现在用得很少,因为现在的系统大多是前后端分离,返回的都是 JSON,而且正则表达式或 XPath 提取器比它更好用。
  1. HTTP URL 重写修饰符 (HTTP URL Re-writing Modifier)
  • 作用: 专门针对老旧系统(不支持 Cookie 的),它会自动把会话 ID(如 jsessionid)拼接到你的 URL 路径后面。
  • 场景: 极少用。现代系统基本都用 Cookie 管理器 (HTTP Cookie Manager) 来保持登录状态,这个已经被淘汰了。
  1. JDBC PreProcessor (JDBC 预处理程序)
  • 作用: 在请求发送前,去数据库里查点东西。
  • 场景: 比如测试时需要真实的测试数据,你可以写一段 SQL(select id from users limit 1),提前查出用户的 ID,然后把查出来的 ID 赋值给变量,再放进 HTTP 请求里发出去。
  1. 正则表达式用户参数 (RegEx User Parameters)
  • 作用: 使用正则表达式从上一个请求的响应结果中提取数据。
  • 场景: 也很少用。因为 JMeter 有专门的“后置处理器”(如正则表达式提取器),那个功能更强、更好用。这个前置处理器算是历史遗留产物。
  1. 取样器超时 (Sample Timeout)
  • 作用: 限制执行时间。如果前置脚本或准备工作卡住了,超过设定时间就直接报错,防止 JMeter 一直干等。
  • 场景: 极少用。一般直接在 HTTP 请求里设置超时时间就行。
  1. BeanShell PreProcessor (BeanShell 预处理程序)
  • 作用: 和 JSR223 一样,也是写代码的,但是它支持的是比较老的 BeanShell 语言。
  • 场景: 不推荐使用。它性能差、速度慢,在并发量大的时候会把 JMeter 卡死。现在所有需要用代码的场景,都用上面的 JSR223 替代了。

如何处理需要加密请求的参数

具体步骤如下:

  1. 添加一个 HTTP Request 元件,配置好目标 URL 和请求方法。
  2. 在 HTTP Request 元件的子元素中,添加 “JSR223 PreProcessor” 并选择语言为 “Groovy” 。
  3. 在 JSR223 PreProcessor 中编写 Groovy 脚本来处理加密逻辑。
  4. 在 HTTP Request 中使用 ${variableName} 引用加密后的参数。

JMeter 中 HTTP 信息头管理器(HTTP Header Manager)的作用与配置

组件定位:它是一个独立于 HTTP 请求面板之外的配置元件,用来告诉 JMeter 在发送请求时应附带哪些头部信息。
核心用途:最常见的用途是设置 Content-Type 为 application/json,让服务器正确识别发送的数据格式;也可用于配置 Authorization 传递 Token 等自定义请求头。
添加方式:右键点击线程组(全局生效)或具体的 HTTP 请求(局部生效),选择“添加 -> 配置元件 -> HTTP 信息头管理器”,然后在组件面板中点击“添加”填入名称和对应的值。
优先级:离请求越近的组件优先级越高,允许在全局配置基础上针对特定接口进行单独覆盖。

JMeter 中 POST 请求与 JSON 消息体数据的配合

场景匹配:在接口测试中,POST 请求配合“消息体数据(Body Data)”填写 JSON 格式,是传输结构化数据的标准做法。
发送流程:在请求方法下拉框选择 POST,点击“消息体数据”标签页粘贴 JSON 字符串,并配合 HTTP 信息头管理器设置 Content-Type: application/json。
底层逻辑:请求发出时,JSON 文本被放置在 HTTP 请求的 Body 中,不会显示在 URL 上;HTTP 头管理器中的 Content-Type 相当于标签,告知服务器按 JSON 语法解析包裹内的数据。

功能定位:相当于浏览器的记忆本,自动记录服务器返回的 Cookie(如 Session ID),并在后续请求中自动携带,用于维持登录状态。
添加位置:建议添加在线程组(Thread Group)层级,使线程组内的所有 HTTP 请求都能共享该 Cookie 状态。
配置方式:右键线程组选择“添加 -> 配置元件 -> HTTP Cookie 管理器”;支持自动抓取,也可在界面中手动点击“添加”伪造特定的 Cookie 键值以测试不同权限。

JMeter 测试 SOAP 请求的方法

协议特点:SOAP 是一种基于 XML 的数据交互协议,常见于金融或企业级内部系统。
专用采样器路径:添加“SOAP/XML-RPC Request”采样器,填入 URL,并将长串 XML 报文直接粘贴到采样器的数据输入框中。
通用 HTTP 请求路径:使用普通的 HTTP 请求,方法选 POST,在“消息体数据”中粘贴 XML,并添加 HTTP 信息头管理器,根据服务版本设置 Content-Type 为 text/xml;charset=utf-8 或 application/soap+xml。

JMeter 中的参数化实现方式

CSV 数据文件设置:最常用、最推荐的企业级方案。将测试数据保存在 CSV/TXT 文件中,通过配置元件读取,实现数据与脚本分离。
函数助手:利用 JMeter 自带函数(如 __Random 随机数、__time 时间戳)动态生成每次请求需要变化的差异化数据。
用户定义的变量:用于配置全局常量(如基础 URL、端口号),修改时只需更改一处。
数据库提取:通过 JDBC 连接直接查询数据库获取真实数据,作为参数传递给后续的 HTTP 请求。

JMeter 测试完成后自动发送邮件

标准组件:安装 JMeter 插件管理器中的 jpgc - Standard Set 插件,在测试计划下添加“Mailer Visualizer(邮件观察仪)”监听器。
核心配置:配置发件人、收件人、SMTP 服务器地址以及认证信息(使用邮箱的授权码),并勾选触发条件(如测试报错时发送或设置失败率阈值)。
企业级 CI/CD 方案:在持续集成环境(如 Jenkins)中,通常通过命令行无界面运行 JMeter 生成 HTML 报告,再借助 CI 工具的邮件插件将报告以附件形式发送给团队。