Sebenzisa, sikala: isipiliyoni sokusebenzisa izivivinyo ezizenzakalelayo e-VTB

Isigaba sethu sidala amapayipi azenzakalelayo ngokugcwele ukuze kwethulwe izinguqulo ezintsha zezinhlelo zokusebenza endaweni yokukhiqiza. Yebo, lokhu kudinga ukuhlolwa kokusebenza okuzenzakalelayo. Ngezansi kokusikwa kunendaba emayelana nokuthi, siqala ngokuhlolwa kochungechunge olulodwa emshinini wasendaweni, sifinyelele eqophelweni lokuhlola okuzenzakalelayo okunemicu eminingi okusebenza ku-Selenoid epayipini lokwakha elinombiko we-Allure emakhasini e-GitLab futhi ekugcineni sathola ithuluzi elipholile lokuzenzakalela. ukuthi abantu bakusasa bangasebenzisa amaqembu.

Sebenzisa, sikala: isipiliyoni sokusebenzisa izivivinyo ezizenzakalelayo e-VTB

Siqale kuphi?

Ukuze sisebenzise ukuhlola okuzenzakalelayo futhi sikuhlanganise epayipini, sidinga uhlaka oluzenzakalelayo olungashintshwa kalula ukuze luvumelane nezidingo zethu. Ngokufanelekile, bengifuna ukuthola indinganiso eyodwa yenjini yokuhlola ngokuzenzakalelayo, elungiselwe ukushumeka ukuhlola okuzenzakalelayo epayipini. Ukuze sisebenzise sikhethe ubuchwepheshe obulandelayo:

  • IJava,
  • I-Maven,
  • Selenium,
  • Ikhukhamba+JUNIT 4,
  • Ukuyenga,
  • IGitLab.

Sebenzisa, sikala: isipiliyoni sokusebenzisa izivivinyo ezizenzakalelayo e-VTB

Kungani le sethi ethile? I-Java ingolunye lwezilimi ezidume kakhulu ezivivinyweni ezizenzakalelayo, futhi wonke amalungu eqembu ayazikhuluma. I-Selenium iyisixazululo esisobala. Ikhukhamba, phakathi kwezinye izinto, bekufanele ikhulise ukuzethemba emiphumeleni yokuhlolwa okuzenzakalelayo engxenyeni yeminyango ebambe iqhaza ekuhloleni okwenziwa ngesandla.

Ukuhlolwa kochungechunge olulodwa

Ukuze singalisunguli kabusha isondo, sithathe intuthuko kumakhosombe ahlukahlukene ku-GitHub njengesisekelo sohlaka futhi sazilungisela bona. Sakhe inqolobane yelabhulali eyinhloko enomnyombo wohlaka lokuhlola okuzenzakalelayo kanye nenqolobane enesibonelo Segolide sokuqalisa ukuhlola okuzenzakalelayo kumongo wethu. Ithimba ngalinye bekufanele lithathe isithombe Segolide futhi lenze izivivinyo kuso, lisivumelanise nephrojekthi yalo. Sifake i-GitLab-CI ebhange, lapho silungise khona:

  • ukusebenza kwansuku zonke kwakho konke ukuhlola okuzenzakalelayo okubhaliwe kwephrojekthi ngayinye;
  • iqala emgqeni wokwakha.

Ekuqaleni zazimbalwa izivivinyo, futhi zenziwa emfudlaneni owodwa. Ukugijima okunochungechunge olulodwa kumgijimi we-Windows i-GitLab kusifanele kahle: izivivinyo zilayishe ibhentshi lokuhlola kalula futhi azisebenzisanga nhlobo izinsiza.

Ngokuhamba kwesikhathi, inani lama-autotest lakhula kakhulu, futhi sacabanga ukuwaqhuba ngokufana, lapho ukugijima okugcwele kuqala ukuthatha cishe amahora amathathu. Ezinye izinkinga nazo zavela:

  • asikwazanga ukuqinisekisa ukuthi izivivinyo bezizinzile;
  • ukuhlolwa okwenziwa izikhathi ezimbalwa zilandelana emshinini wendawo kwesinye isikhathi kuphahlazeke ku-CI.

