ВнСдряй, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠΉ: ΠΎΠΏΡ‹Ρ‚ примСнСния автотСстов Π² Π’Π’Π‘

НашС ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ создаСт ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ автоматичСскиС ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρ‹ для Π²Ρ‹Π²ΠΎΠ΄Π° Π½ΠΎΠ²Ρ‹Ρ… вСрсий ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ΄-срСду. РазумССтся, для этого Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ тСсты. Под ΠΊΠ°Ρ‚ΠΎΠΌ β€” история ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ, Π½Π°Ρ‡Π°Π² с тСстирования Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° локальной машинС, ΠΌΡ‹ дошли Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ запуска автотСстов Π½Π° Selenoid Π² ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π΅ сборки с Allure-ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠΌ Π½Π° GitLab pages ΠΈ Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΊΡ€ΡƒΡ‚ΠΎΠΉ инструмСнт для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ смогут ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

ВнСдряй, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠΉ: ΠΎΠΏΡ‹Ρ‚ примСнСния автотСстов Π² Π’Π’Π‘

Π‘ Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈ

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ автотСсты ΠΈ Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈΡ… Π² ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½, Π½Π°ΠΌ трСбовался Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π³ΠΈΠ±ΠΊΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ΄ наши потрСбности. Π’ ΠΈΠ΄Π΅Π°Π»Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ стандарт для Π΄Π²ΠΈΠΆΠΊΠ° автотСстирования, приспособлСнный ΠΏΠΎΠ΄ встраиваниС автотСстов Π² ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ:

  • Java,
  • Maven,
  • Selenium,
  • Cucumber+JUNIT 4,
  • Allure,
  • GitLab.

ВнСдряй, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠΉ: ΠΎΠΏΡ‹Ρ‚ примСнСния автотСстов Π² Π’Π’Π‘

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Π½Π°Π±ΠΎΡ€? Java β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых популярных языков для автотСстов, ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΈΠΌ Π²Π»Π°Π΄Π΅ΡŽΡ‚ всС Ρ‡Π»Π΅Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Selenium β€” ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Cucumber ΠΆΠ΅, ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π΄ΠΎΠ²Π΅Ρ€ΠΈΠ΅ ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ автотСстов со стороны ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΉ, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ€ΡƒΡ‡Π½Ρ‹ΠΌ тСстированиСм.

ΠžΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ тСсты

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ вСлосипСд, Π·Π° основу Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° ΠΌΡ‹ взяли Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² Π½Π° GitHub ΠΈ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΈΡ… ΠΏΠΎΠ΄ сСбя. Π‘ΠΎΠ·Π΄Π°Π»ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ для Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с ядром Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° автотСстов ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с Gold-ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ автотСстов Π½Π° нашСм ядрС. КаТдая ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Π»Π° Π±Ρ€Π°Ρ‚ΡŒ Gold-ΠΎΠ±Ρ€Π°Π· ΠΈ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π² Π½Π΅ΠΌ тСсты, адаптируя ΠΏΠΎΠ΄ свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π Π°Π·Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ Π² Π±Π°Π½ΠΊΠ΅ GitLab-CI, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ настроили:

  • Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½Ρ‹Π΅ запуски всСх написанных автотСстов ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ;
  • запуски Π² ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π΅ сборки.

Π‘Π½Π°Ρ‡Π°Π»Π° тСстов Π±Ρ‹Π»ΠΎ ΠΌΠ°Π»ΠΎ, ΠΈ ΠΎΠ½ΠΈ шли Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ. ΠžΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ запуск Π½Π° Windows-Ρ€Π°Π½Π½Π΅Ρ€Π΅ GitLab нас Π²ΠΏΠΎΠ»Π½Π΅ устраивал: тСсты ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π³Ρ€ΡƒΠΆΠ°Π»ΠΈ тСстовый стСнд ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ рСсурсы.

Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ автотСстов ΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡŒ всС большС, ΠΈ ΠΌΡ‹ Π·Π°Π΄ΡƒΠΌΠ°Π»ΠΈΡΡŒ Π½Π°Π΄ ΠΈΡ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌ запуском, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³ΠΎΠ½ стал Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠΊΠΎΠ»ΠΎ Ρ‚Ρ€Π΅Ρ… часов. Появились ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

  • ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ тСсты ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹;
  • тСсты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ»ΠΈ ΠΏΠΎ нСсколько ΠΏΡ€ΠΎΠ³ΠΎΠ½ΠΎΠ² подряд Π½Π° локальной машинС, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠ°Π΄Π°Π»ΠΈ Π² CI.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ настройки автотСстов:

