4.2 关联与会话管理


4.2 关联与会话管理

本节摘要:很多业务请求间有依赖——登录拿 token,下单带 token。本节讲用提取器做关联、用 Cookie 管理器做会话保持。

本节目标

阅读完本节,你应当能够:

  1. 用提取器实现请求关联
  2. 用 Cookie 管理器保持会话
  3. 处理动态参数(如 CSRF token)

概念脉络

一、什么是关联

关联:一个请求的响应里有下一个请求要用的数据(如 token、订单 ID),提取出来传给后续请求。JMeter 用后置处理器提取器实现。

二、提取器实现关联

图 4-2 关联会话流程

图 4-2 关联会话流程

<!-- 登录采样器下挂 JSON 提取器 --> <JsonPostProcessor> <stringProp name="JsonPathExpressions">$.data.token</stringProp> <stringProp name="refNames">TOKEN</stringProp> </JsonPostProcessor> <!-- 下单采样器引用 --> <stringProp name="Header.value">${TOKEN}</stringProp>

HTTP Cookie 管理器自动存取 Cookie:

  • 服务器返回 Set-Cookie 时自动存
  • 后续请求自动带上
  • 勾选"清除每次迭代的 Cookie"避免串
<CookieManager> <boolProp name="CookieManager.clearEachIteration">true</boolProp> </CookieManager>

挂测试计划或线程组下,对组内所有请求生效。

四、动态参数处理

有些接口返回动态参数(CSRF token、时间戳签名),下个请求要带:

  1. 第一个请求拿页面/接口返回
  2. 提取器提取动态参数存变量
  3. 下个请求用 ${变量} 带上

五、信息头管理器

统一加请求头(如 Authorization、Content-Type):

<HeaderManager> <stringProp name="Header.name">Authorization</stringProp> <stringProp name="Header.value">Bearer ${TOKEN}</stringProp> </HeaderManager>

⚠️ 常见坑:会话没保持——登录后下单又要求登录。加 Cookie 管理器自动保持会话,或手动提取 token 带上。

💡 关键直觉:关联用提取器把前请求的数据传给后请求。会话用 Cookie 管理器自动保持,或提取 token 用信息头管理器统一带。动态参数提取再带。

重点提炼

  • 关联:提取器从响应提取数据存变量,后续请求引用 ${变量}
  • 提取器:JSON 提取器(JSONPath)、正则提取器、XPath 提取器。
  • Cookie 管理器:自动存取 Cookie 保持会话,可勾选每次迭代清除。
  • 动态参数:CSRF token/签名等提取再带上。
  • 信息头管理器:统一加 Authorization 等 Header。

下一节讲分布式——单机扛不住怎么多机协同。

关联机制

关联(Correlation)指从前一个请求的响应中提取动态值,用于后续请求。常用提取器:正则表达式提取器(匹配任意文本,最通用)、JSON 提取器(按 JSONPath 取值)、XPath 提取器(解析 XML)。典型场景:登录后提取 token 用于后续鉴权请求。

提取器对比

提取器 适用格式 配置要点
正则表达式 任意文本 表达式、模板、匹配号
JSON 提取器 JSON 响应 JSONPath、默认值
XPath 提取器 XML/HTML XPath 表达式
CSS/JQuery 提取器 HTML 选择器

会话管理

HTTP Cookie 管理器自动保存与发送 Cookie,维持会话;对需要手动传递的会话标识(如 CSRF token),用提取器捕获后通过变量引用。会话管理要点:确认 cookie 域与路径配置正确;多线程下每个线程独立会话,避免串扰;分布式测试时注意 cookie 在各节点的一致性。

关联完整示例

以登录获取 token 为例:登录请求后添加 JSON 提取器,JSONPath 设为 .data.token,变量名 token;后续请求在 HTTP 头管理器中添加 Authorization: Bearer {token}。若响应为 XML 或自定义文本,改用正则表达式提取器:表达式 token\"[\"],模板 1。关联成功的关键是提取器路径与响应结构匹配,可用查看结果树确认提取值。

会话保持注意

使用 HTTP Cookie 管理器后,JMeter 自动维护每个线程的 cookie 集合。注意:跨线程组共享登录态需手动传递 token(通过属性 {__setProperty} 与 {__property}),cookie 管理器默认按线程隔离;HTTPS 场景确认 SSL 证书配置;分布式测试中每个 Slave 独立维护 cookie,需保证脚本一致。

关联的健壮性:动态值可能变化(token 过期、随机值格式变更),提取器要写容错(默认值、多备选路径);断言校验提取值非空,防止空值静默传递;关联提取位置(响应体 vs 响应头)要确认正确。健壮的关联脚本在接口调整时也能快速定位问题。

会话安全

会话管理涉及安全细节:token 通过 HTTPS 传输(避免明文);cookie 的 Secure/HttpOnly 属性确认;多账号场景避免串号(每个线程独立凭证);会话失效处理(401 时重新登录)。安全规范的会话管理是压测脚本专业性的体现。

总结:关联与会话管理让脚本从"单请求冒烟"走向"全链路真实业务模拟"。掌握正则、JSON、XPath 三类提取器的适用场景,理解 Cookie 管理器与属性传递的会话机制,是搭建复杂业务压测脚本的必备能力。

工程实践中,关联脚本的稳定性直接影响压测成功率:建议把提取器封装为可复用的"公共关联"片段,随接口文档同步维护;每次接口变更后先跑单线程验证关联值,再进入正式压测。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U