JMeter接口关联(Correlation)
返回JMeter接口关联(Correlation)
一、什么是接口关联
在真实业务系统中,一个接口的返回结果往往会被下一个接口使用。
例如:
用户登录:
POST /api/login
返回结果:
{
"code": 200,
"token": "abc123xyz"
}
后续接口需要使用 token:
GET /api/user/profile
Authorization: Bearer abc123xyz
由于 token 每次登录都会变化,因此压测脚本必须:
- 从响应中提取 token
- 在后续请求中使用 token
这个过程就叫 接口关联(Correlation)。
简单来说:
接口关联就是把一个请求的响应数据,传递给下一个请求。
二、为什么需要接口关联
如果不做关联,会出现以下问题:
例如脚本写死:
Authorization: Bearer abc123xyz
但是:
token 每次登录都会变化
结果就是:
接口返回 401
认证失败
压测结果完全错误。
因此在真实压测中必须实现:
动态数据传递
三、JMeter关联流程
接口关联通常包含两个步骤:
1 提取数据
2 使用数据
流程示意:
登录接口
↓
提取 token
↓
保存变量
↓
后续接口使用 ${token}
四、提取响应数据
JMeter 提供多种提取方式:
| 提取方式 | 适用场景 |
|---|---|
| Regular Expression Extractor | 正则提取 |
| JSON Extractor | JSON响应 |
| XPath Extractor | XML响应 |
在现代 API 中最常用的是:
JSON Extractor
五、JSON Extractor 使用
假设登录接口返回:
{
"code": 200,
"data": {
"token": "abc123xyz"
}
}
添加 JSON Extractor
右键登录接口:
Add → Post Processors → JSON Extractor
配置:
| 参数 | 值 |
|---|---|
| Variable Name | token |
| JSON Path | $.data.token |
配置完成后:
JMeter 会自动提取:
abc123xyz
并保存为变量:
${token}
六、使用提取变量
在后续接口中可以直接使用变量。
例如:
请求头:
Authorization: Bearer ${token}
或者:
请求参数:
{
"token": "${token}"
}
运行时:
${token} → abc123xyz
七、完整关联示例
假设系统有两个接口:
登录接口
获取用户信息接口
第一步 登录
请求:
POST /api/login
返回:
{
"token": "abc123xyz"
}
第二步 提取 token
使用:
JSON Extractor
配置:
Variable Name = token
JSON Path = $.token
第三步 调用用户接口
请求:
GET /api/user/profile
Header:
Authorization: Bearer ${token}
执行流程:
用户登录
↓
提取token
↓
调用用户接口
这样每个线程都会使用自己的 token。
八、JMeter关联常见问题
变量未提取成功
如果 JSON Path 错误:
${token} = null
解决方法:
使用:
View Results Tree
查看响应数据。
提取多个值
如果返回多个数据,例如:
{
"ids": [1, 2, 3, 4]
}
可以提取:
$.ids[*]
变量作用域问题
变量必须在 后续请求 中使用。
如果顺序错误,例如:
先使用变量
后提取变量
则会失败。
九、企业真实压测脚本结构
在企业压测中,脚本通常是这样的结构:
Thread Group
├ Login API
│ └ JSON Extractor (token)
├ Query User API
│ └ Header: Authorization ${token}
└ Order API
└ Header: Authorization ${token}
这样可以模拟:
真实用户行为
十、总结
接口关联是 JMeter 中最重要的能力之一。
关联流程:
1 发送请求
2 提取响应数据
3 保存为变量
4 后续请求使用变量
常见提取方式:
JSON Extractor
Regular Expression Extractor
XPath Extractor
掌握接口关联后,就可以实现:
- 登录 → 查询用户
- 登录 → 下单
- 登录 → 支付
这些 真实业务流程压测。