t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как распараллелить тесты по фичам в Cucumber ?

Теги: #<Tag:0x00007f07fb77b8c0> #<Tag:0x00007f07fb77b668>

Привет. Я использую 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 файлы? Надо чтобы фичи запускались параллелно. А сценарии в рамках каждой фичи последовательно.

ннадо <parallel>classes</parallel>

Для справки https://cucumber.io/docs/guides/parallel-execution/#testng

1 Симпатия

Попробовал classes :

но, ничего не изменилось :sleepy:

P.S.: Там, кстати, по твоей ссылке написано:


наверно, надо ещё на каждый поток свой раннер делать. У меня то сейчас один раннер…

Попробовал на junit - всё работает как надо. надо переходить на junit.
изображение

Для testng используется @DataProvider - а тут невозможно контролировать запуск по фичам, тут всё в одном скопе получается.

2 Симпатий