Shandisa, chiyero: ruzivo rwekushandisa otomatiki bvunzo paVTB

Dhipatimendi redu rinogadzira mapaipi otomatiki akazara ekutanga mavhezheni matsva ekushandisa munzvimbo yekugadzira. Ehe, izvi zvinoda otomatiki inoshanda bvunzo. Pazasi pekuchekwa pane nyaya yekuti, kutanga nekuyedzwa kwetambo-kamwechete pamushini wemuno, takasvika padanho reakawanda-shinda otomatiki achimhanya paSelenoid mupombi yekuvaka ine Allure chirevo pamapeji eGitLab uye pakupedzisira takawana inotonhorera otomatiki chishandiso. kuti vanhu venguva yemberi vanogona kushandisa zvikwata.

Shandisa, chiyero: ruzivo rwekushandisa otomatiki bvunzo paVTB

Takatangira papi?

Kuita ma autotests uye nekuabatanidza mupombi, taida otomatiki chimiro chaigona kuchinjika kuti chienderane nezvatinoda. Sezvineiwo, ini ndaida kuwana imwechete chiyero cheiyo autotesting injini, yakagadziridzwa yekumisikidza autotests mupombi. Kuti tishandise, takasarudza tekinoroji inotevera:

  • Java,
  • Maven,
  • Selenium,
  • Cucumber+JUNIT 4,
  • Kukwezva,
  • GitLab.

Shandisa, chiyero: ruzivo rwekushandisa otomatiki bvunzo paVTB

Sei ichi chakanyanya seti? Java ndeimwe yemitauro inonyanya kufarirwa kune otomatiki bvunzo, uye nhengo dzese dzechikwata dzinozvitaura. Selenium ndiyo mhinduro iri pachena. Cucumber, pakati pezvimwe zvinhu, yaifanirwa kuwedzera kuvimba nemhedzisiro yekuongororwa otomatiki padivi remadhipatimendi anobatanidzwa mukuedzwa kwebhuku.

Single threaded bvunzo

Kuti tirege kudzoreredza vhiri, isu takatora budiriro kubva kwakasiyana repositories paGitHub sehwaro hweiyo sisitimu uye tikazvigadzirisa isu pachedu. Isu takagadzira repository yeraibhurari huru ine musimboti weiyo autotest framework uye repository ine Goridhe muenzaniso wekushandisa autotests pamusimboti wedu. Chikwata chega chega chaifanira kutora chifananidzo cheGoridhe uye kugadzira bvunzo mukati mayo, kuchichinjira kuchirongwa chavo. Isu takaiendesa kubhangi reGitLab-CI, patakagadzirisa:

  • mazuva ese anomhanya eese akanyorwa otomatiki epurojekiti yega yega;
  • inotanga mupombi yekuvaka.

Pakutanga kwaiva nemiedzo mishoma, uye yakaitwa murukova rumwe. Iine tambo imwe chete inomhanya paWindows mumhanyi GitLab yakatikodzera chaizvo: bvunzo dzakatakura bhenji rekuyedza zvinyoro uye yakashandisa chero zviwanikwa.

Nekufamba kwenguva, nhamba yeautotests yakawedzera kuwanda, uye takafunga nezvekuvamhanyisa nenzira yakafanana, apo kumhanya kuzere kwakatanga kutora anenge maawa matatu. Mamwe matambudziko akaonekwa zvakare:

  • hatina kukwanisa kuona kuti bvunzo dzakagadzikana;
  • bvunzo dzakaitwa kakawanda mumutsara pamushini wemuno dzimwe nguva dzakadonha muCI.

Muenzaniso wekugadzirisa 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>

 Shandisa, chiyero: ruzivo rwekushandisa otomatiki bvunzo paVTB
Allure report muenzaniso

 Shandisa, chiyero: ruzivo rwekushandisa otomatiki bvunzo paVTB
Runner load panguva yebvunzo (8 cores, 8 GB RAM, 1 thread)
 
Zvakanakira bvunzo dze-single-threaded:

  • nyore kumisikidza uye kumhanya;
  • kutanga muCI hakuna kumbosiyana nekutangwa kwenzvimbo;
  • bvunzo hadzina kukanganisa mumwe nemumwe;
  • zvishoma zvinodiwa zvemumhanyi zviwanikwa.

Kuipa kweyedzo ine tambo imwe chete:

  • kutora nguva yakareba kuti apedze;
  • kugadzikana kwenguva refu kwemiedzo;
  • kusashandisa zvakanaka kwezviwanikwa zvemumhanyi, kushandiswa kwakaderera zvakanyanya.

Miedzo pamaforogo eJVM

Sezvo isu tisina hanya neshinda-yakachengeteka kodhi pakushandisa hwaro hwaro, nzira iri pachena yekumhanya yakafanana yaive. cucumber-jvm-parallel-plugin zveMaven. Iyo plugin iri nyore kumisikidza, asi kune kwayo kuenderana kushanda, autotests inofanirwa kuitiswa mumabhurawuza akasiyana. Hapana chekuita, ndaifanira kushandisa Selenoid.