Isibonelo sokusetha ukuhlola okuzenzakalelayo:

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

 Sebenzisa, sikala: isipiliyoni sokusebenzisa izivivinyo ezizenzakalelayo e-VTB
Isibonelo sombiko we-Allure

 Sebenzisa, sikala: isipiliyoni sokusebenzisa izivivinyo ezizenzakalelayo e-VTB
Ukulayisha komgijimi phakathi nokuhlolwa (8 cores, 8 GB RAM, 1 thread)
 
Ubuhle bokuhlolwa kochungechunge olulodwa:

  • kulula ukusetha nokusebenza;
  • ukwethulwa ku-CI empeleni akufani nokwethulwa kwendawo;
  • ukuhlolwa akuthinti omunye nomunye;
  • ubuncane bezidingo zezinsiza zokugijima.

Okubi kokuhlolwa kochungechunge olulodwa:

  • kuthatha isikhathi eside kakhulu ukuqeda;
  • ukuzinza okude kokuhlolwa;
  • ukusetshenziswa okungalungile kwezinsiza zokugijima, ukusetshenziswa okuphansi kakhulu.

Izivivinyo kumafoloko e-JVM

Njengoba asizange siyinakekele ikhodi ephephile lapho sisebenzisa uhlaka oluyisisekelo, indlela esobala kakhulu yokusebenza ngokuhambisana kwaba ikhukhamba-jvm-parallel-plugin ngoMaven. I-plugin kulula ukuyilungisa, kodwa ukuze usebenze ngokufana okulungile, ukuhlola okuzenzakalelayo kufanele kusetshenziswe kuziphequluli ezihlukene. Akukho okufanele ngikwenze, bekufanele ngisebenzise i-Selenoid.

Iseva ye-Selenoid yethulwe emshinini onama-cores angu-32 kanye no-24 GB we-RAM. Umkhawulo wamiswa kuziphequluli ezingu-48 - imicu engu-1,5 ingqikithi ngayinye kanye ne-RAM engaba ngu-400 MB. Ngenxa yalokho, isikhathi sokuhlola sancishiswa sisuka emahoreni amathathu saya kumaminithi angu-40. Ukusheshisa ukugijima kusize ukuxazulula inkinga yokusimamisa: manje sesingakwazi ukuqalisa ngokushesha ukuhlola okuzenzakalelayo okusha izikhathi ezingu-20–30 size sibe nesiqiniseko sokuthi asebenza ngokwethembeka.
Impendulo yokuqala yesixazululo kwakuwukusetshenziswa okuphezulu kwezinsiza zokugijima ezinenombolo encane yezintambo ezifanayo: kuma-cores angu-4 no-8 GB we-RAM, ukuhlolwa kwasebenza ngokuzinzile ngaphandle kwezintambo ezi-6. Ububi besibili: i-plugin ikhiqiza amakilasi abagijimi kusimo ngasinye, kungakhathaliseki ukuthi mangaki awo aqalisiwe.

Kubalulekile! Ungadlulisi okuguquguqukayo okunamathegi umugqa we-arg, isibonelo, kanje:

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

Uma udlulisa ithegi ngale ndlela, i-plugin izokhiqiza abagijimi bazo zonke izivivinyo, okungukuthi, izozama ukusebenzisa zonke izivivinyo, izeqa ngokushesha ngemva kokwethulwa nokudala izimfoloko eziningi ze-JVM.

Kulungile ukuphonsa okuguquguqukayo okunomaka kukho tags kuzilungiselelo ze-plugin, bona isibonelo ngezansi. Ezinye izindlela esizihlolile zinezinkinga zokuxhuma i-plugin ye-Allure.

Isibonelo sesikhathi sokusebenza sokuhlola okufushane okungu-6 okunezilungiselelo ezingalungile:

[INFO] Total time: 03:17 min

Isibonelo sesikhathi sokuqalisa sokuhlola uma udlulisela ithegi ku- mvn... -Dcucumber.options:

