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

如何实现Karate测试的Feature串行、Scenario并行执行?

实现Karate「Feature串行、Scenario并行」的方案

针对你提到的场景——某个参数化Feature需要与其他所有Feature串行执行,但自身内部Scenario可并行——可以通过分阶段执行+标签隔离的方式实现,具体如下:

核心思路

将测试用例划分为两组:

  • 组1:所有普通Feature(无全局影响的用例),保持默认的Feature级并行执行
  • 组2:那个特殊的全局查询Feature,单独执行且开启其内部Scenario并行
    让这两组串行执行(先跑组1再跑组2,或反之),既保证特殊Feature与其他用例互不干扰,又能利用其内部Scenario的并行性提速。

具体实现方式

方式1:通过构建工具(Maven/Gradle)分任务执行

  1. 给特殊Feature打专属标签并开启内部并行:

    @global-query
    Feature: 全局查询基础功能(参数化)
      parallel=true
      Background:
        * url 'http://api.example.com/query'
      Scenario Outline: 测试不同参数的全局查询
        Given param key = '<key>'
        When method get
        Then status 200
        Examples:
          | key   |
          | id1   |
          | name2 |
          | type3 |
    
  2. 在Maven中配置两个串行执行的测试任务:

    <plugin>
      <groupId>com.intuit.karate</groupId>
      <artifactId>karate-maven-plugin</artifactId>
      <version>${karate.version}</version>
      <executions>
        <execution>
          <id>run-normal-tests</id>
          <phase>test</phase>
          <goals>
            <goal>test</goal>
          </goals>
          <configuration>
            <tags>~@global-query</tags> <!-- 排除特殊标签的用例 -->
            <parallel>true</parallel>
            <threads>5</threads> <!-- 根据资源调整并行线程数 -->
          </configuration>
        </execution>
        <execution>
          <id>run-global-query-tests</id>
          <phase>test</phase>
          <goals>
            <goal>test</goal>
          </goals>
          <configuration>
            <tags>@global-query</tags> <!-- 仅执行特殊标签的用例 -->
          </configuration>
        </execution>
      </executions>
    </plugin>
    

    Maven会按配置顺序串行执行两个任务,既隔离了特殊Feature与普通用例,又让特殊Feature内部Scenario并行运行。

方式2:自定义Java运行器控制执行顺序

如果需要更灵活的逻辑,可编写自定义运行器:

import com.intuit.karate.Runner;

public class TestSuite {
    public static void main(String[] args) {
        // 第一步:并行执行所有普通Feature(排除特殊标签)
        Runner.path("classpath:features")
              .tags("~@global-query")
              .parallel(5);
        
        // 第二步:单独执行特殊Feature,开启内部Scenario并行
        Runner.path("classpath:features/global-query.feature")
              .configProperty("karate.parallel", "true")
              .parallel(3); // 设置内部Scenario并行线程数
    }
}

运行该类即可实现两组用例的串行执行,同时保证特殊Feature内部的并行效率。

注意事项

  • 确认特殊Feature的内部Scenario无相互依赖或全局状态修改,避免并行时出现数据污染
  • 根据测试环境的CPU、内存及API并发限制,合理调整并行线程数,避免资源过载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:20:29