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

如何在长时间运行的Karate测试中自动刷新Token?

解决Karate令牌自动刷新问题

针对批量执行大量Feature或单场景执行超时导致令牌过期的问题,你可以通过封装带过期检查的令牌获取逻辑,实现每25分钟自动刷新令牌,具体方案如下:

1. 修改karate-config.js配置

将原一次性获取令牌的逻辑,改为带缓存和过期检查的动态获取机制:

// 初始化令牌缓存,存储各角色令牌及过期时间戳
var tokenCache = {
  admin: { token: null, expiresAt: 0 },
  user: { token: null, expiresAt: 0 }
};

// 刷新令牌核心函数:调用GetTokens.feature获取新令牌并更新缓存
function refreshTokens() {
  // 用karate.call而非callSingle,确保每次刷新都重新获取令牌
  var jwt = karate.call("classpath:GetTokens.feature", config);
  tokenCache.admin.token = jwt.admin;
  tokenCache.user.token = jwt.user;
  // 设置过期时间为当前时间 + 25分钟(转换为毫秒),提前5分钟刷新避免过期
  var currentTime = new Date().getTime();
  tokenCache.admin.expiresAt = currentTime + 25 * 60 * 1000;
  tokenCache.user.expiresAt = currentTime + 25 * 60 * 1000;
}

// 封装管理员有效令牌获取函数
config.getValidAdminToken = function() {
  var currentTime = new Date().getTime();
  // 如果令牌未初始化或已到刷新时间,重新获取
  if (!tokenCache.admin.token || currentTime >= tokenCache.admin.expiresAt) {
    refreshTokens();
  }
  return tokenCache.admin.token;
};

// 封装普通用户有效令牌获取函数
config.getValidUserToken = function() {
  var currentTime = new Date().getTime();
  if (!tokenCache.user.token || currentTime >= tokenCache.user.expiresAt) {
    refreshTokens();
  }
  return tokenCache.user.token;
};

// 初始化时先获取一次令牌
refreshTokens();

2. 在Feature文件中使用动态令牌

不再直接使用config.admin或config.user,而是调用封装好的获取函数获取有效令牌:

Feature: 示例接口测试

Scenario: 管理员访问接口
    Given url baseUrl + "/admin/api"
    And header Authorization = "Bearer " + config.getValidAdminToken()
    When method get
    Then status 200

Scenario: 普通用户访问接口
    Given url baseUrl + "/user/api"
    And header Authorization = "Bearer " + config.getValidUserToken()
    When method get
    Then status 200

方案说明

  • 自动过期检查:每次使用令牌前都会校验当前时间是否超过预设的25分钟刷新阈值,过期则自动调用GetTokens.feature获取新令牌。
  • 提前刷新:设置25分钟刷新间隔,比令牌30分钟有效期提前5分钟,避免因网络延迟或场景执行时长导致令牌在请求中途过期。
  • 全局复用逻辑:所有Feature文件统一调用config.getValidAdminToken()/config.getValidUserToken(),无需在每个文件单独处理刷新逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:48:24