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
相关产品推荐
相关产品推荐

