You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter多线程场景下后续线程组重复使用最后一个CSRF Token问题咨询

解决JMeter跨线程组线程私有CSRF Token传递问题

问题根源

你用JMeter属性存储Token,但属性是全局共享的,10个线程生成的Token会依次覆盖,最终所有后续线程组只能拿到最后一个线程生成的Token。而线程变量(用户定义变量)是线程私有的,但默认无法跨线程组直接访问,需要通过以下方法实现线程级别的Token传递。

解决方案

方法1:用线程编号命名全局属性,实现线程专属Token存储

在Login采样器的后置处理器(比如正则表达式提取器/JSON提取器)中,先把Token提取到线程变量csrfToken,再添加BeanShell后置处理器执行以下代码,将每个线程的Token存入带线程编号的全局属性:

String threadId = ctx.getThreadNum().toString();
props.put("csrfToken_" + threadId, vars.get("csrfToken"));

后续线程组的请求头中,通过线程编号匹配对应属性获取Token:

${__P(csrfToken_${__threadNum},)}

方法2:合并线程组,直接使用线程变量传递

如果业务逻辑允许,将Thread Group1、2、3合并到同一个线程组中,这样线程变量csrfToken可直接在后续采样器中使用,每个线程会保留自己生成的Token,无需跨组传递。

方法3:借助Inter-Thread Communication插件实现线程专属队列传递

安装该插件后:

  • 在Login采样器后添加Put Data to Queue元件,设置队列名为csrfTokens,数据填${csrfToken},勾选Put data per thread
  • 在后续线程组的请求头前,添加Get Data from Queue元件,队列名设为csrfTokens,将获取到的Token存入线程变量csrfToken,后续请求头直接使用该变量即可。

注意事项

  • 确保Thread Group1与后续线程组的线程数一致,保证每个线程能匹配到自己生成的Token
  • 若后续线程组需要延迟执行,可添加Test Action元件设置等待时间,确保Thread Group1的所有线程完成Token生成

内容的提问来源于stack exchange,提问作者Shankar PK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 05:52:37