Ukuphumeza, isikali: amava okusebenzisa iimvavanyo ezizenzekelayo kwi-VTB

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.

Ukuphumeza, isikali: amava okusebenzisa iimvavanyo ezizenzekelayo kwi-VTB

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.

Ukuphumeza, isikali: amava okusebenzisa iimvavanyo ezizenzekelayo kwi-VTB

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>

 Ukuphumeza, isikali: amava okusebenzisa iimvavanyo ezizenzekelayo kwi-VTB
Umzekelo wengxelo ye-Allure

 Ukuphumeza, isikali: amava okusebenzisa iimvavanyo ezizenzekelayo kwi-VTB
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. cucumber-jvm-parallel-plugin kuMaven. I-plugin kulula ukuyiqwalasela, kodwa ekusebenzeni okuhambelanayo okuchanekileyo, ii-autotests kufuneka ziqhutywe kwiziphequluli ezahlukeneyo. Akukho nto yakwenza, kwafuneka ndisebenzise i-Selenoid.

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>

Ukuphumeza, isikali: amava okusebenzisa iimvavanyo ezizenzekelayo kwi-VTB
Umzekelo wengxelo ye-Allure (olona vavanyo lungazinzanga, ii-4 reruns)

Ukuphumeza, isikali: amava okusebenzisa iimvavanyo ezizenzekelayo kwi-VTBUmthwalo 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 maven surefire plugin, leyo ngaphandle kwebhokisi ixhasa ukuqalisa kwakhona uvavanyo olungaphumelelanga. Kufuneka uhlaziye i-plugin version ubuncinane kwi-2.21 kwaye ubhale umgca omnye kunye nenani lokuqalisa kwakhona kwifayile yepom okanye uyidlulise njengengxabano kuMaven.

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>

Ukuphumeza, isikali: amava okusebenzisa iimvavanyo ezizenzekelayo kwi-VTBUmzekelo wengxelo ye-Allure (olona vavanyo lungazinzanga, ii-5 reruns)

Ukuphumeza, isikali: amava okusebenzisa iimvavanyo ezizenzekelayo kwi-VTBUmthwalo 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

Yongeza izimvo