JMeter:如何在单线程组中按时间/次数间隔执行RefreshToken采样器
解决方案:在同一线程组内定时执行Token刷新
当然可以,不用额外线程组就能实现这个需求,下面是几种实用的实现方式:
方式一:用定时器控制执行间隔
- 给
RefreshToken采样器添加Constant Timer,设置线程延迟为60000毫秒(即60秒)。这种方式下,采样器会在测试启动时执行第一次,之后每隔60秒重复执行。 - 若需要首次执行也延迟60秒,改用JSR223 Timer,编写Groovy代码控制:
def lastRun = vars.get("lastRefreshRun") if (!lastRun) { vars.put("lastRefreshRun", String.valueOf(System.currentTimeMillis())) return 60000 } return 60000
方式二:通过条件判断跳过不必要的执行
在RefreshToken采样器前添加JSR223 PreProcessor,用代码判断是否满足刷新条件:
long now = System.currentTimeMillis() long lastRefresh = vars.get("lastRefreshTime") != null ? Long.parseLong(vars.get("lastRefreshTime")) : 0 if (now - lastRefresh < 60000) { sampler.setSkipNext(true) // 跳过当前采样器执行 } else { vars.put("lastRefreshTime", String.valueOf(now)) }
这段代码会让采样器仅在上次刷新超过60秒时才执行,否则直接跳过,不影响其他测试用例的连续运行。
方式三:结合Runtime Controller与调度器
给RefreshToken采样器套一个Runtime Controller,在控制器内启用调度器,设置每隔60秒执行一次。注意要确保该控制器的逻辑不会打断其他测试用例的连续执行流程。
关键注意点
- 刷新Token后,务必将新的Token值存入JMeter变量(比如
${access_token}),其他测试用例直接引用该变量即可。 - 如果单条测试用例执行时长接近或超过60秒,建议将刷新间隔调整为55秒左右,避免Token在测试用例执行过程中过期。
内容的提问来源于stack exchange,提问作者Oleg Tarasenko
相关产品推荐
相关产品推荐

