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

问题描述
当前生成的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
相关产品推荐
相关产品推荐

