Привет. Я использую Cucumber 6, TestNG, Maven.
Пытаюсь распараллелить тесты. Получилось пока распараллелить сами тестовые сценарии, но мне данный вариант не подходит. Мне надо запускать параллельно фичи, так как в рамках каждой фичи я собираю сценарии, которые должны проходить последовательно.
Для примера создал мелкий тестовый проект.
Структура проекта такая:
В проекте есть класс со степами CommonSteps, запускатор RunTest, и 4 фича файла (каждый содержит сценарии).
В pom-файле в разделе dependencies подключил Cucumber и TestNG:
<!-- Cucumber -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>6.5.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-testng</artifactId>
<version>6.5.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-core</artifactId>
<version>6.5.0</version>
</dependency>
Ниже, в разделе build добавил 2 плагина (указал количество потоков = 5):
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<encoding>UTF-8</encoding>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
<!-- Для распараллеливания использую maven-surefire-plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<perCoreThreadCount>false</perCoreThreadCount>
<parallel>methods</parallel>
<testFailureIgnore>true</testFailureIgnore>
<properties>
<property>
<name>dataproviderthreadcount</name>
<value>5</value> <!-- КОЛИЧЕСТВО ПОТОКОВ -->
</property>
</properties>
<forkCount>1</forkCount>
</configuration>
</plugin>
</plugins>
</build>
Класс с шагами:
package ru.company.web.at.steps;
import io.cucumber.java.ru.И;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class CommonSteps {
public static final Logger log = LogManager.getLogger(CommonSteps.class);
@И("^выполнить ожидание в течение (\\d+) секунд$")
public void waitForSeconds(final long seconds) {
log.debug("------------------------------------------------------");
log.debug("ШАГ: выполнить ожидание. Количество секунд: " + seconds);
try {
Thread.sleep(1000 * seconds);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@И("^вывести на консоль строку \"([^\"]+)\"$")
public void writeStr(final String str) {
log.debug("------------------------------------------------------");
log.debug("ШАГ: вывести на консоль строку: '" + str + "'");
}
}
Класс запускатор:
import io.cucumber.testng.AbstractTestNGCucumberTests;
import io.cucumber.testng.CucumberOptions;
import org.testng.annotations.DataProvider;
@CucumberOptions(
tags = "@all",
features = "src/test/resources/features",
glue = {"ru.company"}
)
public class RunTest extends AbstractTestNGCucumberTests {
@Override
@DataProvider(parallel = true)
public Object[][] scenarios() {
return super.scenarios();
}
}
Feature-файлы все одинаковые, каждый содержит по 3 сценария, например:
Запускаю Мавеном, командой mvn clean test
Далее смотрю логи в консоли. Видно, что параллелятся сценарии:
Можно ли как-то распараллелить сами feature файлы? Надо чтобы фичи запускались параллелно. А сценарии в рамках каждой фичи последовательно.