<plugins>
	
<plugin>
Β Β Β Β 	
<groupId>org.apache.maven.plugins</groupId>
Β Β Β Β 	
<artifactId>maven-surefire-plugin</artifactId>
Β Β Β Β 	
<version>2.20</version>
Β Β Β Β 	
<configuration>
Β Β Β Β Β Β Β Β 	
<skipTests>${skipTests}</skipTests>
Β Β Β Β Β Β Β Β 	
<testFailureIgnore>false</testFailureIgnore>
Β Β Β Β Β Β Β Β 	
<argLine>
Β Β Β Β Β Β Β Β Β Β Β Β 	
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
Β Β Β Β Β Β Β Β Β Β Β Β 	
-Dcucumber.options="--tags ${TAGS} --plugin io.qameta.allure.cucumber2jvm.AllureCucumber2Jvm --plugin pretty"
Β Β Β Β Β Β Β Β 	
</argLine>
Β Β Β Β 	
</configuration>
	
Β  Β  <dependencies>
Β Β Β Β Β Β Β Β 	
<dependency>
Β Β Β Β Β Β Β Β Β Β Β Β 	
<groupId>org.aspectj</groupId>
Β Β Β Β Β Β Β Β Β Β Β Β 	
<artifactId>aspectjweaver</artifactId>
Β Β Β Β Β Β Β Β Β Β Β Β 	
<version>${aspectj.version}</version>
Β Β Β Β Β Β Β Β 	
</dependency>
Β Β Β Β 	
</dependencies>
	
</plugin>
	
<plugin>
Β Β Β Β 	
<groupId>io.qameta.allure</groupId>
Β Β Β Β 	
<artifactId>allure-maven</artifactId>
Β Β Β Β 	
<version>2.9</version>
	
</plugin>
</plugins>

 ВнСдряй, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠΉ: ΠΎΠΏΡ‹Ρ‚ примСнСния автотСстов Π² Π’Π’Π‘
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Allure-ΠΎΡ‚Ρ‡Π΅Ρ‚Π°

 ВнСдряй, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠΉ: ΠΎΠΏΡ‹Ρ‚ примСнСния автотСстов Π² Π’Π’Π‘
Нагрузка Π½Π° Ρ€Π°Π½Π½Π΅Ρ€ Π²ΠΎ врСмя тСстов (8 ядСр, 8 Π“Π‘ ΠžΠ—Π£, 1 ΠΏΠΎΡ‚ΠΎΠΊ)
Β 
ΠŸΠ»ΡŽΡΡ‹ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… тСстов:

  • Π»Π΅Π³ΠΊΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ;
  • запуски Π² CI практичСски Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… запусков;
  • тСсты Π½Π΅ аффСктят Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°;
  • ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ трСбования ΠΊ рСсурсам Ρ€Π°Π½Π½Π΅Ρ€Π°.

ΠœΠΈΠ½ΡƒΡΡ‹ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… тСстов:

  • ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΠ»Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ;
  • долгая стабилизация тСстов;
  • нСэффСктивноС использованиС рСсурсов Ρ€Π°Π½Π½Π΅Ρ€Π°, ΠΊΡ€Π°ΠΉΠ½Π΅ низкая утилизация.

ВСсты Π½Π° Ρ„ΠΎΡ€ΠΊΠ°Ρ… JVM

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° ΠΌΡ‹ Π½Π΅ ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΠ»ΠΈΡΡŒ ΠΎ thread-safe ΠΊΠΎΠ΄Π΅, самым ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ способом ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ запуска стал cucumber-jvm-parallel-plugin для Maven. Плагин Π»Π΅Π³ΠΊΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Π½ΠΎ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ автотСсты Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ…. Π”Π΅Π»Π°Ρ‚ΡŒ Π½Π΅Ρ‡Π΅Π³ΠΎ, ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Selenoid.

