并行运行黄瓜特征文件中的场景,一次一个特征文件

问题描述

我正在使用 Maven SureFire、TestNG(扩展 AbstractTestNGCucumberTests)和 Cucumber,并且有几个功能文件,每个文件都有几个场景。我希望能够并行运行一个功能文件中的每个场景,但一次只能运行一个功能文件。这可能吗?

举个例子:

Feature file 1
  Scenario 1a
  Scenario 1b
  Scenario 1c

Feature file 2
  Scenario 2a
  Scenario 2b

Feature file 3
  Scenario 3a
  Scenario 3b
  Scenario 3c
  Scenario 3d

我希望场景 1a、1b 和 1c 在功能文件 1 中并行运行。完成后,从功能 2 等运行场景 2a 和 2b。

这是一个测试类,当前一次运行所有功能文件中的所有场景。

@CucumberOptions (
    plugin = {
        "html:target/cucumber-reports","json:target/cucumber.json","usage:target/cucumber-usage.json"
    },tags = "not @disabled",monochrome = true,features = {
         "src/test/resources/features/feature1.feature","src/test/resources/features/feature2.feature","src/test/resources/features/feature3.feature",})
public class AllTests extends AbstractTestNGCucumberTests {

    @Override
    @DataProvider(parallel = true)
    public Object[][] scenarios() {
        return super.scenarios();
    }
}

这是否可以使用配置

谢谢, 斯科特。

解决方法

仅靠配置是不可能的。我这么说的原因是因为您期望从 M <= N 内实现多级并行执行策略,这在今天的 TestNG 中是不可能的。您需要利用套件 xml 文件在更高级别控制并行执行策略,然后可以通过利用 @DataProvider@DataProvider 属性在较低级别进行调整。

完成此操作的最简单方法是执行以下操作:

  1. 为每个功能文件创建一个 Java 类。
  2. 创建一个包含“n”个类的套件文件,并将您的并行策略定义为“none”(这将强制 TestNG 选择每个类并按顺序运行它们)
  3. 不要忘记设置理想的数据提供程序线程数(默认值为 10)并在您的 parallel 中设置属性 parallel = true