ΠΠ°ΡΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΏΡΠΎΠ΄-ΡΡΠ΅Π΄Ρ. Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡ. ΠΠΎΠ΄ ΠΊΠ°ΡΠΎΠΌ β ΠΈΡΡΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ, Π½Π°ΡΠ°Π² Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, ΠΌΡ Π΄ΠΎΡΠ»ΠΈ Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° Π°Π²ΡΠΎΡΠ΅ΡΡΠΎΠ² Π½Π° 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 ΠΊΠΎΠ΄Π΅, ΡΠ°ΠΌΡΠΌ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠ°Π»
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-ΡΠ΅ΡΡΠΎΠ². ΠΠ° ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΠΈΡΠ΅Π»
ΠΡΠΈΠΌΠ΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π°Π²ΡΠΎΡΠ΅ΡΡΠΎΠ²:
Β Β Β
<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