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

JMeter负载测试:如何实现HTTP登录仅执行一次,其余请求循环?

JMeter实现全局单次登录获取JWT方案

方法1:Setup Thread Group全局单次登录(推荐)

这个方案能确保登录请求在所有业务线程启动前仅执行一次,适配几百线程的高并发场景:

  • 添加Setup Thread Group,设置线程数=1、循环次数=1,内部放置登录请求。
  • 在登录请求后添加JSON Extractor,提取AuthorizationToken,变量名设为auth_token。
  • 紧接着添加JSR223 PostProcessor,将提取的token存入全局属性:
    props.put("GLOBAL_AUTH_TOKEN", vars.get("auth_token"))
    
  • 回到你的主业务线程组(含Transaction Controller和Throughput Controller的那个),在所有业务请求前添加JSR223 PreProcessor,取出全局token并设置为线程变量:
    vars.put("auth_token", props.get("GLOBAL_AUTH_TOKEN"))
    
  • 所有需要JWT的请求,在HTTP Header Manager中引用${auth_token}即可。

方法2:整合到现有线程组实现单次登录

如果必须将登录逻辑放在现有业务线程组内,可通过线程编号判断+全局变量共享实现:

  • 在现有线程组最前端添加Once Only Controller,内部放置登录请求和JSON Extractor(提取auth_token)。
  • 在Once Only Controller内添加JSR223 PostProcessor,仅让第一个线程存储全局token:
    if (ctx.getThreadNum() == 0) {
        props.put("GLOBAL_AUTH_TOKEN", vars.get("auth_token"))
    }
    
  • 在业务请求前添加JSR223 PreProcessor,让其他线程等待全局token生成后再执行:
    while (!props.containsKey("GLOBAL_AUTH_TOKEN")) {
        sleep(100)
    }
    vars.put("auth_token", props.get("GLOBAL_AUTH_TOKEN"))
    
  • 业务请求中正常引用${auth_token}。

核心注意事项

  • vars是线程局部变量,仅当前线程可见;props是JMeter全局属性,所有线程共享,必须用props存储全局JWT。
  • 几百线程场景下优先选方法1,避免线程等待可能引发的启动延迟问题。
  • 确保登录请求的循环次数设为1,不受其他控制器的循环/比例配置影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 06:43:30