ç§ãã¡ã®éšéã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®æ°ããããŒãžã§ã³ãéçšç°å¢ã«èµ·åããããã®å®å šã«èªååããããã€ãã©ã€ã³ãäœæããŠããŸãã ãã¡ãããããã«ã¯èªååãããæ©èœãã¹ããå¿ èŠã§ãã ã«ããã®äžã«ã¯ãããŒã«ã« ãã·ã³ã§ã®ã·ã³ã°ã« ã¹ã¬ãã ãã¹ãããå§ããŠãGitLab ããŒãžã® Allure ã¬ããŒãã䜿çšããŠããã«ã ãã€ãã©ã€ã³ã® Selenoid ã§ãã«ãã¹ã¬ããèªåãã¹ããå®è¡ãããšãããŸã§å°éããæçµçã«ã¯ãŒã«ãªèªååããŒã«ãå ¥æããæ¹æ³ã«ã€ããŠã®ã¹ããŒãªãŒã瀺ãããŠããŸããæªæ¥ã®äººã ãããŒã ã䜿ããããã«ã
ã©ãããå§ããã®ã§ããããïŒ
èªåãã¹ããå®è£ ããŠãã€ãã©ã€ã³ã«çµ±åããã«ã¯ãããŒãºã«åãããŠæè»ã«å€æŽã§ããèªååãã¬ãŒã ã¯ãŒã¯ãå¿ èŠã§ããã çæ³çã«ã¯ãèªåãã¹ãããã€ãã©ã€ã³ã«çµã¿èŸŒãããã«é©åãããèªåãã¹ã ãšã³ãžã³ã®åäžæšæºãååŸããããšèããŠããŸããã å®è£ ã«ã¯æ¬¡ã®ãã¯ãããžãŒãéžæããŸããã
- Javaã
- Mavenã
- ã»ã¬ã³ã
- ãã¥ãŠãª+JUNIT 4ã
- ã¢ãªã¥ãŒã«ã
- GitLabã
ãªããã®ç¹å®ã®ã»ãããªã®ã? Java ã¯èªåãã¹ãã§æã人æ°ã®ããèšèªã® XNUMX ã€ã§ãããããŒã ã¡ã³ããŒå
šå¡ã Java ã話ããŸãã Selenium ã¯æãããªè§£æ±ºçã§ãã ãšããããCucumber ã¯ãæåãã¹ãã«é¢äžããéšéã®èªåãã¹ãã®çµæã«å¯Ÿããä¿¡é Œæ§ãé«ããããšãç®çãšããŠããŸããã
ã·ã³ã°ã«ã¹ã¬ãããã¹ã
è»èŒªã®åçºæãé¿ããããã«ãç§ãã¡ã¯ GitHub äžã®ããŸããŸãªãªããžããªããéçºãããã®ããã¬ãŒã ã¯ãŒã¯ã®åºç€ãšããŠæ¡çšãããããèªåãã¡ã«åãããŠèª¿æŽããŸããã èªåãã¹ã ãã¬ãŒã ã¯ãŒã¯ã®ã³ã¢ãå«ãã¡ã€ã³ ã©ã€ãã©ãªã®ãªããžããªãšãã³ã¢ã«èªåãã¹ããå®è£ ãããŽãŒã«ã ãµã³ãã«ãå«ããªããžããªãäœæããŸããã åããŒã ã¯ãŽãŒã«ã ã€ã¡ãŒãžãååŸãããã®ã€ã¡ãŒãžã§ãã¹ããéçºããããããããžã§ã¯ãã«é©å¿ãããå¿ èŠããããŸããã ããã GitLab-CI ãã³ã¯ã«ãããã€ãã以äžãæ§æããŸããã
- åãããžã§ã¯ãã«å¯ŸããŠæžããããã¹ãŠã®èªåãã¹ããæ¯æ¥å®è¡ããŸãã
- ãã«ã ãã€ãã©ã€ã³ã§èµ·åããŸãã
åœåã¯ãã¹ãã®æ°ãå°ãªããXNUMX ã€ã®ã¹ããªãŒã ã§å®è¡ãããŸããã Windows ã©ã³ã㌠GitLab ã§ã®ã·ã³ã°ã«ã¹ã¬ããå®è¡ã¯éåžžã«é©ããŠããããã¹ãã§ã¯ãã¹ããã³ããžã®è² è·ãéåžžã«è»œãããªãœãŒã¹ãã»ãšãã©äœ¿çšããŸããã§ããã
æéãçµã€ã«ã€ããŠãèªåãã¹ãã®æ°ããŸããŸãå€ããªããå®å šãªå®è¡ã«çŽ XNUMX æéãããããã«ãªã£ããšãããããã䞊è¡ããŠå®è¡ããããšãèããŸããã ä»ã«ã次ã®åé¡ãçºçããŸããã
- ãã¹ããå®å®ããŠããããšã確èªã§ããŸããã§ããã
- ããŒã«ã« ãã·ã³ã§é£ç¶ããŠæ°åå®è¡ããããã¹ãã 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>
ã¢ãªã¥ãŒã«ã¬ããŒãã®äŸ
ãã¹ãäžã®ã©ã³ããŒè² è· (8 ã³ã¢ã8 GB RAMã1 ã¹ã¬ãã)
ã·ã³ã°ã«ã¹ã¬ãããã¹ãã®é·æ:
- ã»ããã¢ãããšå®è¡ãç°¡åã
- CI ã§ã®èµ·åã¯ããŒã«ã«ã§ã®èµ·åãšå®è³ªçã«å€ãããŸããã
- ãã¹ãã¯çžäºã«åœ±é¿ããŸããã
- ã©ã³ã㌠ãªãœãŒã¹ã®æå°èŠä»¶ã
ã·ã³ã°ã«ã¹ã¬ãããã¹ãã®æ¬ ç¹:
- å®äºãããŸã§ã«éåžžã«é·ãæéãããããŸãã
- ãã¹ãã®é·æéã®å®å®åã
- ã©ã³ã㌠ãªãœãŒã¹ã®éå¹ççãªäœ¿çšã䜿çšçãéåžžã«äœãã
JVM ãã©ãŒã¯ã§ã®ãã¹ã
åºæ¬ãã¬ãŒã ã¯ãŒã¯ãå®è£
ãããšãã«ã¹ã¬ããã»ãŒããªã³ãŒããèæ
®ããªãã£ãããã䞊åå®è¡ããæãæçœãªæ¹æ³ã¯æ¬¡ã®ãšããã§ããã
Selenoid ãµãŒããŒã¯ã32 ã³ã¢ãš 24 GB ã® RAM ãæèŒãããã·ã³ã§èµ·åãããŸããã å¶é㯠48 ãã©ãŠã¶ãŒ (ã³ã¢ããã 1,5 ã¹ã¬ãããRAM ã¯çŽ 400 MB) ã«èšå®ãããŸããã ãã®çµæãè©Šéšæé㯠40 æéãã 20 åã«ççž®ãããŸããã å®è¡ãé«éåããããšã§ãå®å®åã®åé¡ã解決ãããŸãããããã§ã確å®ã«å®è¡ãããããšã確èªããããŸã§ãæ°ããèªåãã¹ãã 30 ïœ XNUMX åãã°ããå®è¡ã§ããããã«ãªããŸããã
ãã®ãœãªã¥ãŒã·ã§ã³ã®æåã®æ¬ ç¹ã¯ãå°æ°ã®äžŠåã¹ã¬ããã§ã©ã³ã㌠ãªãœãŒã¹ã®äœ¿çšçãé«ããªãããšã§ããã4 ã³ã¢ãš 8 GB ã® RAM ã§ã¯ããã¹ãã¯ããã 6 ã¹ã¬ããã§å®å®ããŠå®è¡ãããŸããã XNUMX çªç®ã®æ¬ ç¹ã¯ãèµ·åãããã©ã³ã㌠ã¯ã©ã¹ã®æ°ã«é¢ä¿ãªãããã©ã°ã€ã³ãã·ããªãªããšã«ã©ã³ã㌠ã¯ã©ã¹ãçæããããšã§ãã
éèŠïŒ ã¿ã°ä»ãã®å€æ°ãæž¡ããªãã§ãã ãã åŒæ°è¡ããšãã°ã次ã®ããã«ãªããŸãã
<argLine>-Dcucumber.options="--tags ${TAGS} --plugin io.qameta.allure.cucumber2jvm.AllureCucumber2Jvm --plugin pretty"</argLine>
âŠ
Mvn âDTAGS="@smoke"
ãã®æ¹æ³ã§ã¿ã°ãæž¡ããšããã©ã°ã€ã³ã¯ãã¹ãŠã®ãã¹ãã®ã©ã³ããŒãçæããŸããã€ãŸãããã¹ãŠã®ãã¹ãã®å®è¡ãè©Šè¡ããèµ·åçŽåŸã«ãã¹ããã¹ãããããŠãå€æ°ã® JVM ãã©ãŒã¯ãäœæããŸãã
ã¿ã°ä»ãã®å€æ°ãæããã®ã¯æ£ããã§ã ã¿ã° ãã©ã°ã€ã³èšå®ã§ã以äžã®äŸãåç §ããŠãã ããã ç§ãã¡ããã¹ãããä»ã®æ¹æ³ã§ã¯ã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 GB RAMã12 ã¹ã¬ãã)
é·æïŒ
- ç°¡åãªã»ããã¢ãã - ãã©ã°ã€ã³ãè¿œå ããã ãã§ãã
- å€æ°ã®ãã¹ããåæã«å®è¡ããæ©èœã
- ã¹ããã 1 ã®ãããã§ãã¹ãã®å®å®åãå éããŸãã
çæïŒ
- è€æ°ã® OS/ã³ã³ãããå¿ èŠã§ãã
- åãã©ãŒã¯ã®ãªãœãŒã¹æ¶è²»éãå€ãã
- ãã©ã°ã€ã³ã¯å€ãããããµããŒããããªããªããŸããã
äžå®å®ããå æããæ¹æ³
èªåãã¹ãèªäœãšåæ§ã«ããã¹ããã³ããçæ³çã§ã¯ãããŸããã äžå®å®ãªãã¹ããå€æ°ããã®ã¯é©ãã¹ãããšã§ã¯ãããŸããã å©ãã«æ¥ã
èªåãã¹ãã®èšå®äŸ:
<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 ã¹ã¯ãªãã (PS1) ã® Maven ãªãã·ã§ã³ãèšå®ããŸãã
Set-Item Env:MAVEN_OPTS "-Dfile.encoding=UTF-8 -Dsurefire.rerunFailingTestsCount=2"
é·æïŒ
- äžå®å®ãªãã¹ããã¯ã©ãã·ã¥ãããšãã«ããã®åæã«æéã浪費ããå¿ èŠã¯ãããŸããã
- ãã¹ããã³ãã®å®å®æ§ã®åé¡ã軜æžã§ããŸãã
çæïŒ
- æµ®éæ¬ é¥ã¯èŠéãããå¯èœæ§ããããŸãã
- å®è¡æéãå¢å ããŸãã
Cucumber 4 ã©ã€ãã©ãªã䜿çšãã䞊åãã¹ã
æ€æ»æ°ã¯æ¥ã«æ¥ã«å¢ããŠãããŸããã èµ°ãã®ã¹ããŒããäžããããšãæ¹ããŠèããŸããã ããã«ãã§ããã ãå€ãã®ãã¹ããã¢ããªã±ãŒã·ã§ã³ ã¢ã»ã³ã㪠ãã€ãã©ã€ã³ã«çµ±åããããšèããŠããŸããã éèŠãªèŠå ã¯ãMaven ãã©ã°ã€ã³ã䜿çšããŠäžŠåå®è¡ããå Žåãã©ã³ããŒã®çæã«æéãããããããããšã§ããã
åœæããã§ã« Cucumber 4 ããªãªãŒã¹ãããŠããããããã®ããŒãžã§ã³ã«åãããŠã«ãŒãã«ãæžãçŽãããšã«ããŸããã ãªãªãŒã¹ããŒãã§ã¯ãã¹ã¬ããã¬ãã«ã§ã®äžŠè¡èµ·åãçŽæãããŠããŸããã çè«çã«ã¯æ¬¡ã®ããã«ãªãã¹ãã§ãã
- ã¹ã¬ããæ°ãå¢ããããšã§èªåãã¹ãã®å®è¡ãå€§å¹ ã«é«éåããŸãã
- åèªåãã¹ãã®ã©ã³ããŒçæã«ãããæéã®ãã¹ãæé€ããŸãã
ãã«ãã¹ã¬ããèªåãã¹ãçšã«ãã¬ãŒã ã¯ãŒã¯ãæé©åããããšã¯ãããã»ã©é£ãããªãããšãããããŸããã Cucumber 4 ã¯ãæåããæåŸãŸã§å°çšã®ã¹ã¬ããã§åã
ã®ãã¹ããå®è¡ãããããããã€ãã®äžè¬çãªéçãªãã®ã¯åã« 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 GB RAMã24 ã¹ã¬ãã)
é·æïŒ
- è³æºæ¶è²»ãå°ãªãã
- Cucumber ããã®ãã€ãã£ã ãµããŒã - è¿œå ã®ããŒã«ã¯å¿ èŠãããŸããã
- ããã»ããµ ã³ã¢ããšã« 6 ã€ãè¶ ããã¹ã¬ãããå®è¡ã§ããæ©èœã
çæïŒ
- ã³ãŒãããã«ãã¹ã¬ããå®è¡ããµããŒãããŠããããšã確èªããå¿ èŠããããŸãã
- ãšã³ããªã®ãããå€ãå¢å ããŸãã
GitLab ããŒãžã® Allure ã¬ããŒã
ãã«ãã¹ã¬ããå®è¡ã®å°å ¥åŸãã¬ããŒãã®åæã«ã¯ããã«å€ãã®æéãè²»ããããã«ãªããŸããã åœæã¯ãåã¬ããŒããã¢ãŒãã£ãã¡ã¯ããšã㊠GitLab ã«ã¢ããããŒããããããããŠã³ããŒãããŠè§£åããå¿ èŠããããŸããã ããŸã䟿å©ã§ã¯ãªãããæéãããããŸãã ãŸããä»ã®äººãèªåã§ã¬ããŒãã衚瀺ãããå Žåããåãæäœãè¡ãå¿ èŠããããŸãã ç§ãã¡ã¯ãã£ãŒãããã¯ããã£ãšæ©ãåãåããããšèããŠããŸããããGitLab ããŒãžãšãã解決çãèŠã€ããŸããã ããã¯ãGitLab ã®æè¿ã®ãã¹ãŠã®ããŒãžã§ã³ã§ããã«äœ¿çšã§ããçµã¿èŸŒã¿æ©èœã§ãã ãµãŒããŒäžã«éçãµã€ããå±éããçŽæ¥ãªã³ã¯çµç±ã§ã¢ã¯ã»ã¹ã§ããããã«ããŸãã
Allure ã¬ããŒãã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãã¹ãŠ GitLab ããŒãžã§æ®åœ±ãããŸããã ã¬ããŒãã GitLab ããŒãžã«å±éããããã®ã¹ã¯ãªãã - 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 èªåãã¹ã ãã¬ãŒã ã¯ãŒã¯ã«ã¹ã¬ãã ã»ãŒã ã³ãŒããå¿ èŠãã©ãããèããŠããå Žåãçãã¯æããã§ããCucumber 4 ã§ã¯å®è£ ãç°¡åã§ãããã«ãã£ãŠåæã«èµ·åãããã¹ã¬ããã®æ°ãå€§å¹ ã«å¢å ããŸãã ãã®ãã¹ãå®è¡æ¹æ³ã§ã¯ãSelenoid ãšãã¹ããã³ããåãããã·ã³ã®ããã©ãŒãã³ã¹ãåé¡ã«ãªããŸãã
å®éã«ãã¹ã¬ããã§èªåãã¹ããå®è¡ãããšãæé«ã®ããã©ãŒãã³ã¹ã§ãªãœãŒã¹æ¶è²»ãæå°éã«æããããšãã§ããããšãããã£ãŠããŸãã ã°ã©ããããããããã«ãã¹ã¬ããã 2 åã«ããŠããããã©ãŒãã³ã¹ ãã¹ãã§ã¯åæ§ã®å éãåŸãããŸããã ãã ããã¢ããªã±ãŒã·ã§ã³ã®ãã«ãã« 200 ãè¶
ããèªåãã¹ããè¿œå ããããšãã§ãã5 åã®åå®è¡ã§ãçŽ 24 åã§å®è¡ã§ããŸããã ããã«ããããŠãŒã¶ãŒããè¿
éãªãã£ãŒãããã¯ãåãåããå¿
èŠã«å¿ããŠå€æŽãå ããŠæé ãå床繰ãè¿ãããšãã§ããŸãã
åºæïŒ habr.com