Icandelo lethu lidala imibhobho ezenzekelayo ngokupheleleyo yokuqalisa iinguqulelo ezintsha zezicelo kwindawo yemveliso. Ngokuqinisekileyo, oku kufuna iimvavanyo zokusebenza ezizenzekelayo. Ezantsi kokusikwa libali malunga nokuba, ukuqala ngovavanyo lomsonto omnye kumatshini wasekhaya, sifikelele kwinqanaba lokuvavanywa kwe-autotest enemisonto emininzi esebenza kwi-Selenoid kumbhobho wokwakha kunye nengxelo ye-Allure kumaphepha e-GitLab kwaye ekugqibeleni safumana isixhobo esizisebenzelayo esipholileyo. ukuba abantu bexesha elizayo banokusebenzisa amaqela.
Saqala phi?
Ukuphumeza uvavanyo lwe-autotest kwaye ludibanise kumbhobho, sasidinga isakhelo esizenzekelayo esinokuthi sitshintshwe ngokuguquguqukayo ukuze sihambelane neemfuno zethu. Ngokufanelekileyo, bendifuna ukufumana umgangatho omnye we-injini yokuhlola, elungiselelwe ukufakela ii-autotests kumbhobho. Ukuphumeza sikhethe ezi teknoloji zilandelayo:
- IJava,
- Maven,
- Selenium,
- Cucumber+JUNIT 4,
- Umtsalane,
- I-GitLab.
Kutheni le seti ethile? IJava yenye yezona lwimi zidumileyo kuvavanyo oluzenzekelayo, kwaye onke amalungu eqela ayazithetha. Selenium sisisombululo esicacileyo. Ikhukhamba, phakathi kwezinye izinto, bekufuneka ikhulise ukuzithemba kwiziphumo zovavanyo oluzenzekelayo kwicala lamasebe abandakanyekayo kuvavanyo lwezandla.
Iimvavanyo ezinemisonto enye
Ukuze singaphindi sivelise ivili, sithathe uphuhliso kwiindawo ezahlukeneyo zokugcina kwi-GitHub njengesiseko sesakhelo kwaye sizilungisele thina. Senze indawo yokugcina ilayibrari engundoqo kunye nesiseko se-autotest framework kunye nogcino kunye nomzekelo weGolide wokuphumeza uvavanyo oluzenzekelayo kumbindi wethu. Iqela ngalinye kwafuneka lithathe umfanekiso weGolide kwaye liphuhlise iimvavanyo kuwo, liwulungelelanise neprojekthi yalo. Siyithumele kwibhanki ye-GitLab-CI, apho siqwalasele:
- yonke imihla yovavanyo olubhaliweyo lweprojekthi nganye;
- iqalisa kumbhobho wokwakha.
Ekuqaleni zazimbalwa iimvavanyo, yaye zaziqhutywa kumsinga omnye. Umsonto omnye osebenza kwimbaleki yeWindows iGitLab isilungele kakuhle: iimvavanyo zilayishe ibhentshi yovavanyo ngokulula kwaye zasebenzisa phantse akukho zixhobo.
Ngokuhamba kwexesha, inani le-autotest liye lakhula ngakumbi, kwaye sacinga ukubaleka ngokufana, xa ukubaleka ngokupheleleyo kwaqala ukuthatha malunga neeyure ezintathu. Ezinye iingxaki ziye zavela:
- asikwazanga ukuqinisekisa ukuba iimvavanyo zizinzile;
- iimvavanyo eziye zaqhutywa izihlandlo eziliqela ngokulandelelana kumatshini wendawo maxa wambi yantlitheka CI.
Umzekelo wokuseta uvavanyo oluzenzekelayo:
<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>
Umzekelo wengxelo ye-Allure
Umthwalo wembaleki ngexesha lovavanyo (8 cores, 8 GB RAM, 1 thread)
Iinzuzo zovavanyo olunomsonto omnye:
- kulula ukuseta nokusebenza;
- ukuqaliswa kwi-CI akukho nto yahlukileyo kumiliselo lwasekhaya;
- iimvavanyo azichaphazeli omnye nomnye;
- Ubuncinci beemfuno zezibonelelo zembaleki.
Ububi bovavanyo olunomsonto omnye:
- kuthatha ixesha elide ukugqiba;
- ukuzinziswa kwexesha elide lovavanyo;
- ukusetyenziswa ngokufanelekileyo kwezixhobo zembaleki, ukusetyenziswa okuphantsi kakhulu.
Uvavanyo kwiifolokhwe ze-JVM
Kuba asikhange siyithathele ingqalelo ikhowudi ekhuselekileyo yomsonto xa siphumeza isakhelo esisisiseko, eyona ndlela icacileyo yokubaleka ngokunxuseneyo yayiyiyo.
Umncedisi we-Selenoid waqaliswa kumatshini onama-cores angama-32 kunye ne-24 GB ye-RAM. Umda wawubekwe kwiiphequluli ze-48 - imicu ye-1,5 ngengundoqo kunye ne-400 MB ye-RAM. Ngenxa yoko, ixesha lokuvavanya lancitshiswa ukusuka kwiiyure ezintathu ukuya kwimizuzu engama-40. Ukukhawulezisa ukubaleka kuncede ukucombulula ingxaki yokuzinzisa: ngoku sinokuqhuba ngokukhawuleza ii-autotests ezintsha ngamaxesha angama-20-30 de siqiniseke ukuba zibaleka ngokuthembekileyo.
I-drawback yokuqala yesisombululo yayikukusetyenziswa okuphezulu kwezixhobo zomgijimi kunye nenani elincinci leentambo ezifanayo: kwii-cores ze-4 kunye ne-8 GB ye-RAM, iimvavanyo ziqhube ngokuzinzileyo kwimicu engaphezu kwe-6. Ububi besibini: iplagin ivelisa iiklasi zembaleki kwimeko nganye, kungakhathaliseki ukuba zingaphi na eziqalwayo.
Kubalulekile! Musa ukudlulisa uguqulo olunethegi ukuya argLine, umzekelo, ngolu hlobo:
<argLine>-Dcucumber.options="--tags ${TAGS} --plugin io.qameta.allure.cucumber2jvm.AllureCucumber2Jvm --plugin pretty"</argLine>
β¦
Mvn βDTAGS="@smoke"
Ukuba udlulisa ithegi ngale ndlela, iplagin iya kuvelisa abagijimi bazo zonke iimvavanyo, oko kukuthi, iya kuzama ukuqhuba zonke iimvavanyo, ukutsiba ngokukhawuleza emva kokuqaliswa nokudala iifolokhwe ezininzi ze-JVM.
Kuchanekile ukujula into eguquguqukayo enethegi Tags kwizicwangciso zeplagin, bona umzekelo ongezantsi. Ezinye iindlela esizivavanyileyo zineengxaki zokudibanisa iplagi ye-Allure.
Umzekelo wexesha elisebenzayo leemvavanyo ezi-6 ezimfutshane ezinoseto olungachanekanga:
[INFO] Total time: 03:17 min
Umzekelo wexesha lokuvavanya ukuba uthumela ngokuthe ngqo ithegi ku mvn... βDcucumber.options:
[INFO] Total time: 44.467 s
Umzekelo wokuseta uvavanyo oluzenzekelayo:
<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>
Umzekelo wengxelo ye-Allure (olona vavanyo lungazinzanga, ii-4 reruns)
Umthwalo wembaleki ngexesha lovavanyo (8 cores, 8 GB RAM, 12 threads)
Iinkonzo:
- ukuseta lula - ufuna nje ukongeza iplagin;
- ukukwazi ukwenza ngaxeshanye inani elikhulu leemvavanyo;
- ukukhawuleza kozinziso lovavanyo enkosi kwinyathelo loku-1.
Umgcini:
- Ii-OS ezininzi/izikhongozeli ezifunekayo;
- ukusetyenziswa okuphezulu kobutyebi kwifolokhwe nganye;
- I-plugin iphelelwe lixesha kwaye ayisaxhaswa.
Indlela yokoyisa ukungazinzi
Iibhentshi zovavanyo azilunganga, njengee-autotest ngokwazo. Ayimangalisi into yokuba sibe neqela leemvavanyo ezingacacanga. Weza kuhlangula
Umzekelo wokuseta uvavanyo oluzenzekelayo:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
β¦.
<rerunFailingTestsCount>2</rerunFailingTestsCount>
β¦.
</configuration>
</plugin>
Okanye ekuqaliseni: mvn β¦ -Dsurefire.rerunFailingTestsCount=2 β¦
Njengokhetho, seta iinketho zeMaven kwiskripthi sePowerShell (PS1):
Set-Item Env:MAVEN_OPTS "-Dfile.encoding=UTF-8 -Dsurefire.rerunFailingTestsCount=2"
Iinkonzo:
- akukho mfuneko yokuchitha ixesha lokuhlalutya uvavanyo olungazinzanga xa luntlitheka;
- iingxaki zokuzinza kwebhentshi yovavanyo zinokuncitshiswa.
Umgcini:
- iziphene ezidadayo zinokuphoswa;
- ixesha lokubaleka liyenyuka.
Iimvavanyo ezinxuseneyo nethala leencwadi leCucumber 4
Inani leemvavanyo lalikhula yonke imihla. Saphinda sacinga ngokukhawulezisa ukubaleka. Ukongezelela, ndandifuna ukudibanisa iimvavanyo ezininzi kangangoko kunokwenzeka kumbhobho wokuhlanganisa isicelo. Eyona nto ibalulekileyo yayikukuba isizukulwana sababaleki sithathe ixesha elide kakhulu xa sisebenza ngaxeshanye sisebenzisa iplagi yeMaven.
Ngelo xesha, iCucumber 4 yayisele ikhululiwe, ngoko sagqiba ekubeni sibhale kwakhona i-kernel yale nguqulo. Kumanqaku okukhululwa sathenjiswa ukuqaliswa okufanayo kwinqanaba lemisonto. Ngokwethiyori le bekufanele ukuba:
- khawulezisa ngokubonakalayo ukusebenza kovavanyo oluzenzekelayo ngokwandisa inani lemisonto;
- phelisa ilahleko yexesha ekuveliseni iimbaleki kwi-autotest nganye.
Ukuphucula isakhelo sovavanyo lweeautotes ezinemisonto emininzi kuye kwabonakala kungekho nzima kangako. I-Cucumber 4 iqhuba uvavanyo lomntu ngamnye kumsonto ozinikeleyo ukusuka ekuqaleni ukuya ekugqibeleni, ngoko ke ezinye izinto eziqhelekileyo ze-static ziguqulelwe kwi-ThreadLocal variables.
Eyona nto iphambili xa uguqulela usebenzisa Idea refactoring izixhobo kukukhangela iindawo apho uguquko luthelekiswe (umzekelo, ukujonga i-null). Ukongeza, kufuneka ungeze iplagi ye-Allure kwi-Junit Runner yeklasi yesichasiselo.
Umzekelo wokuseta uvavanyo oluzenzekelayo:
<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>
Umzekelo wengxelo ye-Allure (olona vavanyo lungazinzanga, ii-5 reruns)
Umthwalo wembaleki ngexesha lovavanyo (8 cores, 8 GB RAM, 24 threads)
Iinkonzo:
- ukusetyenziswa kobutyebi obuphantsi;
- inkxaso yemveli evela Cucumber - akukho zixhobo ezongezelelweyo ezifunekayo;
- ukukwazi ukuqhuba ngaphezulu kwe-6 imisonto kwiprosesa engundoqo.
Umgcini:
- kufuneka uqinisekise ukuba ikhowudi ixhasa ukuphunyezwa kwemisonto emininzi;
- umda wokungena uyanda.
Iingxelo ezinomtsalane kumaphepha eGitLab
Emva kokwazisa ukubulawa okunemisonto emininzi, saqala ukuchitha ixesha elininzi sihlalutya iingxelo. Ngelo xesha, kwafuneka silayishe ingxelo nganye njenge-artifact kwi-GitLab, emva koko siyikhuphele kwaye siyikhuphe. Ayilunganga kakhulu kwaye ithatha ixesha elide. Kwaye ukuba omnye umntu ufuna ukuzibonela ngokwakhe ingxelo, kuya kufuneka enze imisebenzi efanayo. Besifuna ukufumana impendulo ngokukhawuleza, kwaye sifumene isisombululo-amaphepha eGitLab. Eli linqaku elakhelwe ngaphakathi elifumaneka ngaphandle kwebhokisi kuzo zonke iinguqulelo zamva nje zeGitLab. Ikuvumela ukuba usebenzise iisayithi ezimileyo kwiseva yakho kwaye ufikelele kuzo ngekhonkco elithe ngqo.
Zonke iiskrini zeengxelo ze-Allure zithathwe kumaphepha e-GitLab. Iscript sokuthumela ingxelo kumaphepha eGitLab-kwiWindows PowerShell (phambi koku kufuneka usebenzise uvavanyo oluzenzekelayo):
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
Yintoni ekupheleni
Ke, ukuba ubucinga malunga nokuba ufuna ikhowudi ekhuselekileyo ye-Tread in the Cucumber autotest framework, ngoku impendulo icacile - ngeCucumber 4 kulula ukuyiphumeza, ngaloo ndlela inyusa kakhulu inani lemicu eqaliswe ngaxeshanye. Ngale ndlela yokuqhuba iimvavanyo, umbuzo ngoku uba malunga nokusebenza komatshini kunye ne-Selenoid kunye nebhentshi yovavanyo.
Ukuziqhelanisa kubonisile ukuba ukuqhuba ii-autotests kwimicu kukuvumela ukuba unciphise ukusetyenziswa kwezixhobo ukuya kubuncinci ngokusebenza kakuhle. Njengoko kunokubonwa kwiigrafu, ukuphinda kabini imisonto akukhokeleli kwisantya esifanayo kwiimvavanyo zokusebenza. Nangona kunjalo, siye sakwazi ukongeza ngaphezulu kwe-2 yovavanyo oluzenzekelayo kulwakhiwo lwesicelo, oluthi kunye ne-200 reruns isebenze malunga nemizuzu engama-5. Oku kukuvumela ukuba ufumane impendulo ngokukhawuleza kubo, kwaye, ukuba kuyimfuneko, wenze utshintsho kwaye uphinde inkqubo kwakhona.
umthombo: www.habr.com