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

JMeter脚本每2小时刷新Token报错:Long.minus()参数不匹配求助

JMeter每2小时自动刷新Token解决方案

问题根源

报错groovy.lang.MissingMethodException: No signature of method: java.lang.Long.minus() is applicable for argument types: (String)是因为类型不匹配:你通过vars.put("tokenGenerationTime", tokenGenerationTime)存储的是字符串类型时间戳,但System.currentTimeMillis()返回Long类型,直接做减法会触发Long与String的非法运算。

修复步骤

1. 修正If控制器的时间判断逻辑

将If控制器的条件改为Groovy表达式,把存储的字符串时间戳转为Long类型后再计算时间差:

${__groovy((System.currentTimeMillis() - Long.parseLong(vars.get("tokenGenerationTime"))) >= 7200000,)}
  • 测试阶段可将7200000(2小时对应的毫秒数)改为60000(1分钟)快速验证效果。

2. 刷新Token后更新时间戳

在重新获取Token的HTTP请求后添加JSR223 PostProcessor,执行以下代码更新tokenGenerationTime为当前时间:

long newTokenTime = System.currentTimeMillis();
vars.put("tokenGenerationTime", String.valueOf(newTokenTime));
log.info("Refreshed Token Generation Time: " + newTokenTime);

(保留Once Only Controller里的JSR223代码,用于初始化首次Token生成时间)

3. 确认While控制器配置

将While控制器的条件设为true,确保业务请求持续循环执行,每次循环优先检查是否需要刷新Token。

完整脚本结构

Thread Group
├─ Once Only Controller
│  ├─ 获取Token的HTTP请求
│  └─ JSR223 PostProcessor(初始化tokenGenerationTime)
└─ While Controller(条件:true)
   ├─ If Controller(时间差判断表达式)
   │  ├─ 获取Token的HTTP请求
   │  └─ JSR223 PostProcessor(更新tokenGenerationTime)
   ├─ 业务请求(携带Token的接口)
   └─ 定时器(按需设置业务请求间隔)

验证方法

运行脚本后查看JMeter日志:

  • 首次执行会打印初始化的Token生成时间
  • 达到设定时间阈值后,会打印刷新后的Token生成时间,同时自动发起Token刷新请求
  • 业务请求持续执行,每次循环自动判断并触发Token刷新逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:43:22