áá»áœááºá¯ááºááá¯á·ááá¬áááœá²ááẠáá¯ááºáá¯ááºááŸá¯áááºáááºážáá»ááºááá¯á· á¡ááºááºáá®áá±ážááŸááºážáá¬ážááŸááºážá¡áá áºáá»á¬ážááᯠá áááºáááºá¡ááœáẠá¡ááŒáá·áºá¡á á¡ááá¯á¡áá»á±á¬ááºááá¯ááºááá¯ááºážáá»á¬ážááᯠáááºáá®ážáá±ážáá«áááºá áá¯ááºáá«áááºá áááºážááẠá¡ááá¯á¡áá»á±á¬áẠáá¯ááºáá±á¬ááºááá¯ááºáá±á¬ á ááºážáááºááŸá¯áá»á¬áž ááá¯á¡ááºáá«áááºá ááŒááºáá±á¬ááºááŸá¯á¡á±á¬ááºááœáẠáá±ááá¹ááá ááºáá áºáá¯ááœáẠááŒáá¯ážáá áºáá»á±á¬ááºážá ááºážáááºááŒááºážááŸá áááºá GitLab á á¬áá»ááºááŸá¬áá»á¬ážááŸá Allure á¡á á®áááºáá¶á á¬áá áºáá¯ááŸáá·áºá¡áá° áááºáá±á¬ááºááá¯ááºááá¯ááºážá¡ááœááºáž Selenoid áá±á«áºááœáẠá¡ááºááá¯ááºááá¯ááºážáá±á«ááºáž áá»á¬ážá áœá¬ááŒáá·áº á¡ááºáá¯ááºá ááºážáááºááŸá¯ áá¯ááºáá±á¬ááºááá·áºáá±áá¬ááá¯á· áá±á¬ááºááŸááá²á·ááŒá®áž áá±á¬ááºáá¯á¶ážááœáẠá¡á±ážááŒáá±á¬ á¡ááá¯á¡áá»á±á¬ááºá áá áºáá°ážááºááᯠáááŸááá²á·áááºá á¡áá¬áááºááŸá¬ áá°ááœá±á á¡áááºážááœá±ááᯠáá¯á¶ážááá¯ááºáááºá
áá«ááá¯á·áááºáá áá²á·áá¬áá²á
á¡ááá¯á¡áá»á±á¬ááºá ááºážáááºááŸá¯áá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒá®áž áááºážááá¯á·ááᯠááá¯ááºááá¯ááºážááœáẠáá±á«ááºážá ááºážáááºá¡ááœáẠáá»áœááºá¯ááºááá¯á·áááá¯á¡ááºáá»ááºáá»á¬ážááŸáá·áºááá¯ááºáá®á á±ááẠááá¯ááºáá»á±á¬áá®ááœá±ááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ á¡ááá¯á¡áá»á±á¬ááºá áá áºáá±á¬ááºáá áºáᯠááá¯á¡ááºáá«áááºá á¡áá±á¬ááºážáá¯á¶ážááá±á¬á·á ááá¯ááºááá¯ááºážáá²ááᯠautotests ááœá±ááᯠááŒáŸá¯ááºááŸá¶ááá¯á·á¡ááœáẠááá¯ááºáá»á±á¬áá®ááœá±ááŒá áºá¡á±á¬áẠautotesting engine á¡ááœáẠá á¶áá áºáá¯áááºážááᯠááá°áá»ááºáá«áááºá á¡áá±á¬ááºá¡áááºáá±á¬áºáááºá¡ááœáẠá¡á±á¬ááºáá«áááºážááá¬áá»á¬ážááᯠááœá±ážáá»ááºáá²á·áá«áááºá
- áá»á¬áá¬ážá
- Mavená
- áá®áá®áá®áááºá
- áááœá¬ážáá®áž+áá»á¯á¶ áá
- ááŒá¬ážáá±á¬ááºážá
- GitLab á
áá¬á·ááŒá±á¬áá·áº áá® set ááᯠáá®ážááá·áºáá¬ážáá¬áá²á Java ááẠá¡ááá¯á¡áá»á±á¬ááºá
ááºážáááºááŸá¯áá»á¬ážá¡ááœáẠáá±áááºážá¡á
á¬ážáá¯á¶ážáá¬áá¬á
áá¬ážáá
áºáá¯ááŒá
áºááŒá®áž á¡ááœá²á·áá¬ážá¡á¬ážáá¯á¶ážá áááºážááá¯ááŒá±á¬ááá¯ááŒáááºá áááºáá®áá®áááºááẠáááºááŸá¬ážáá±á¬ááŒá±ááŸááºážáá»ááºááŒá
áºáááºá á¡ááŒá¬ážá¡áá¬áá»á¬ážáá²á០áááœá¬ážáá®ážááẠáá°ááá¯ááºááá¯ááºá
ááºážáááºááŸá¯ááœááºáá«áááºááá·áº áá¬ááá»á¬ážá á¡ááá¯á¡áá»á±á¬ááºá
ááºážáááºááŸá¯ááááºáá»á¬ážá¡áá±á«áº áá¯á¶ááŒááºááŸá¯ááá¯ážá
á±áááºáᯠáá°ááá«áááºá
Single threaded á ááºážáááºááŸá¯áá»á¬áž
áá®ážááᯠááŒááºáááºááœááºážáá¶áááºá¡ááœááºá áá°áá±á¬ááºá¡ááœáẠá¡ááŒá±áá¶á¡ááŒá ẠGitHub áá±á«áºááŸá á¡áá»áá¯ážáá»áá¯ážáá±á¬ ááá¯ááŸá±á¬ááºáá¬áá»á¬ážá០ááá¯ážáááºááŸá¯áá»á¬ážááᯠááá°ááŒá®áž áááºážááá¯á·ááᯠáá»áœááºá¯ááºááá¯á·á¡ááœáẠááá¯ááºáá»á±á¬áá®ááœá±ááŒá áºá¡á±á¬áẠááŒá¯áá¯ááºáá¬ážáááºá áá»áœááºá¯ááºááá¯á·ááẠautotest framework á core ááŸáá·áº áá»áœááºá¯ááºááá¯á·á core ááœáẠautotests ááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá Gold á¥ááá¬áá áºáá¯ááŒáá·áº áááºáá á¬ááŒáá·áºááá¯ááºá¡ááœáẠrepository áá áºáá¯ááᯠáááºáá®ážáá¬ážáá«áááºá á¡ááœá²á·áá áºááœá²á·á á®ááẠGold image ááá¯ááá°ááŒá®áž áááºážááá¯á·áááá±á¬áá»ááºááŸáá·áº ááá¯ááºáá»á±á¬áá®ááœá±ááŒá áºá¡á±á¬áẠáááºážááœáẠá ááºážáááºááŸá¯áá»á¬ážááŒá¯áá¯ááºááááºááŒá áºáááºá áá»áœááºá¯ááºááá¯á·á áááºážááᯠGitLab-CI áááºááá¯á· ááŒáá·áºáá»ááºáá¬ážááŒá®ážá
- ááá±á¬áá»ááºáá áºáá¯á á®á¡ááœáẠáá±ážáá¬ážáá±á¬ autotests áá»á¬ážá¡á¬ážáá¯á¶ážá áá±á·á ááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážá
- ááá¯ááºááá¯ááºážáááºáá±á¬ááºááŸá¯ááœáẠááœáŸááºáááºáááºá
á¡á ááá¯ááºážááœáẠá ááºážáááºááŸá¯á¡áááºážáááºááŸááá²á·ááŒá®áž áááºážááá¯á·ááᯠá ááºážáá»á±á¬ááºážáá áºáá¯ááœáẠááŒá¯áá¯ááºáá²á·áááºá Windows runner GitLab ááœáẠááŒáá¯ážáá áºáá»á±á¬ááºážáááºážááŒáá·áº áááºáááºááŒááºážááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠá¡áá±á¬áºáá±áž ááá·áºáá»á±á¬áºáá«áááº- á ááºážáááºááŸá¯áá»á¬ážááẠá ááºážáááºáá¯á¶áááºážáá»á¬ážááᯠá¡ááœááºáá±á«á·áá«ážá áœá¬ áááºáá±á¬ááºááŒá®áž á¡áááºážá¡ááŒá áºáá»á¬ážáá®ážáá«ážááᯠá¡áá¯á¶ážáááŒá¯áá«á
á¡áá»áááºááŒá¬áá¬áááºááŸáá·áºá¡áá»áŸá á¡ááá¯á¡áá»á±á¬ááºá ááºážáááºááŸá¯á¡áá±á¡ááœáẠááá¯áá»á¬ážáá¬áᬠá¡ááŒáá·áºá¡áááŒá±ážááŒááºážááŸá¬ áá¯á¶ážáá¬áá®ááá·áºááŒá¬áá±á¬á¡áá« áááºážááá¯á·ááᯠá¡ááŒáá¯ááºááŒá±ážááẠááœá±ážáá²á·áááºá á¡ááŒá¬ážááŒá¿áá¬áá»á¬ážáááºáž áá±á«áºáá¬áááº-
- á á áºáá±ážááŸá¯áá»á¬ážááẠáááºááŒáááºááŸá¯ááŸááááŸá á¡áááºáááŒá¯ááá¯ááºáá«á
- á ááºááœááºážá ááºááœáẠá¡ááŒáááºáá±á«ááºážáá»á¬ážá áœá¬ áááºááá¯ááºáá¯ááºáá±á¬ááºáá²á·áá±á¬ á ááºážáááºá á áºáá±ážááŸá¯áá»á¬ážááẠáá áºáá«áá áºáᶠCI ááœáẠáá»ááºáá»áá«áááºá
autotests á áá áºááá·áºááœááºážááŒááºáž á¥ááá¬-
<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 coresá 8 GB RAMá 1 thread)
single-threaded tests áá¡á¬ážáá¬áá»ááºáá»á¬áž
- áááºáááºáááºááŸáá·áºáááºáááºáááºááœááºáá°áááºá
- CI ááœáẠááœáŸááºáááºááŸá¯ááẠáá±ááá¹áá ááœáŸááºáááºááŸá¯áá»á¬ážááŸáá·áº áááºááœá±á·á¡á¬ážááŒáá·áº ááœá¬ááŒá¬ážááŸá¯áááŸááá«á
- á á áºáá±ážááŸá¯áá»á¬ážááẠáá áºáá¯ááŸáá·áºáá áºáᯠáááááá¯ááºá á±áá«á
- á¡ááŒá±ážááá¬ážá¡áááºážá¡ááŒá áºáá»á¬ážá¡ááœáẠá¡áááºážáá¯á¶ážááá¯á¡ááºáá»ááºáá»á¬ážá
single-threaded tests áá¡á¬ážáááºážáá»ááºáá»á¬áž-
- ááŒá®ážááŒá±á¬ááºááẠá¡ááœááºááŒá¬áá«áááºá
- á ááºážáááºááŸá¯áá»á¬ážáááŒá¬ááŸááºáááºááŒáááºááŸá¯;
- á¡ááŒá±ážááá¬áž á¡áááºážá¡ááŒá áºáá»á¬ážááᯠáááá±á¬ááºá áœá¬ á¡áá¯á¶ážááŒá¯ááŒááºáž áááŸáááŒááºážá á¡áá¯á¶ážáá»ááŸá¯ á¡ááœááºáááºážáá«ážááŒááºážá
JVM forks áá»á¬ážááœáẠá ááºážáááºááŸá¯áá»á¬áž
á¡ááŒá±áá¶áá°áá±á¬ááºááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºáá¬ááœáẠthread-safe code ááá¯áá»áœááºá¯ááºááá¯á·ááá¯áá
áá¯ááºáá±á¬ááŒá±á¬áá·áºá parallel ááᯠrun áááºá¡áááºááŸá¬ážáá¯á¶ážáááºážáááºážááŸá¬
Selenoid áá¬áá¬ááᯠ32 cores ááŸáá·áº 24 GB RAM áá«ááá·áº á
ááºááœáẠá
áááºáá²á·áááºá ááá·áºáááºáá»ááºááᯠááá±á¬ááºáᬠ48 áá¯ááœáẠáááºááŸááºáá¬ážááẠ- core áá
áºáá¯áá»áŸáẠ1,5 threads ááŸáá·áº RAM 400 MB ááá·áºááŸááááºá ááááºá¡áá±ááŒáá·áº á
ááºážáááºáá»áááºááᯠá áá¬áá®á០áááá
Ạáá ááá¯á· áá»áŸá±á¬á·áá»áá²á·áááºá á¡ááŒá±ážáá»á¬ážááᯠá¡ááŸáááºááŒáŸáá·áºááŒááºážááẠáááºááŒáááºááŸá¯ááŒá¿áá¬ááᯠááŒá±ááŸááºážáá¬ááœáẠá¡áá±á¬ááºá¡áá°ááŒá
áºá
á±áááº- ááᯠáá»áœááºá¯ááºááá¯á·ááẠá
áááºáá»áá¯á¶ááŒááºá
áœá¬ ááŒá±ážááá¯ááºáááºáᯠááá±áá»á¬ááá»ááºáž á¡á±á¬áºááá¯á
ááºážáááºááŸá¯á¡áá
áºáá»á¬ážááᯠá¡ááŒááẠ40-20 áá»áŸááºááŒááºá
áœá¬ áá¯ááºáá±á¬ááºááá¯ááºááŒá®ááŒá
áºáááºá
ááŒá±ááŸááºážáá»ááºááááá¡á¬ážáááºážáá»ááºááŸá¬ parallel threads á¡áááºážáááºááŒáá·áº runner áááºážááŒá
áºáá»á¬ážááᯠááŒáá·áºáá¬ážá
áœá¬á¡áá¯á¶ážááŒá¯ááŒááºážááŒá
áºáááº- 4 cores ááŸáá·áº 8 GB RAM ááœááºá á
á
áºáá±ážááŸá¯áá»á¬ážááẠ6 threads áááºáááá¯áá² áááºááŒáááºá
áœá¬áá¯ááºáá±á¬ááºáááºá áá¯áááá¡á¬ážáááºážáá»ááº- ááááºá¡ááºááẠá¡ááŒá
áºá¡áá»ááºáá
áºáá¯á
á®á¡ááœáẠá¡ááŒá±ážááá¬áž á¡áááºážáá»á¬ážááᯠáá¯ááºáá±ážáááºá áááºážááá¯á·áá²á០áááºáá»áŸááẠá
áááºáááºááŒá
áºá
á±á
á¡áá±ážááŒá®áž! áááºáá»á¬ážáá«áá±á¬ ááááºážááŸááºáá áºáá¯ááᯠáááŒááºáááºážáá«ááŸáá·áº argLineá¥ááá¬á á€áá²á·ááá¯á·áá±á¬á
<argLine>-Dcucumber.options="--tags ${TAGS} --plugin io.qameta.allure.cucumber2jvm.AllureCucumber2Jvm --plugin pretty"</argLine>
âŠ
Mvn âDTAGS="@smoke"
á€áááºážááŒáá·áº ááẠtag ááá¯áá»á±á¬áºááœá¬ážáá«áá plugin ááẠá ááºážáááºááŸá¯á¡á¬ážáá¯á¶ážá¡ááœáẠá¡ááŒá±ážááá¬ážáá»á¬ážááᯠáá¯ááºáá¯ááºáá±ážáááá·áºáááºá ááá¯ááá¯áááºááŸá¬ áááºážááẠá ááºážáááºááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±á¬ááºááẠááŒáá¯ážá á¬ážáááºááŒá áºááŒá®ážá á áááºááŒá®áž JVM forks áá»á¬ážá áœá¬ááᯠáááºáá®ážááŒá®ážáá±á¬áẠáááºážááá¯á·ááᯠáá»ááºáá»ááºážáá»á±á¬áºááœá¬ážáááºááŒá áºáááºá
tag áá áºáá¯ááŸáá·áº variable áá áºáá¯ááᯠáá áºáá»ááŒááºážááẠááŸááºáááºáá«áááºá tags áá»á¬áž plugin áááºáááºáá»á¬ážááœááºá á¡á±á¬ááºáá«á¥ááá¬ááá¯ááŒáá·áºáá«á áá»áœááºá¯ááºááá¯á·á ááºážáááºáá¬ážáá±á¬ á¡ááŒá¬ážáááºážáááºážáá»á¬ážááœáẠAllure ááááºá¡ááºááᯠáá»áááºáááºáá¬ááœáẠááŒá¿áá¬ááŸááááºá
áááŸááºáááºáá±á¬ áááºáááºáá»á¬ážááŒáá·áº ááá¯áá±á¬ááºážáá±á¬ á ááºážáááºááŸá¯ 6 áá¯á¡ááœáẠáá¯ááºáá±á¬ááºáá±áá»ááẠá¥ááá¬
[INFO] Total time: 03:17 min
áááºááᯠááá¯ááºááá¯ááºááœáŸá²ááŒá±á¬ááºážáá«á á ááºážáááºáááºáááºáá»ááẠááá°áᬠmvn... âDcucumber.options:
[INFO] Total time: 44.467 s
autotests á áá áºááá·áºááœááºážááŒááºáž á¥ááá¬-
<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 coresá 8 GB RAMá 12 threads)
á¡ááŒá
áºááœá±:
- ááœááºáá°áá±á¬áááºáááºááŸá¯ - áááºááẠplugin áá áºáá¯ááá·áºáááºáá¬ááá¯á¡ááºáááºá
- á ááºážáááºááŸá¯á¡áá»á¬ážá¡ááŒá¬ážááᯠáá áºááŒáá¯ááºááẠáá¯ááºáá±á¬ááºááá¯ááºááŸá¯á
- á¡ááá·áº 1 ááŒá±á¬áá·áº á ááºážáááºáááºááŒáááºááŸá¯á¡ááŸáááºááŒáŸáá·áºááŒááºážá
cons:
- OS/ááœááºááááºáá¬áá»á¬ážá áœá¬ ááá¯á¡ááºáááº
- áááºážáá¯á¶áá áºáá¯á á®á¡ááœáẠá¡áááºážá¡ááŒá áºáá¯á¶ážá áœá²ááŸá¯ááŒáá·áºáá¬ážááŒááºážá
- ááááºá¡ááºááẠáá±ááºáá±á¬ááºáá»áá±ááŒá®áž ááá¶á·ááá¯ážáá±á¬á·áá«á
ááááºááŒáááºááŸá¯ááᯠáááºááá¯áá»á±á¬áºááœáŸá¬ážááá²á
á
á¬áá±ážááœá²áá¯á¶áá»á¬ážááẠautotest áá»á¬ážáá²á·ááá¯á·ááẠá
á¶ááŒááá¯ááºáá±á áá»áœááºá¯ááºááá¯á·ááœáẠáá»áá¯ááŒáááºáá±á¬ á
ááºážáááºááŸá¯áá»á¬ážá
áœá¬ááŸááááºááᯠá¡á¶á·ááŒá
áá¬ááá¯ááºáá±á áááºáááºááá¯á· áá±á¬ááºáá¬áááºá
autotests á áá áºááá·áºááœááºážááŒááºáž á¥ááá¬-
<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âŠ
ááœá±ážáá»ááºá
áá¬áá
áºáá¯á¡áá±ááŒáá·áº PowerShell script (PS1) á¡ááœáẠMaven ááœá±ážáá»ááºááŸá¯áá»á¬ážááᯠáááºááŸááºáá«á
Set-Item Env:MAVEN_OPTS "-Dfile.encoding=UTF-8 -Dsurefire.rerunFailingTestsCount=2"
á¡ááŒá áºááœá±:
- áá»ááºáá»ááá·áºá¡áá« ááááºáááŒááẠá ááºážáááºááŸá¯ááᯠááœá²ááŒááºážá áááºááŒá¬ááẠá¡áá»áááºááŒá¯ááºážááẠáááá¯á¡ááºáá«á
- á ááºážáááºáá¯á¶áááºážáááºááŒáááºááŸá¯ááŒá¿áá¬áá»á¬ážááᯠáá»á±á¬á·áá«ážá á±ááá¯ááºáááºá
cons:
- áá±áá±á«áºáá»áá¯á·ááœááºážáá»ááºáá»á¬áž ááœááºááœá¬ážááá¯ááºáááºá
- run time ááá¯ážáá¬áááºá
Cucumber 4 á á¬ááŒáá·áºááá¯ááºááŸáá·áº á¡ááŒáá¯ááºá ááºážáááºááŸá¯áá»á¬áž
á á áºáá±ážááŸá¯ á¡áá±á¡ááœááºááẠáá±á·á ááºááŸáá·áºá¡áá»áŸ ááá¯ážáá»á¬ážáá¬áááºá á¡ááŸáááºááŒáŸáá·áºááá¯á· ááœá±ážááŒááºáááºá ááá¯á·á¡ááŒááºá áá»áœááºá¯ááºááẠá¡ááá®áá±ážááŸááºáž á ááºážáá±ážááœá² ááá¯ááºááá¯ááºážááœáẠáááºááá¯ááºááá»áŸ á á áºáá±ážááŸá¯áá»á¬ážá áœá¬ááᯠáá±á«ááºážá ááºážááá¯áá«áááºá á¡áá±ážááŒá®ážáá±á¬á¡áá»ááºááŸá¬ Maven ááááºá¡ááºááᯠá¡áá¯á¶ážááŒá¯á á¡ááŒáá¯ááºááŒá±ážáá±á¬á¡áá«ááœáẠá¡ááŒá±ážááá¬áž áá»áá¯ážáááºáá»á¬áž ááŒá¬ááŒáá·áºáá±ááŒááºážááŒá áºáááºá
ááá¯á¡áá»áááºááœááºá Cucumber 4 ááẠááœááºááŸááá¬ážááŒá®ážááŒá áºáá±á¬ááŒá±á¬áá·áº á€áá¬ážááŸááºážá¡ááœáẠkernel ááᯠááŒááºáááºáá±ážáá¬ážááẠáá¯á¶ážááŒááºáá²á·áááºá áá¯ááºáá±ááŸá¯ááŸááºá á¯áá»á¬ážááœáẠááŒáá¯ážá¡ááá·áºááœáẠá¡ááŒáá¯ááºááœáŸáá·áºáááºááẠáááááŒá¯áá¬ážáááºá áá®á¡áá¯áá®á¡áá
- threads á¡áá±á¡ááœááºááá¯ááá¯ážááŒáŸáá·áºááŒááºážááŒáá·áº autotests ááááºáááºááŸá¯ááá¯áááááá¬áá¬ááŒááºáááºá á±áááºá
- autotest áá áºáá¯á á®á¡ááœáẠá¡ááŒá±ážááá¬ážáá»á¬ážááᯠáááºáá®ážáá¬ááœáẠá¡áá»áááºáá¯á¶ážááŸá¯á¶ážááŒááºážááᯠáááºááŸá¬ážáá«á
Multi-threaded autotests á¡ááœáẠáá°áá±á¬ááºááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážááẠáááºáá²áááºááá¯ááºáá±á Cucumber 4 ááẠáá
áºáŠážáá»ááºážá
á® á
ááºážáááºááŸá¯áá
áºáá¯á
á®ááᯠá¡á
ááŸá¡áá¯á¶ážáá áá¯ááºáá±á¬ááºáá±ážáá±á¬ááŒá±á¬áá·áº á¡áá»áá¯á·áá±á¬ áá¬áááºá¡ááŒáááºá¡áá¬áá»á¬ážááᯠThreadLocal variables á¡ááŒá
áºááá¯á· ááŒá±á¬ááºážáá²ááœá¬ážáá«áááºá
Idea refactoring áááááá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááŒá±á¬ááºážáá²áá¬ááœáẠá¡áááá¡áá»ááºááŸá¬ variable ááŸáá¯ááºážááŸááºáá¬ážááá·áº áá±áá¬áá»á¬ážááᯠá
á
áºáá±ážáááºááŒá
áºááẠ(á¥ááá¬á null ááᯠá
á
áºáá±ážááŒááºáž)á ááá¯á·á¡ááŒááºá áááºááẠJunit Runner á¡áááºážááŸááºá
á¬ááœáẠAllure ááááºá¡ááºááᯠááá·áºááẠááá¯á¡ááºáááºá
autotests á áá áºááá·áºááœááºážááŒááºáž á¥ááá¬-
<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 coresá 8 GB RAMá 24 threads)
á¡ááŒá áºááœá±:
- á¡áááºážá¡ááŒá áºáá¯á¶ážá áœá²ááŸá¯áááºážáá«ážááŒááºážá
- áááœá¬ážáá®ážá០áá¬áááá¶á·ááá¯ážááŸá¯ - áá±á¬ááºáááºáááááá¬áá»á¬áž áááá¯á¡ááºáá«á
- áááá¯áááºáᬠcore áá áºáá¯áá»áŸáẠ6 threads áááºááá¯á á¡áá¯ááºáá¯ááºááá¯ááºáááºá
cons:
- áá¯ááºááẠmulti-threaded execution ááᯠáá¶á·ááá¯ážáá±ážááŒá±á¬ááºáž áá±áá»á¬ááẠááá¯á¡ááºáá«áááºá
- áááºáá±á¬ááºááŸá¯á¡ááá·áºááẠááá¯ážáá¬áááºá
GitLab á á¬áá»ááºááŸá¬áá»á¬ážááœáẠAllure á¡á á®áááºáá¶á á¬áá»á¬áž
Multi-threaded execution ááᯠááááºáááºááŒá®ážáá±á¬ááºá á¡á á®áááºáá¶á á¬áá»á¬ážááᯠááá¯ááºážááŒá¬ážá áááºááŒá¬ááẠá¡áá»áááºáá»á¬ážá áœá¬ ááá¯áá¯á¶ážá áœá²áá¬ááŒáááºá ááá¯á¡áá»áááºááœááºá áá»áœááºá¯ááºááá¯á·ááẠá¡á á®áááºáá¶á á¬áá áºáá¯á á®ááᯠGitLab ááá¯á· á¡áá¯á¡áá±á¬ááºá¡ááŒá Ạá¡ááºáá¯ááºáá¯ááºáᬠáááºážááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒá®áž áá¯ááºááá¯ážááẠááá¯á¡ááºáááºá á¡áááºážá¡áááºááŒá±ááŒá®áž á¡áá»áááºá¡ááŒá¬ááŒá®ážáá±á¬á· á¡áááºáááŒá±áá«áá°ážá á¡ááŒá¬ážáá°áá áºáŠážáŠážááẠá¡á á®áááºáá¶á á¬ááᯠáááºážááá¯á·ááá¯ááºááá¯ááºááŒáá·áºááŸá¯ááá¯áá«áá áááºážááá¯á·ááẠá¡áá¬ážáá°áá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááááºááŒá áºáááºá áá»áœááºá¯ááºááá¯á·ááẠáá¯á¶á·ááŒááºáá»ááºááᯠááá¯ááá¯ááŒááºáááºá áœá¬ áááºáá¶ááá°ááá¯ááŒá®áž ááŒá±ááŸááºážáá»ááºáá áºáᯠ- GitLab á á¬áá»ááºááŸá¬áá»á¬ážááᯠááœá±á·ááŸááá²á·áááºá áááºážááẠGitLab á áááºááá±á¬áá¬ážááŸááºážá¡á¬ážáá¯á¶ážááœáẠáá±á¬ááºá áºááŒááºáááœáẠáááá¯ááºáá±á¬ áá«áááºááá·áºá¡ááºá¹áá«áááºááŒá áºáááºá ááá·áºáá¬áá¬ááœáẠá¡ááŒáááºááá¯ááºáá»á¬ážááᯠá¡áá¯á¶ážáá»áááºááŸáá·áº ááá¯ááºááá¯ááºááá·áºááºááŸáá áºááá·áº áááºážááá¯á·ááᯠáááºáá±á¬ááºááŒáá·áºááŸá¯ááœáá·áºáá±ážáááºá
Allure á¡á á®áááºáá¶á á¬áá»á¬ážá áááºáá¬ážááŒááºáá¬ááºáá¯á¶á¡á¬ážáá¯á¶ážááᯠGitLab á á¬áá»ááºááŸá¬áá»á¬ážááœáẠááá¯ááºáá°áá¬ážáááºá á¡á á®áááºáá¶á á¬ááᯠGitLab á á¬áá»ááºááŸá¬áá»á¬ážááá¯á· ááŒáá·áºáá»ááºááŒááºážá¡ááœáẠScript - 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
áá±á¬ááááºááŸááºá·á¡áá°
ááá¯á·ááŒá±á¬áá·áºá áááºááẠCucumber autotest framework ááœáẠThread áá¯á¶ááŒá¯á¶áá±á¬áá¯ááºááᯠááá¯á¡ááºááŒááºážááŸááááŸá á ááºážá á¬ážáá±áá«áá ááᯠá¡ááŒá±ááŸá¬ áááá¬áááºááŸá¬ážáá«ááẠ- Cucumber 4 ááẠáááºážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠááœááºáá°áááŒáá·áº áá áºááŒáá¯ááºáááºáááºážááœáẠthread á¡áá±á¡ááœááºááᯠáááááá¬áᬠááá¯ážáá¬á á±áá«áááºá á€á ááºážáááºááŸá¯áááºážáááºážááŒáá·áº Selenoid ááŸáá·áº á ááºážáááºáá¯á¶áááºážáá»á¬ážáá»á¬ážáá«ááŸááá±á¬ á ááºáá áœááºážáá±á¬ááºáááºááŸáá·áº áááºáááºá ááá¯áá±ážááœááºážááŒá áºáá¬áááºá
ááœá²áá»á¬ážáá±á«áºááœáẠá¡ááá¯á¡áá»á±á¬ááºá
ááºážáááºááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááŒááºážááẠááá·áºá¡á¬áž á¡áá±á¬ááºážáá¯á¶ážá
áœááºážáá±á¬ááºáááºááŒáá·áº á¡áááºážá¡ááŒá
áºáá¯á¶ážá
áœá²ááŸá¯ á¡áááºážáá¯á¶ážá¡áá áá»áŸá±á¬á·áá»ááá¯ááºá
á±ááŒá±á¬ááºáž áááºááœá±á·ááŒááá²á·áááºá ááááºáá»á¬ážááœááºááœá±á·ááá¯ááºáááºá¡ááá¯ááºážá ááŸá
áºááá»áŸááºáá»á¬ážááẠá
áœááºážáá±á¬ááºáááºá
á
áºáá±ážááŸá¯áá»á¬ážááœáẠá¡áá¬ážáá°á¡ááŸáááºá¡áá¯ááºááᯠáááŒá
áºáá±á«áºá
á±áá«á ááá¯á·áá±á¬áºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááá®áá±ážááŸááºážáááºáá±á¬ááºááŸá¯ááœáẠá¡ááá¯á¡áá»á±á¬ááºá
ááºážáááºááŸá¯ ááá áá»á±á¬áºááᯠáá±á«ááºážááá·áºááá¯ááºáá²á·ááŒá®áž 2 ááŒááºáááºáááºááŸá¯ 200 áááá
áºá¡ááœááºážááẠáá¯ááºáá±á¬ááºááá¯ááºáá²á·áááºá áááºážááẠááá·áºá¡á¬áž áááºážááá¯á·áá¶á០áá»ááºááŒááºáá±á¬ áá¯á¶á·ááŒááºáá»ááºááᯠáááºáá¶áááŸáá
á±ááŒá®ážá ááá¯á¡ááºáá«á á¡ááŒá±á¬ááºážá¡áá²áá»á¬áž ááŒá¯áá¯ááºáᬠáá¯ááºáááºážá
ááºááᯠáá±á¬ááºáá
áºááŒááẠáááºáá¯ááºáá«á
source: www.habr.com