如何配置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
相关产品推荐
相关产品推荐