[INFO] Total time: 44.467 s

Isibonelo sokusetha ukuhlola okuzenzakalelayo:

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

Sebenzisa, sikala: isipiliyoni sokusebenzisa izivivinyo ezizenzakalelayo e-VTB
Isibonelo sombiko we-Allure (uhlolo olungazinzi kakhulu, ukuphinda okungu-4)

Sebenzisa, sikala: isipiliyoni sokusebenzisa izivivinyo ezizenzakalelayo e-VTBUmthwalo womgijimi phakathi nokuhlolwa (8 cores, 8 GB RAM, 12 threads)
 
Izinzuzo:

  • ukusetha okulula - udinga nje ukwengeza i-plugin;
  • ikhono lokwenza ngesikhathi esisodwa inani elikhulu lokuhlola;
  • ukusheshisa kokuzinzisa ukuhlolwa sibonga isinyathelo 1. 

Umthengi:

  • Kudingeka ama-OS/container amaningi;
  • ukusetshenziswa okuphezulu kwezinsiza ngemfoloko ngayinye;
  • I-plugin isiphelelwe yisikhathi futhi ayisasekelwa. 

Indlela yokunqoba ukungazinzi 

Amabhentshi okuhlola awalungile, njengama-autotest ngokwawo. Akumangazi ukuthi sinenqwaba yezivivinyo ezingaqondile. Kwafika usizo i-plugin ye-maven surefire, ephuma ebhokisini esekela ukuqalisa kabusha ukuhlola okuhlulekile. Udinga ukubuyekeza inguqulo ye-plugin okungenani ibe ngu-2.21 futhi ubhale umugqa owodwa onenombolo yokuqalwa kabusha kufayela le-pom noma uwudlulisele njengengxabano ku-Maven.

Isibonelo sokusetha ukuhlola okuzenzakalelayo:

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

Noma ekuqaleni: mvn … -Dsurefire.rerunFailingTestsCount=2 …
Njengenketho, setha izinketho ze-Maven zeskripthi se-PowerShell (PS1):

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

Izinzuzo:

  • asikho isidingo sokuchitha isikhathi sihlaziya isivivinyo esingazinzile lapho siphahlazeka;
  • izinkinga zokuzinza kwebhentshi zingancishiswa.

Umthengi:

  • amaphutha antantayo angagejwa;
  • isikhathi sokugijima siyakhula.

Ukuhlolwa okuhambisanayo nomtapo wezincwadi we-Cucumber 4

Inani lokuhlolwa likhule nsuku zonke. Siphinde sacabanga ukusheshisa ukugijima. Ngaphezu kwalokho, bengifuna ukuhlanganisa izivivinyo eziningi ngangokunokwenzeka epayipini lokuhlanganisa lesicelo. Isici esibalulekile ukuthi isizukulwane sabagijimi sithathe isikhathi eside kakhulu lapho sisebenza ngokufana sisebenzisa i-plugin ye-Maven.

Ngaleso sikhathi, i-Cucumber 4 yayisivele ikhululiwe, ngakho-ke sanquma ukubhala kabusha i-kernel yale nguqulo. Kumanothi okukhululwa sathenjiswa ukwethulwa okufanayo ezingeni lentambo. Ngokwethiyori, lokhu bekufanele kube:

  • ukusheshisa kakhulu ukusebenza kwama-autotests ngokwandisa inani lezintambo;
  • susa ukulahlekelwa isikhathi ekukhiqizeni abagijimi ku-autotest ngayinye.

Ukulungiselela uhlaka lwama-autotes anezintambo eziningi akubanga nzima kangako. I-Cucumber 4 isebenzisa ukuhlolwa komuntu ngamunye kuchungechunge oluzinikele kusukela ekuqaleni kuya ekugcineni, ngakho-ke ezinye izinto ezivamile ezimile zivele zaguqulwa zaba okuguquguqukayo kwe-ThreadLocal. 
Into esemqoka lapho uguqula usebenzisa amathuluzi okwenza kabusha i-Idea ukuhlola izindawo lapho okuguquguqukayo kuqhathaniswa khona (isibonelo, ukuhlola ukuthi akukho lutho). Ngaphezu kwalokho, udinga ukwengeza i-plugin ye-Allure kusichasiselo sekilasi leJunit Runner.