Sevha yeSelenoid yakatangwa pamushini une 32 cores uye 24 GB ye RAM. Muganho wakaiswa pamabhurawuza makumi mana nemasere - tambo 48 pamusimboti uye nezve 1,5 MB ye RAM. Somugumisiro, nguva yekuedza yakaderedzwa kubva pamaawa matatu kusvika kumaminitsi makumi mana. Kumhanyisa kumhanya kwakabatsira kugadzirisa dambudziko rekudzikamisa: ikozvino taigona kukurumidza kumhanya ma autotests matsva 400-40 nguva kusvika tave nechokwadi chekuti vakamhanya zvakavimbika.
Mhedzisiro yekutanga yemhinduro yaive kushandiswa kwepamusoro kwezviwanikwa zvemumhanyi nenhamba shoma yeshinda dzakafanana: pa4 cores uye 8 GB ye RAM, bvunzo dzakamhanya zvakatsiga mune isingapfuure 6 shinda. Chechipiri chakashata: iyo plugin inogadzira makirasi eanomhanya kune yega yega mamiriro, zvisinei kuti mangani ayo anotangwa.

Zvinokosha! Usapfuure shanduko ine ma tags ku argLine, semuenzaniso, seizvi:

<argLine>-Dcucumber.options="--tags ${TAGS} --plugin io.qameta.allure.cucumber2jvm.AllureCucumber2Jvm --plugin pretty"</argLine>
…
Mvn –DTAGS="@smoke"

Kana iwe ukapasa tag nenzira iyi, iyo plugin ichaita vanomhanya kune ese bvunzo, ndiko kuti, ichaedza kumhanyisa bvunzo dzese, kusvetuka iwo pakarepo mushure mekutanga uye kugadzira akawanda maforogo eJVM.

Zvakanaka kukanda shanduko ine tag mukati Tags mune plugin marongero, ona muenzaniso pazasi. Dzimwe nzira dzatakaedza dzine matambudziko ekubatanidza iyo Allure plugin.

Muenzaniso wenguva yekumhanya ye6 bvunzo pfupi ine zvisizvo marongero:

[INFO] Total time: 03:17 min

Muenzaniso weyeyedzo yekumhanya nguva kana iwe uchiendesa iyo tag kuna mvn... -Dcucumber.options:

[INFO] Total time: 44.467 s

Muenzaniso wekugadzirisa 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>

Shandisa, chiyero: ruzivo rwekushandisa otomatiki bvunzo paVTB
Muenzaniso weiyo Allure report (iyo yakanyanya kusagadzikana bvunzo, 4 reruns)

Shandisa, chiyero: ruzivo rwekushandisa otomatiki bvunzo paVTBRunner load panguva yebvunzo (8 cores, 8 GB RAM, 12 threads)
 
Pros:

  • nyore kuseta - iwe unongoda kuwedzera plugin;
  • kukwanisa kuita panguva imwe chete nhamba huru yezviedzo;
  • kukwidziridza bvunzo kudzikamisa kutenda kune nhanho 1. 

Cons:

  • Multiple OS / midziyo inodiwa;
  • kushandiswa kwepamusoro kweforogo imwe neimwe;
  • Plugin yasakara uye haichatsigirwi. 

Nzira yekukunda sei kusagadzikana 

Mabhenji ekuyedza haana kunaka, kungofanana nema autotests ivo pachavo. Hazvishamise kuti isu tine akati wandei bvunzo dzeflacky. Akauya kuzonunura maven surefire plugin, iyo kunze kwebhokisi inotsigira kutangazve bvunzo dzakakundikana. Iwe unofanirwa kuvandudza iyo plugin vhezheni kune inokwana 2.21 uye nyora mutsara mumwechete nehuwandu hwekutangazve mupom faira kana kupfuudza senharo kuMaven.

Muenzaniso wekugadzirisa autotests:

   	
<plugin>
        	
<groupId>org.apache.maven.plugins</groupId>
  	
      <artifactId>maven-surefire-plugin</artifactId>
        	
<version>2.21.0</version>
        	
<configuration>
           	
….
            	
<rerunFailingTestsCount>2</rerunFailingTestsCount>
            	
….
            	
</configuration>
</plugin>

Kana pakutanga: mvn … -Dsurefire.rerunFailingTestsCount=2 …
Sesarudzo, isa Maven sarudzo dzePowerShell script (PS1):

  
Set-Item Env:MAVEN_OPTS "-Dfile.encoding=UTF-8 -Dsurefire.rerunFailingTestsCount=2"

Pros:

  • hapana chikonzero chekutambisa nguva uchiongorora bvunzo isina kugadzikana kana ichiputsika;
  • bvunzo bhenji kugadzikana matambudziko anogona kudzikiswa.

Cons:

  • zvirema zvinoyangarara zvinogona kupotsa;
  • nguva yekumhanya inowedzera.

Parallel bvunzo neCucumber 4 raibhurari

