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

Karate中不使用标签批量运行指定场景失败,单个可运行如何解决?

问题:批量传入带行号的Feature路径时无场景执行

我需要实现从数据库读取存储了路径和行号的特定场景,将这些场景注入到TestRunner中执行。但运行代码时,传入多个带行号的路径列表没有任何场景执行,仅传入单个路径时可以正常运行。

测试代码

@Test
@SuppressWarnings("unchecked")
public void testParallel() {
  Assertions.assertThat(Runtime.version().feature())
      .as("Java version should be 11").isEqualTo(11);

  // 模拟从数据库获取场景
  List<String> paths = new ArrayList<>();
  paths.add("src/test/java/feature/test.feature:4");
  paths.add("src/test/java/feature/test.feature:12");

  Builder runnerBuilder = new Builder();
  runnerBuilder.path(paths);
  runnerBuilder.outputCucumberJson(true);
  runnerBuilder.outputJunitXml(true);
  runnerBuilder.hooks(getKarateHooks());
  Results results = runnerBuilder.parallel(1);

  ...
}

相关源码(Karate Runner类的path方法)

public T path(String... value) {
  this.path(Arrays.asList(value));
  return this;
}

public T path(List<String> value) {
  if (value != null) {
    if (this.paths == null) {
      this.paths = new ArrayList();
    }

    this.paths.addAll(value);
  }

  return this;
}

解决方案

问题出在Karate对带行号路径的解析逻辑上:带行号的场景路径需要通过单独的path调用逐个传入,而不是一次性传入整个列表。

修改代码,通过循环逐个添加路径:

@Test
@SuppressWarnings("unchecked")
public void testParallel() {
  Assertions.assertThat(Runtime.version().feature())
      .as("Java version should be 11").isEqualTo(11);

  // 模拟从数据库获取场景
  List<String> paths = new ArrayList<>();
  paths.add("src/test/java/feature/test.feature:4");
  paths.add("src/test/java/feature/test.feature:12");

  Builder runnerBuilder = new Builder();
  // 逐个添加每个带行号的路径
  for (String path : paths) {
    runnerBuilder.path(path);
  }
  runnerBuilder.outputCucumberJson(true);
  runnerBuilder.outputJunitXml(true);
  runnerBuilder.hooks(getKarateHooks());
  Results results = runnerBuilder.parallel(1);

  ...
}

原因说明

当你一次性传入包含多个带行号路径的列表时,Karate会将整个列表视为一组Feature文件路径,不会解析每个路径中的行号信息。而通过循环逐个调用path(String)方法,每个带行号的路径都会被单独解析为一个特定场景的定位,从而被正确执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:33:25