如何在JMeter跨线程组请求中使用JSESSIONID作为请求头Cookie
JMeter的线程组是独立执行的,默认情况下Cookie Manager不会跨线程组共享Cookie——即便你设置了CookieManager.save.cookies=true,生成的Cookie变量也只能在当前线程组内访问。下面是具体的解决步骤:
1. 将Login线程组的Cookie存为全局属性
假设你已经通过提取器拿到了JSESSIONID的值(或者直接用CookieManager.save.cookies=true生成的${COOKIE_JSESSIONID}变量),在Login线程组里做以下操作之一:
- 用JSR223取样器:添加一个JSR223取样器,执行代码把Cookie值存为全局JMeter属性:
props.put("SESSION_ID", vars.get("JSESSIONID")); // 如果用自动生成的COOKIE_JSESSIONID变量,就改成vars.get("COOKIE_JSESSIONID") - 用内置函数:在Login线程组的任意取样器后,直接插入函数完成全局属性设置:
第三个参数留空表示不打印日志,需要的话可以填${__setProperty(SESSION_ID, ${JSESSIONID},)}true。
2. 在Search线程组中调用全局属性
你有两种方式把Cookie加到后续请求里:
方式一:手动添加请求头
给Search线程组的HTTP请求添加HTTP信息头管理器,新增一个头字段:
- 名称:
Cookie - 值:
JSESSIONID=${__P(SESSION_ID,)}
(__P函数用来读取全局属性,第二个参数是默认值,留空即可)
方式二:添加到Cookie Manager
在Search线程组的HTTP Cookie Manager中点击「添加」按钮,填写:
- 名称:
JSESSIONID - 值:
${__P(SESSION_ID,)} - 域、路径等可根据实际情况填写,或者留空让JMeter自动匹配
额外注意
- 确保Login线程组在Search线程组之前执行,JMeter默认按线程组的上下顺序执行,无需额外设置,除非你手动修改了执行顺序。
- 如果Cookie包含Path、Domain等其他属性,可以一起提取并拼接成完整的Cookie字符串,再存为全局属性使用。
内容的提问来源于stack exchange,提问作者Shankar PK
相关产品推荐
相关产品推荐

