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