Selenoid-сСрвСр подняли Π½Π° машинС с 32 ядрами ΠΈ 24 Π“Π‘ ΠžΠ—Π£. Π›ΠΈΠΌΠΈΡ‚ установили Π² 48 Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² β€” 1,5 ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π° ядро ΠΈ порядка 400 ΠœΠ‘ ΠžΠ—Π£. Π’ ΠΈΡ‚ΠΎΠ³Π΅ врСмя тСстов ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΠ»ΠΎΡΡŒ с Ρ‚Ρ€Π΅Ρ… часов Π΄ΠΎ 40 ΠΌΠΈΠ½ΡƒΡ‚. УскорСниС ΠΏΡ€ΠΎΠ³ΠΎΠ½ΠΎΠ² ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ стабилизации: Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ быстро ΠΏΡ€ΠΎΠ³ΠΎΠ½ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ автотСсты 20–30 Ρ€Π°Π·, ΠΏΠΎΠΊΠ° Π½Π΅ убСдимся, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ.
ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ нСдостатком Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ стала высокая утилизация рСсурсов Ρ€Π°Π½Π½Π΅Ρ€ΠΎΠ² ΠΏΡ€ΠΈ нСбольшом количСствС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²: Π½Π° 4 ядрах ΠΈ 8 Π“Π‘ ΠžΠ—Π£ тСсты Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π² 6 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π’Ρ‚ΠΎΡ€ΠΎΠΉ минус: ΠΏΠ»Π°Π³ΠΈΠ½ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ классы-Ρ€Π°Π½Π½Π΅Ρ€Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сцСнария, сколько Π±Ρ‹ ΠΈΡ… Π½ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Π»ΠΎΡΡŒ.

Π’Π°ΠΆΠ½ΠΎ! НС ΠΏΡ€ΠΎΠΊΠΈΠ΄Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с Ρ‚Π΅Π³Π°ΠΌΠΈ Π² argLine, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

<argLine>-Dcucumber.options="--tags ${TAGS} --plugin io.qameta.allure.cucumber2jvm.AllureCucumber2Jvm --plugin pretty"</argLine>
…
Mvn –DTAGS="@smoke"

Если ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π΅Π³ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠ»Π°Π³ΠΈΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π½Π½Π΅Ρ€Ρ‹ для всСх тСстов, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ всС тСсты, пропуская ΠΈΡ… сразу послС запуска ΠΈ создавая ΠΏΡ€ΠΈ этом мноТСство Ρ„ΠΎΡ€ΠΊΠΎΠ² JVM.

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с Ρ‚Π΅Π³ΠΎΠΌ ΠΏΡ€ΠΎΠΊΠΈΠ΄Ρ‹Π²Π°Ρ‚ΡŒ Π² tags Π² настройках ΠΏΠ»Π°Π³ΠΈΠ½Π°, см. ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… Π½Π°ΠΌΠΈ способах Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ»Π°Π³ΠΈΠ½Π° Allure.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠ³ΠΎΠ½Π° 6 ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… тСстов с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ настройкой:

[INFO] Total time: 03:17 min

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠ³ΠΎΠ½Π° тСстов, Ссли Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π΅Π³ Π² mvn … –Dcucumber.options:

[INFO] Total time: 44.467 s

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ настройки автотСстов:

<profiles>
	
<profile>
Β Β Β Β 	
<id>parallel</id>
Β Β Β Β 	
<build>
Β Β Β Β Β Β Β Β 	
<plugins>
Β Β Β Β Β Β Β Β Β Β Β Β 	
<plugin>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<groupId>com.github.temyers</groupId>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<artifactId>cucumber-jvm-parallel-plugin</artifactId>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<version>5.0.0</version>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<executions>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<execution>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<id>generateRunners</id>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<phase>generate-test-sources</phase>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<goals>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<goal>generateRunners</goal>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
</goals>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<configuration>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
Β  Β  Β  Β  Β  Β  <tags>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<tag>${TAGS}</tag>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
</tags>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<glue>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<package>stepdefs</package>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
</glue>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
</configuration>
Β Β Β Β Β 	
 Β  Β  Β  Β  Β  Β  Β  </execution>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