Nhamba yebvunzo yakawedzera zuva nezuva. Takafunga zvakare zvekumhanyisa kumhanya. Pamusoro pezvo, ndaida kubatanidza miedzo yakawanda sezvinobvira mupombi yegungano rekushandisa. Chinhu chakakosha ndechekuti chizvarwa chevamhanyi chakatora nguva yakareba kana chichimhanya chakafanana uchishandisa Maven plugin.

Panguva iyoyo, Cucumber 4 yakanga yatosunungurwa, saka takasarudza kunyorazve kernel yeiyi shanduro. Mune zvinyorwa zvekuburitsa isu takavimbiswa kuvhurwa kwakafanana padanho reshinda. Theoretically inofanira kuva:

  • zvakanyanya kumhanyisa kumhanya kweautotests nekuwedzera huwandu hwetambo;
  • bvisa kurasikirwa kwenguva pakugadzira vamhanyi kune yega yega autotest.

Kugadzirisa chimiro cheakawanda-akasungwa autotests zvakazove zvisina kuoma. Cucumber 4 inomhanyisa bvunzo yega yega patambo yakatsaurirwa kubva pakutanga kusvika kumagumo, saka zvimwe zvakajairika zvinhu zvakachinjika zvakangoshandurwa kuita ThreadLocal variables. 
Chinhu chikuru kana uchishandura uchishandisa Idea refactoring maturusi ndeyekutarisa nzvimbo idzo shanduko yakafananidzwa (semuenzaniso, kutarisa pasina). Mukuwedzera, iwe unofanirwa kuwedzera iyo Allure plugin kuJunit Runner kirasi rondedzero.

Muenzaniso wekugadzirisa 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>

Shandisa, chiyero: ruzivo rwekushandisa otomatiki bvunzo paVTBMuenzaniso weiyo Allure report (iyo yakanyanya kusagadzikana bvunzo, 5 reruns)

Shandisa, chiyero: ruzivo rwekushandisa otomatiki bvunzo paVTBRunner load panguva yebvunzo (8 cores, 8 GB RAM, 24 threads)

Pros:

  • kushandiswa kwezviwanikwa zvishoma;
  • rutsigiro rwekuzvarwa kubva kuCucumber - hapana mamwe maturusi anodiwa;
  • kugona kumhanya anopfuura 6 tambo pa processor core.

Cons:

  • iwe unofanirwa kuve nechokwadi kuti iyo kodhi inotsigira akawanda-shinda execution;
  • chikumbaridzo chekupinda chinowedzera.

Allure anoshuma pamapeji eGitLab

Mushure mekutanga kuurayiwa kwakasiyana-siyana, takatanga kushandisa nguva yakawanda tichiongorora mishumo. Panguva iyoyo, taifanira kurodha mushumo wega wega sechigadzirwa kuGitLab, tobva tadhawunirodha uye nekuiburitsa. Hazvina kunyanyonakira uye zvinotora nguva yakareba. Uye kana mumwe munhu achida kuzvionera repoti, ivo vanozofanira kuita maoperation akafanana. Taida kugamuchira mhinduro nekukurumidza, uye takawana mhinduro - GitLab mapeji. Ichi chinhu chakavakirwa-mukati chinowanikwa kunze kwebhokisi mune ese azvino mavhezheni eGitLab. Inokutendera kuti utumire static saiti pane yako server uye uwane iyo kuburikidza yakananga link.

Yese skrini yeAllure mishumo yakatorwa pamapeji eGitLab. Rugwaro rwekuendesa mushumo kumapeji eGitLab - muWindows PowerShell (izvi zvisati zvaitika unofanirwa kumhanyisa otomatiki):

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

Chii chiri mutsetse wepasi 

Saka, kana iwe wanga uchifunga nezve kana iwe uchida Thread yakachengeteka kodhi muCucumber autotest chimiro, ikozvino mhinduro iri pachena - neCucumber 4 iri nyore kuishandisa, nekudaro ichiwedzera zvakanyanya huwandu hwetambo dzakatangwa panguva imwe chete. Neiyi nzira yekumhanyisa bvunzo, mubvunzo zvino wava nezve mashandiro emuchina neSelenoid uye bhenji rekuyedza.

Kudzidzira kwakaratidza kuti kumhanya otomatiki pane tambo kunobvumidza iwe kudzikisa zviwanikwa zvekushandisa kusvika pashoma nekuita kwakanyanya. Sezvinoonekwa kubva kumagirafu, kupetwa kaviri tambo hakutungamiriri kune yakafanana kukwidziridzwa mukuita bvunzo. Nekudaro, isu takakwanisa kuwedzera anopfuura mazana maviri otomatiki bvunzo kune iyo application kuvaka, iyo kunyangwe ne2 reruns inomhanya mukati memaminitsi makumi maviri nemana. Izvi zvinokutendera kuti ugamuchire mhinduro nekukurumidza kubva kwavari, uye, kana zvichidikanwa, ita shanduko uye dzokorora maitiro zvakare.

Source: www.habr.com

Voeg