Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

JUnit5 + Maven Параллельный запуск тестов и запуск по тегам

execution
parallel
maven
jupiter
junit
Теги: #<Tag:0x00007f7b63a2bcb0> #<Tag:0x00007f7b63a2baf8> #<Tag:0x00007f7b63a2b9b8> #<Tag:0x00007f7b63a2b878> #<Tag:0x00007f7b63a2b738>

(Gordon Freeman) #1

Всем привет!

Вопроса 2, поиском не нашел.

Параллельный запуск по классам (решен)

Был JUnit4 работали тесты параллельно, тут описывал как настроил pom.xml
Selenide+Junit+Maven параллельный запуск

Перешел на JUnit5 теперь не работает параллельный запуск, нашел баг у них, что не работает с surefire plugin
https://github.com/junit-team/junit5/issues/1424
и рекомендуют использоват экспериментальную фичу
https://junit.org/junit5/docs/snapshot/user-guide/#writing-tests-parallel-execution

Кто-то так пробовал ? И как у вас тесты бегают параллельно? Не понял как настроить.

Запуск по тегам (решен)
  1. Запуск по тегам, это причина по которой хотелось JUnit5 попробовать, но что-то не заработало.
    Например вот проект
    https://github.com/13Dima13/googleTest
    Так выглядит pom.xml https://github.com/13Dima13/G/blob/master/pom.xml
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${maven.surefire.plugin}</version>
        <configuration>
          <parallel>all</parallel>
          <perCoreThreadCount>true</perCoreThreadCount>
          <threadCount>6</threadCount>
          <perCoreThreadCount>false</perCoreThreadCount>
          <redirectTestOutputToFile>true</redirectTestOutputToFile>
          <properties>
            <includeTags>${tag}</includeTags>
          </properties>
        </configuration>
      </plugin>
    </plugins>
  </build>

И вот пример теста https://github.com/13Dima13/G/blob/master/src/test/java/com/example/project/TestThreads.java

    @Test
    @Tag("smoke")
    public void test1() {
        open("https://mvnrepository.com/artifact/log4j/log4j/1.2.17");
        $("#maincontent > table > tbody > tr:nth-child(1) > th").waitUntil(Condition.appears, 120000);
        $("#maincontent > table > tbody > tr:nth-child(1) > th").shouldBe(Condition.text("License"));
        assertEquals("Maven Repository: log4j » log4j » 1.2.17", title());
        out.println("test1 Passed");
    }

Запускаю из консоли в IDEA

mvn -Dtag=smoke test

Запускаются все тесты из класса public class TTT, а не тот один, что помечен тегом.


(Gordon Freeman) #2

Ответ на вопрос 2

Запуск по тегам
Получен, надо в pom.xml добавить еще пару зависимостей, шарю кому интересно

	<build>
		<plugins>
			<!-- JUnit 5 requires Surefire version 2.22.0 or higher -->
			<plugin>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.22.0</version>
                <configuration>
                    <properties>
                        <includeTags>${tag}</includeTags>
                    </properties>
                </configuration>
				<dependencies>
					<dependency>
						<groupId>org.junit.platform</groupId>
						<artifactId>junit-platform-surefire-provider</artifactId>
						<version>1.2.0</version>
					</dependency>
					<dependency>
						<groupId>org.junit.jupiter</groupId>
						<artifactId>junit-jupiter-engine</artifactId>
						<version>${junit.jupiter.version}</version>
					</dependency>
				</dependencies>
			</plugin>
		</plugins>
	</build>

(Gordon Freeman) #3

Вобщем параллельный запуск по методам в JUnit5 не работает, работает только по классам, для этого в pom.xml делаем такой конфиг

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.0</version>
            <configuration>
                <forkCount>4</forkCount>
                <reuseForks>true</reuseForks>
                <properties>
                    <includeTags>${tag}</includeTags>
                </properties>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.junit.platform</groupId>
                    <artifactId>junit-platform-surefire-provider</artifactId>
                    <version>${junit.platform.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.junit.jupiter</groupId>
                    <artifactId>junit-jupiter-engine</artifactId>
                    <version>${junit.jupiter.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.maven.surefire</groupId>
                    <artifactId>surefire-logger-api</artifactId>
                    <version>2.21.0</version>
                </dependency>
            </dependencies>
        </plugin>

Соответственно будет на каждый класс создан инстанс браузера в кол-ве не более 4х штук.