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

如何配置JMeter实现24小时持续调用Validate Token并定时更新Access Token?

24小时Token验证Soak测试实现方案

核心思路

不用拆分多个线程组,单线程组结合定时器、循环控制器和逻辑判断组件就能实现Token自动刷新+持续验证的逻辑,精准匹配12小时的Token有效期窗口。

具体配置步骤

1. 线程组基础配置

  • 线程数:1(若需多并发验证,可按需调整,Token刷新逻辑全局共用)
  • 循环次数:永久(依赖后续调度器控制总时长)
  • 调度器:勾选后设置持续时间为86400秒(对应24小时)

2. 实现Token自动刷新逻辑

用While控制器配合时间函数控制每12小时刷新一次Token:

  • 在测试计划最前端添加BeanShell预处理程序,初始化全局时间变量:
    long startTime = System.currentTimeMillis();
    long totalTestTime = 86400000; // 24小时总时长
    long tokenExpireTime = 43200000; // 12小时Token有效期
    props.put("testEndTime", String.valueOf(startTime + totalTestTime));
    props.put("lastRefreshTime", String.valueOf(startTime));
    
  • 添加While控制器,条件设为:${__jexl3(${__time(,)} < ${__property(testEndTime,)},)}
  • 在While控制器内添加If控制器,判断是否需要刷新Token:
    条件:${__jexl3(${__time(,)} - ${__property(lastRefreshTime,)} >= ${__property(tokenExpireTime,)},)}
    • 满足条件时,执行GET Token请求:
      • 用JSON提取器提取返回的Access Token,存入变量access_token
      • 添加BeanShell后置处理器更新刷新时间:
        props.put("lastRefreshTime", String.valueOf(System.currentTimeMillis()));
        

3. 持续调用Validate Token

  • 在While控制器内(If控制器之外)添加Loop Controller,设置超大循环次数(如100000),确保12小时内足够循环
  • 在Loop Controller中添加Validate Token请求,将${access_token}带入请求头或参数
  • 添加固定定时器,设置调用间隔(如1000毫秒,即每秒调用一次,可根据压测需求调整)

4. 容错处理

  • 为GET Token请求添加重试控制器(重试次数设为3)+响应断言,确保Token获取失败时自动重试
  • 为Validate Token请求添加响应断言,若返回Token过期(如401状态码),触发紧急刷新:
    • 添加If控制器,判断响应码为401时,执行GET Token请求并更新lastRefreshTime

5. 简化替代方案(适合精度要求不高的场景)

直接用两个线程组拆分逻辑:

  • 线程组1(Token刷新):循环次数设为2,第一次延迟0毫秒,第二次延迟43200000毫秒(12小时),提取Token后用__setProperty(access_token,${token_value})存为全局变量
  • 线程组2(验证请求):循环次数设为永久,调度器设置24小时,每次请求用__property(access_token,)调用全局Token

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:25:16