Isibonelo sokusetha ukuhlola okuzenzakalelayo:

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

Sebenzisa, sikala: isipiliyoni sokusebenzisa izivivinyo ezizenzakalelayo e-VTBIsibonelo sombiko we-Allure (uhlolo olungazinzi kakhulu, ukuphinda okungu-5)

Sebenzisa, sikala: isipiliyoni sokusebenzisa izivivinyo ezizenzakalelayo e-VTBUmthwalo womgijimi phakathi nokuhlolwa (8 cores, 8 GB RAM, 24 threads)

Izinzuzo:

  • ukusetshenziswa okuphansi kwezinsiza;
  • ukwesekwa komdabu kusuka kuCucumber - awekho amathuluzi engeziwe adingekayo;
  • ikhono lokusebenzisa imicu engaphezu kwe-6 iphrosesa ngayinye core.

Umthengi:

  • udinga ukuqinisekisa ukuthi ikhodi isekela ukubulawa okunemicu eminingi;
  • umkhawulo wokungena uyanda.

Imibiko ye-Allure emakhasini e-GitLab

Ngemva kokwethula ukubulawa okunezintambo eziningi, siqale ukuchitha isikhathi esiningi sihlaziya imibiko. Ngaleso sikhathi, kwakudingeka silayishe umbiko ngamunye njenge-artifact ku-GitLab, bese siyilanda futhi siyiqaqa. Akulula kakhulu futhi kuthatha isikhathi eside. Futhi uma omunye umuntu efuna ukuzibukela umbiko ngokwakhe, uzodinga ukuthi enze imisebenzi efanayo. Besifuna ukuthola impendulo ngokushesha, futhi sithole isixazululo - amakhasi we-GitLab. Lesi isici esakhelwe ngaphakathi esitholakala ngaphandle kwebhokisi kuzo zonke izinguqulo zakamuva ze-GitLab. Ikuvumela ukuthi usebenzise amasayithi amile kuseva yakho futhi uwafinyelele ngesixhumanisi esiqondile.

Zonke izithombe-skrini zemibiko ye-Allure zithathwe emakhasini e-GitLab. Iskripthi sokuthumela umbiko emakhasini e-GitLab - ku-Windows PowerShell (ngaphambi kwalokhu udinga ukwenza ukuhlola okuzenzakalelayo):

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

Uyini umugqa waphansi 

Ngakho-ke, uma ubucabanga ukuthi uyayidinga yini ikhodi ephephile ye-Thread kuhlaka lwe-Cucumber autotest, manje impendulo isobala - nge-Cucumber 4 kulula ukuyisebenzisa, ngaleyo ndlela ikhulise kakhulu inani lezintambo eziqaliswe kanyekanye. Ngale ndlela yokuhlola ukuhlolwa, umbuzo manje usumayelana nokusebenza komshini nge-Selenoid nebhentshi lokuhlola.

Ukuzijwayeza kubonise ukuthi ukusebenzisa ukuhlola okuzenzakalelayo emicu kukuvumela ukuthi wehlise ukusetshenziswa kwensiza kube okungenani ngokusebenza okungcono kakhulu. Njengoba kungabonwa kumagrafu, izintambo eziphindwe kabili aziholeli ekusheshiseni okufanayo ekuhlolweni kokusebenza. Kodwa-ke, sikwazile ukungeza izivivinyo ezizenzakalelayo ezingaphezu kwama-2 ekwakhiweni kohlelo lokusebenza, okuthi noma kuphindwe oku-200 kusebenze cishe imizuzu engama-5. Lokhu kukuvumela ukuthi uthole impendulo esheshayo kubo, futhi, uma kunesidingo, wenze izinguquko futhi uphinde inqubo futhi.

Source: www.habr.com

Engeza amazwana