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

callSingle()返回缓存结果异常:本地正常DevOps流水线报错

问题:Karate callSingle() 在DevOps流水线中抛出缓存结果异常

本地调用GetBearerToken.feature文件可正常运行,但在DevOps流水线环境中,karate-config.js里通过callSingle()调用该feature时,触发缓存结果异常。

相关代码如下:

function fun() {
    karate.configure('ssl', true);
    karate.configure('report', {
        showLog : true,
        showAllSteps : false
    });

    const baseUrl = '';
    const apiUrl = karate.properties['api.url'] ?? `${baseUrl}/admin/api`;
    const bearerToken = karate.callSingle('classpath:websakrunners/GetBearerToken.feature', {
        authURL      : karate.properties['auth.url'] ?? `${baseUrl}/identityserver/connect/token`,
        clientId     : karate.properties['auth.client_id'] ?? 'auto',
        clientSecret : karate.properties['auth.client_secret'] ?? 'auto1234',
    });

    const config = {
        accessToken : bearerToken.finalBearerToken
    };

    return config;
}

排查与解决方案

  • 对齐Karate版本:确保DevOps流水线使用的Karate版本和本地完全一致,不同版本的callSingle缓存逻辑可能存在差异,版本不匹配是常见诱因。
  • 临时替换callSingle为call:将karate.callSingle替换为karate.call,如果流水线恢复正常,说明缓存机制在当前流水线环境中存在触发异常的条件,后续可针对性优化缓存逻辑。
  • 控制流水线执行并发:callSingle是单例执行逻辑,若流水线中存在并行测试任务,可能导致缓存初始化冲突。确保测试任务串行执行,或在并行模式下单独处理token获取逻辑。
  • 验证feature返回值有效性:检查流水线环境中GetBearerToken.feature是否能正常生成finalBearerToken,排查是否因环境变量缺失、网络连通性问题导致返回值异常,进而触发缓存读取失败。
  • 强制清理缓存:在karate-config.js开头添加karate.clearCache(),强制清理环境中可能遗留的旧缓存,再执行token获取操作:
function fun() {
    karate.configure('ssl', true);
    karate.configure('report', {
        showLog : true,
        showAllSteps : false
    });

    // 清理缓存避免遗留问题
    karate.clearCache();

    const baseUrl = '';
    const apiUrl = karate.properties['api.url'] ?? `${baseUrl}/admin/api`;
    const bearerToken = karate.callSingle('classpath:websakrunners/GetBearerToken.feature', {
        authURL      : karate.properties['auth.url'] ?? `${baseUrl}/identityserver/connect/token`,
        clientId     : karate.properties['auth.client_id'] ?? 'auto',
        clientSecret : karate.properties['auth.client_secret'] ?? 'auto1234',
    });

    const config = {
        accessToken : bearerToken.finalBearerToken
    };

    return config;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:16:01