</executions>
Β Β Β Β 	
Β  Β  Β  Β  </plugin>
Β Β Β Β Β Β Β Β Β Β Β Β 	
<plugin>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<groupId>org.apache.maven.plugins</groupId>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<artifactId>maven-surefire-plugin</artifactId>
Β Β Β Β Β Β Β Β 	
Β  Β  Β  Β  <version>2.21.0</version>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<configuration>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<forkCount>12</forkCount>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<reuseForks>false</reuseForks>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<includes>**/*IT.class</includes>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
 <testFailureIgnore>false</testFailureIgnore>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<!--suppress UnresolvedMavenProperty -->
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<argLine>
Β Β 	
 -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar" -Dcucumber.options="--plugin io.qameta.allure.cucumber2jvm.AllureCucumber2Jvm TagPFAllureReporter --plugin pretty"
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
</argLine>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
</configuration>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<dependencies>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<dependency>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<groupId>org.aspectj</groupId>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<artifactId>aspectjweaver</artifactId>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<version>${aspectj.version}</version>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
 Β  </dependency>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
</dependencies>
Β Β Β Β Β Β Β Β Β 	
 Β  </plugin>
Β Β Β Β Β Β Β Β 	
</plugins>
Β Β Β Β 	
</build>
	
</profile>

ВнСдряй, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠΉ: ΠΎΠΏΡ‹Ρ‚ примСнСния автотСстов Π² Π’Π’Π‘
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Allure-ΠΎΡ‚Ρ‡Π΅Ρ‚Π° (самый Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ тСст, 4 Ρ€Π΅Ρ€Π°Π½Π°)

ВнСдряй, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠΉ: ΠΎΠΏΡ‹Ρ‚ примСнСния автотСстов Π² ВВБНагрузка Ρ€Π°Π½Π½Π΅Ρ€Π° Π²ΠΎ врСмя тСстов (8 ядСр, 8 Π“Π‘ ΠžΠ—Π£, 12 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²)
Β 
ΠŸΠ»ΡŽΡΡ‹:

  • простая настройка β€” Π½ΡƒΠΆΠ½ΠΎ лишь Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½;
  • Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ выполнСния большого количСства тСстов;
  • ускорСниС стабилизации тСстов благодаря ΠΏ.1.Β 

ΠœΠΈΠ½ΡƒΡΡ‹:

  • трСбуСтся нСсколько ОБ / ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²;
  • высокоС ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ рСсурсов Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΊ;
  • ΠΏΠ»Π°Π³ΠΈΠ½ устарСл ΠΈ большС Π½Π΅ поддСрТиваСтся.Β 

Как ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚ΡŒ Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒΒ 

ВСстовыС стСнды Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹, ΠΊΠ°ΠΊ ΠΈ сами автотСсты. ΠΠ΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ нас появилось Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ количСство flacky-тСстов. На ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡˆΠ΅Π» maven surefire plugin, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ пСрСзапуск ΡƒΠΏΠ°Π²ΡˆΠΈΡ… тСстов. НуТно ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π΄ΠΎ 2.21 ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ строчку с количСством пСрСзапусков Π² pom-Ρ„Π°ΠΉΠ»Π΅ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° для Maven.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ настройки автотСстов:

Β Β Β 	
<plugin>
Β Β Β Β Β Β Β Β 	
<groupId>org.apache.maven.plugins</groupId>
Β Β 	
Β  Β  Β  <artifactId>maven-surefire-plugin</artifactId>
Β Β Β Β Β Β Β Β 	
<version>2.21.0</version>
Β Β Β Β Β Β Β Β 	
<configuration>
Β Β Β Β Β Β Β Β Β Β Β 	
….
Β Β Β Β Β Β Β Β Β Β Β Β 	
<rerunFailingTestsCount>2</rerunFailingTestsCount>
Β Β Β Β Β Β Β Β Β Β Β Β 	
….
Β Β Β Β Β Β Β Β Β Β Β Β 	
</configuration>
</plugin>

Π›ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ запускС: mvn … -Dsurefire.rerunFailingTestsCount=2 …
Как Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΈ Maven для скрипта PowerShell (PS1):

Β Β 
Set-Item Env:MAVEN_OPTS "-Dfile.encoding=UTF-8 -Dsurefire.rerunFailingTestsCount=2"

ΠŸΠ»ΡŽΡΡ‹:

  • Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° Π°Π½Π°Π»ΠΈΠ· Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСста, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΠ°Π΄Π°Π΅Ρ‚;
  • ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π»Π°Π΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ тСстового стСнда.

ΠœΠΈΠ½ΡƒΡΡ‹:

  • ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π²Π°ΡŽΡ‰ΠΈΠ΅ Π΄Π΅Ρ„Π΅ΠΊΡ‚Ρ‹;
  • врСмя ΠΏΡ€ΠΎΠ³ΠΎΠ½Π° увСличиваСтся.

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ тСсты с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Cucumber 4

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ тСстов росло с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π΄Π½Π΅ΠΌ. ΠœΡ‹ снова Π·Π°Π΄ΡƒΠΌΠ°Π»ΠΈΡΡŒ ΠΎΠ± ускорСнии ΠΏΡ€ΠΎΠ³ΠΎΠ½ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π² ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ сборки прилоТСния ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС тСстов. ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ стала слишком долгая гСнСрация Ρ€Π°Π½Π½Π΅Ρ€ΠΎΠ² ΠΏΡ€ΠΈ запускС Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Maven-ΠΏΠ»Π°Π³ΠΈΠ½Π°.

На Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡƒΠΆΠ΅ Π²Ρ‹ΡˆΠ΅Π» Cucumber 4, поэтому ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ядро ΠΏΠΎΠ΄ эту Π²Π΅Ρ€ΡΠΈΡŽ. Π’ release notes Π½Π°ΠΌ ΠΎΠ±Π΅Ρ‰Π°Π»ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ запуск Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ‚Ρ€Π΅Π΄ΠΎΠ². ВСорСтичСски это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ:

  • Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³ΠΎΠ½ автотСстов Π·Π° счСт увСличСния количСства ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²;
  • ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Ρ€ΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ Ρ€Π°Π½Π½Π΅Ρ€ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ автотСста.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… автотСстов оказалось Π½Π΅ Ρ‚Π°ΠΊ слоТно. Cucumber 4 прогоняСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ тСст Π² Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°, поэтому Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‰ΠΈΠ΅ static-Π²Π΅Ρ‰ΠΈ Π±Ρ‹Π»ΠΈ просто ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² ThreadLocal-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.Β 
Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡ€ΠΈ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ срСдствами Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Idea β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ мСста, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… происходило сравнСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° null). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½ΡƒΠΆΠ½ΠΎ вынСсти Allure-ΠΏΠ»Π°Π³ΠΈΠ½ Π² Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ класса Junit Runner.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ настройки автотСстов:

Β 
<profile>
	
<id>parallel</id>
	
<build>
Β Β Β Β 	
<plugins>
Β Β Β Β Β Β Β Β 	
<plugin>
Β Β Β Β Β Β Β Β Β Β Β Β 	
<groupId>org.apache.maven.plugins</groupId>
Β 	
 Β  Β  Β  Β  Β  <artifactId>maven-surefire-plugin</artifactId>
Β Β Β Β Β Β Β Β Β Β Β Β 	
<version>3.0.0-M3</version>
Β Β Β 	
 Β  Β  Β  Β  <configuration>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<useFile>false</useFile>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<testFailureIgnore>false</testFailureIgnore>
Β Β Β Β Β Β Β Β 	
Β  Β  Β  Β  <parallel>methods</parallel>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<threadCount>6</threadCount>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<perCoreThreadCount>true</perCoreThreadCount>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<argLine>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
</argLine>
Β Β Β Β Β Β Β Β Β Β Β Β 	
</configuration>
Β Β Β Β Β Β Β Β Β Β Β Β 	
<dependencies>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<dependency>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<groupId>org.aspectj</groupId>
Β Β Β 	
 Β  Β  Β  Β  Β  Β  Β  Β  <artifactId>aspectjweaver</artifactId>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
<version>${aspectj.version}</version>
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 	
</dependency>
Β Β Β Β Β Β Β Β Β Β Β Β 	
</dependencies>
Β Β Β Β Β Β Β Β 	
</plugin>
Β Β Β Β 	
</plugins>
	
</build>
</profile>

ВнСдряй, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠΉ: ΠΎΠΏΡ‹Ρ‚ примСнСния автотСстов Π² Π’Π’Π‘ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Allure-ΠΎΡ‚Ρ‡Π΅Ρ‚Π° (самый Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ тСст, 5 Ρ€Π΅Ρ€Π°Π½ΠΎΠ²)

ВнСдряй, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠΉ: ΠΎΠΏΡ‹Ρ‚ примСнСния автотСстов Π² ВВБНагрузка Ρ€Π°Π½Π½Π΅Ρ€Π° Π²ΠΎ врСмя тСстов (8 ядСр, 8 Π“Π‘ ΠžΠ—Π£, 24 ΠΏΠΎΡ‚ΠΎΠΊΠ°)

ΠŸΠ»ΡŽΡΡ‹:

  • Π½ΠΈΠ·ΠΊΠΎΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ рСсурсов;
  • нативная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΡ‚ Cucumber β€” Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ инструмСнты;
  • Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ запуска Π±ΠΎΠ»Π΅Π΅ 6 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π½Π° ядро процСссора.

ΠœΠΈΠ½ΡƒΡΡ‹:

  • Π½ΡƒΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π» ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅;
  • увСличиваСтся ΠΏΠΎΡ€ΠΎΠ³ вхоТдСния.

Allure-ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ Π² GitLab pages

ПослС внСдрСния ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ запуска ΠΌΡ‹ стали Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π° Π°Π½Π°Π»ΠΈΠ· ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. На Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΊΠ°ΠΊ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ Π² GitLab, ΠΏΠΎΡ‚ΠΎΠΌ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈ Π΄ΠΎΠ»Π³ΠΎ. А Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΡ‚Ρ‡Π΅Ρ‚ Ρƒ сСбя, Ρ‚ΠΎ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Нам Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ фидбэк быстрСС, ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ нашСлся β€” GitLab pages. Π­Ρ‚ΠΎΡ‚ встроСнная функция, которая доступна ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ Π²ΠΎ всСх послСдних вСрсиях GitLab. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ статичСскиС сайты Ρƒ сСбя Π½Π° сСрвСрС ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊ Π½ΠΈΠΌ доступ ΠΏΠΎ прямой ссылкС.

ВсС ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Ρ‹ с Allure-ΠΎΡ‚Ρ‡Π΅Ρ‚Π°ΠΌΠΈ сдСланы Π² GitLab pages. Π‘ΠΊΡ€ΠΈΠΏΡ‚ для дСплоя ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π½Π° GitLab pages β€” Π½Π° Windows PowerShell (ΠΏΠ΅Ρ€Π΅Π΄ этим Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ автотСсты):

New-Item -ItemType directory -Path $testresulthistory | Out-Null

try {Invoke-WebRequest -Uri $hst -OutFile $outputhst}
Catch{echo "fail copy history"}
try {Invoke-WebRequest -Uri $hsttrend -OutFile $outputhsttrnd}
Catch{echo "fail copy history trend"}

mvn allure:report
#mvn assembly:single -PzipAllureReport
xcopy $buildlocationtargetsiteallure-maven-plugin* $buildlocationpublic /s /i /Y

Π§Ρ‚ΠΎ Π² ΠΈΡ‚ΠΎΠ³Π΅Β 

Π˜Ρ‚Π°ΠΊ, Ссли Π²Ρ‹ Π΄ΡƒΠΌΠ°Π»ΠΈ ΠΎ Ρ‚ΠΎΠΌ, Π½ΡƒΠΆΠ΅Π½ Π»ΠΈ Π²Π°ΠΌ Thread safe-ΠΊΠΎΠ΄ Π² Cucumber-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ автотСстов, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½ β€” с Cucumber 4 Π΅Π³ΠΎ просто Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ² Ρ‚Π΅ΠΌ самым количСство запускаСмых ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ способС запуска тСстов вопрос стоит ΡƒΠΆΠ΅ ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ с Selenoid ΠΈ тСстового стСнда.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΏΠΎΠΊΠ°Π·Π°Π»Π°, Ρ‡Ρ‚ΠΎ запуск автотСстов Π½Π° Ρ‚Ρ€Π΅Π΄Π°Ρ… позволяСт свСсти расход рСсурсов ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ ΠΏΡ€ΠΈ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ², ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² 2 Ρ€Π°Π·Π° Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΌΡƒ ΡƒΡΠΊΠΎΡ€Π΅Π½ΠΈΡŽ прохоТдСния тСстов ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΌΡ‹ смогли Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² сборку прилоТСния Π±ΠΎΠ»Π΅Π΅ 200 автоматичСских тСстов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°ΠΆΠ΅ с 5 Ρ€Π΅Ρ€Π°Π½Π°ΠΌΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π·Π° 24 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹. Π­Ρ‚ΠΎ позволяСт ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΎΡ‚ Π½ΠΈΡ… быстрый фидбэк, Π° ΠΏΡ€ΠΈ нСобходимости β€” Π²Π½ΠΎΡΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ снова.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com