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

如何使用JMeter按指定间隔重新生成OAuth Access Token并避免重复请求?

解决OAuth Token定时刷新&避免重复认证请求的方案

核心思路

借助JMeter的全局属性、条件判断和临界区控制,确保仅当Token失效或未初始化时触发认证请求,同时避免多线程下重复发送认证请求。

具体操作步骤

  • 初始化Token过期时间戳
    测试计划启动时,先通过函数设置全局的Token过期初始时间为0:

    __setProperty(token_expire_time, 0, )
    
  • 添加Token有效性判断开关
    在所有需要使用Token的业务API请求前,插入If Controller,填写判断条件:

    ${__jexl3(${__property(token_expire_time,,0)} < ${__time(,,)},)} || ${__jexl3("${__property(access_token,,)}" == "",)}
    

    该条件会在Token未存储,或当前时间已超过过期时间时,触发认证流程。

  • 在判断开关内配置认证逻辑

    • 放入获取Access Token的HTTP请求
    • 使用JSON Extractor从返回结果中提取access_token和expires_in(通常为过期秒数,比如3600)
    • 添加JSR223 PostProcessor,计算并更新全局Token及过期时间戳:
      def token = vars.get("access_token")
      def expiresIn = vars.get("expires_in").toInteger()
      // 提前1分钟刷新,避免Token刚好过期时请求失败
      def expireTime = System.currentTimeMillis() + (expiresIn * 1000) - 60000
      props.put("access_token", token)
      props.put("token_expire_time", expireTime.toString())
      
  • 多线程下避免重复认证请求
    将认证相关的请求和处理器全部放入Critical Section Controller中,确保同一时间只有一个线程执行认证操作,其他线程会等待Token更新完成后再继续。

  • 业务API调用Token
    在需要携带Token的请求头或参数中,直接通过${__property(access_token,,)}获取全局属性中的Token即可。

注意事项

  • 不要在各线程组单独处理Token刷新,统一通过全局属性管理,确保所有线程共享同一有效Token
  • 提前刷新的时间可根据实际API校验严格程度调整,比如提前30秒或2分钟
  • 若测试时长超过1小时,该逻辑会自动触发Token刷新,无需手动干预

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:55:18