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

Karate API生成Cucumber HTML报告时场景计数不显示问题

Cucumber HTML报告Runs字段显示1/1效果截图

问题描述

当前生成的Cucumber HTML报告中Runs字段显示为1/1,使用该报告时是否有配置方案可以展示执行的场景总数量?
对应TestRunner代码如下:

public class TestRunner {

  @Test
    public void testParallel() {
        Results results = Runner.path("src/test/java/Features/KarateTest.feature").parallel(1);
        generateReport(results.getReportDir());
        assertTrue(results.getErrorMessages(), results.getFailCount() == 0);
    }

  public static void generateReport(String karateOutputPath) {
        Collection<File> jsonFiles = FileUtils.listFiles(new File(karateOutputPath), new String[] { "json" }, true);
        List<String> jsonPaths = new ArrayList<String>(jsonFiles.size());
        jsonFiles.forEach(file -> jsonPaths.add(file.getAbsolutePath()));
        Configuration config = new Configuration(new File("target"), "Karate_Test");
        ReportBuilder reportBuilder = new ReportBuilder(jsonPaths, config);
        reportBuilder.generateReports();
    }

}
解答

出现这个显示问题的核心原因有两个:一是低版本cucumber-reporting库对Karate输出的JSON结果文件存在兼容问题,默认将整个feature文件识别为单个运行单元;二是默认配置下Runs字段统计的是测试运行器启动次数,不是场景维度的执行数。可以通过以下配置调整解决:

  • 先将项目中引入的cucumber-reporting依赖升级到5.7.0及以上版本,修复Karate结果文件的场景解析兼容问题。
  • 修改报告初始化配置,开启场景粒度的统计规则,在初始化Configuration对象后追加配置:
    // 开启按场景维度统计执行数
    config.setCountScenarios(true);
    config.setMergeFeaturesById(true);
    config.setRunWithBackgroundHooks(false);
    
  • 调整JSON文件扫描逻辑,过滤掉Karate自动生成的聚合结果文件(比如karate-summary-json.txt),只保留单个feature执行输出的独立JSON文件传入ReportBuilder,避免重复统计导致计数异常。

完成以上调整后重新执行测试,报告的Runs字段就会正确展示「执行成功场景数/总场景数」的统计结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:54:23