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

Karate 0.9.3升级至1.2.0后两批测试结果无法合并问题

Karate 1.2.0多批次测试运行结果无法合并问题解决方案

问题表现

  • Karate版本从V0.9.3升级至V1.2.0后,分两批执行的测试用例结果无法自动合并到同一份测试报告
  • 测试执行逻辑:第一批任务完成后执行第一组API测试(Runner 1),第二批任务完成后执行第二组API测试(Runner 2,对应新增特性文件)
  • V0.9.3版本行为:两次Runner.parallel指向同一输出目录时,测试结果自动累加,最终报告包含两个批次的所有测试内容
  • V1.2.0版本行为:每次测试执行前会自动清空目标输出目录下已有的Karate JSON结果文件,最终报告仅保留最后一次运行的测试结果

V0.9.3版本原有实现代码

Results results1 = Runner.parallel(
                Arrays.asList("@tag1,@tag2", "@ignore"),
                Collections.singletonList("classpath:features"),
                5,
                "target/sources-rapports");

int totalFailCount = results1.getFailCount();

Results results2 = Runner.parallel(Arrays.asList("@tag3,@tag4", "@ignore"),Collections.singletonList("classpath:features"),5,"target/sources-rapports");

totalFailCount += results2.getFailCount();

generateReport(results2.getReportDir());

V1.2.0版本默认Builder写法

Runner.path("classpath:features")
        .tags(Arrays.asList("@tag1,@tag2", "@ignore"))
        .outputCucumberJson(true)
        .parallel(5);

可行解决方案

方案一:分目录存储结果后手动聚合

  • 两次测试运行分别指定独立的输出目录,避免后一次运行清空前一次的结果文件
  • 两次执行全部完成后,将两个目录下所有karate-*.json结果文件复制到统一的汇总目录,再基于该目录生成全量报告
    示例代码:
// 第一批测试,指定独立输出目录
Results results1 = Runner.path("classpath:features")
        .tags(Arrays.asList("@tag1,@tag2", "@ignore"))
        .outputCucumberJson(true)
        .reportDir("target/sources-rapports/batch1")
        .parallel(5);
int totalFailCount = results1.getFailCount();

// 第二批测试,指定另一个独立输出目录
Results results2 = Runner.path("classpath:features")
        .tags(Arrays.asList("@tag3,@tag4", "@ignore"))
        .outputCucumberJson(true)
        .reportDir("target/sources-rapports/batch2")
        .parallel(5);
totalFailCount += results2.getFailCount();

// 通过Java IO将batch1、batch2目录下所有JSON结果文件复制到target/sources-rapports/final目录
// 基于汇总目录生成最终报告
generateReport("target/sources-rapports/final");

方案二:使用内置Results合并API(推荐)

  • V1.2.0版本提供了Results.of()方法,支持直接合并多个批次运行返回的Results对象,无需手动处理文件复制,代码改动量最小
    示例代码:
// 执行第一批测试
Results results1 = Runner.path("classpath:features")
        .tags(Arrays.asList("@tag1,@tag2", "@ignore"))
        .outputCucumberJson(true)
        .parallel(5);

// 执行第二批测试
Results results2 = Runner.path("classpath:features")
        .tags(Arrays.asList("@tag3,@tag4", "@ignore"))
        .outputCucumberJson(true)
        .parallel(5);

// 合并两个批次的测试结果
Results mergedResults = Results.of(results1, results2);
int totalFailCount = mergedResults.getFailCount();
// 基于合并后的结果生成全量报告
generateReport(mergedResults.getReportDir());

版本差异说明:V1.2.0默认新增输出目录预清理逻辑,目的是避免历史测试残留的脏数据干扰本次运行结果,因此不再支持旧版本同目录直接追加写入结果的行为,上述两种方案均可完全复现旧版本的报告合并效果。

内容的提问来源于stack exchange,提问作者Alexis G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:51:27