第五篇:《JMeter关联:提取动态数据并传递给后续请求》

在接口测试中,经常遇到接口之间存在依赖关系:例如登录后返回 token,后续的查询、修改接口需要携带该 token。这种"从上一个响应中提取数据,传递给下一个请求"的过程就是关联。本文将系统讲解 JMeter 中几种常用的提取器:正则表达式提取器、JSON 提取器、边界提取器,并通过实战演示如何实现 token 的自动传递。

一、关联的本质

关联的步骤分为:

发起请求,获得响应

从响应中通过某种规则提取所需的值

将提取的值存入变量

后续请求中使用 ${变量名} 引用

典型场景:

登录获取 token / sessionId

查询列表后,提取第一条数据的 ID 用于修改或删除

从响应中获取 CSRF token 用于表单提交

二、三种常用的提取器

三、JSON 提取器(最推荐)

3.1 添加位置

右键某个 HTTP 请求(作为"源请求") → Add → Post Processors → JSON Extractor

3.2 配置项说明

3.3 实战:提取登录返回的 token

假设登录接口响应:

json

{

"code": 0,

"message": "success",

"data": {

"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",

"userId": 1001

}

}

JSON 提取器配置:

变量名:token

JSON Path:$.data.token

默认值:null

后续请求(如查询用户信息)中,在 HTTP Header Manager 中添加:

名称:Authorization

值:Bearer ${token}

3.4 提取多个值的场景

如果要同时提取 token 和 userId,可以配置多个变量名和对应的 JSON Path:

Names:token,userId

JSON Paths:.data.token,.data.token,.data.token,.data.userId

四、正则表达式提取器

当响应不是 JSON(如 XML、HTML、纯文本)时,正则表达式是非常强大的工具。

4.1 添加位置

右键 HTTP 请求 → Add → Post Processors → Regular Expression Extractor

4.2 配置项说明

4.3 常见正则示例

提取 JSON 中的 token:"token":"(.*?)" (非贪婪匹配)

提取 HTML 中的 input value:

提取 XML 标签内容:(.*?)

4.4 实战:提取 HTML 响应中的隐藏字段

假设登录页面返回一个 HTML,包含 CSRF token:

html

正则表达式提取器配置:

变量名:csrf

正则:<input type="hidden" name="csrf_token" value="([^"]+)"

模板:111

后续请求中,使用 ${csrf} 作为请求参数。

五、边界提取器(Boundary Extractor)

边界提取器是 JMeter 5.0 引入的,比正则表达式更简单直观,适合提取左右边界明确的内容。

5.1 添加位置

右键 HTTP 请求 → Add → Post Processors → Boundary Extractor

5.2 配置项

5.3 示例

响应片段:"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"

左边界:"token":"

右边界:"

提取结果:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

边界提取器的优势是不需要写正则,性能更好,可读性更强。

六、提取器的调试与验证

6.1 使用 Debug Sampler

右键线程组 → Add → Sampler → Debug Sampler

运行后,在查看结果树中可以找到 Debug Sampler 的输出,显示所有 JMeter 变量及其值(包括提取器生成的变量),便于调试。

6.2 在查看结果树中查看提取结果

在 HTTP 请求的"请求"标签页,可以看到最终发送的请求中变量是否被正确替换。

七、实战:完整的业务流程关联

场景:用户登录 → 获取 token → 查询个人信息 → 修改个人信息

7.1 测试计划结构

text

Thread Group

├─ HTTP Request - Login (POST /api/login)

│ ├─ JSON Extractor (提取 token, userId)

│ └─ Response Assertion (校验登录成功)

├─ HTTP Header Manager (添加 Authorization: Bearer token)├─HTTPRequest−GetProfile(GET/api/user/{token}) ├─ HTTP Request - Get Profile (GET /api/user/token)├─HTTPRequest−GetProfile(GET/api/user/{userId})

│ └─ JSON Assertion (校验用户名等)

├─ HTTP Request - Update Profile (PUT /api/user/${userId})

│ └─ JSON Assertion

└─ View Results Tree

7.2 具体步骤

登录请求:发送用户名密码,Body 为 JSON。

JSON 提取器:提取 data.token 和 data.userId。

HTTP Header Manager(可放在登录请求之后,线程组级别):设置 Authorization: Bearer ${token}。

获取个人信息:路径使用 /api/user/${userId},Token 自动携带。

修改个人信息:同样使用 token 和 userId。

7.3 注意事项

由于提取器只作用于它所在的取样器,后续请求必须在线程组内(同一个线程)才能使用提取的变量。

确保登录请求成功后再执行后续请求,可以通过断言控制,或使用"仅一次控制器"之类的逻辑,但最简单的是让它们顺序执行。

八、常见错误与解决

九、总结

本文核心:

关联是解决接口依赖的核心技术

JSON 提取器最常用,用于 REST API

正则表达式提取器通用,适合任何文本

边界提取器简洁,适合左右边界明确的场景

Debug Sampler 是调试提取器的好帮手

相关推荐
弹简特1 天前
【Fiddler抓包工具】一文通关Fiddler抓包工具【附:Fiddler结合jmeter接口测试实战】
jmeter·fiddler·接口测试·抓包
测试19981 天前
性能测试方案设计的方法和思路
自动化测试·软件测试·测试工具·jmeter·测试用例·压力测试·性能测试
川石课堂软件测试2 天前
软件测试|常见面试题整理
数据库·python·jmeter·mysql·appium·postman·prometheus
这是个菜比测试2 天前
jmeter无法访问内网接口
jmeter
qq_452396232 天前
第三篇:《JMeter断言:验证接口响应正确性》
android·jmeter
是小章啊3 天前
Jmeter压测实战之HTTP_POST
网络协议·jmeter·http
古城小栈5 天前
封神!Rust 出品 HTTP 压测神器 cargo-whero,轻量碾压 JMeter、wrk,新手也能秒上手
jmeter·http·rust
_周游5 天前
【软件测试】使用JMeter进行压力测试_3
jmeter·压力测试
EVE จุ๊บ7 天前
如何修改mac上的jmeter堆内存
jmeter·macos