Fa'atino, fua: poto masani i le fa'aogaina o su'ega fa'a otometi ile VTB

O la matou vaega e fa'atupuina paipa otometi atoatoa mo le fa'alauiloaina o lomiga fou o talosaga i totonu o le siosiomaga gaosiga. Ioe, o lenei mea e manaʻomia ai suʻega faʻaogaina otometi. I lalo ifo o le tipi o se tala e uiga i le faʻafefea, amata i suʻega tasi-filo i luga o se masini faʻapitonuʻu, na matou oʻo atu i le tulaga o le tele-threaded autotest o loʻo tamoʻe i luga o Selenoid i le paipa faufale ma se lipoti Allure i itulau GitLab ma iu ai ina maua se meafaigaluega masini masini. e mafai e tagata i le lumanaʻi ona faʻaogaina 'au.

Fa'atino, fua: poto masani i le fa'aogaina o su'ega fa'a otometi ile VTB

O fea na tatou amata ai?

Ina ia fa'atinoina su'ega ta'avale ma tu'ufa'atasia i totonu o le paipa, matou te mana'omia se auivi otometi e mafai ona suia fa'alelei e fetaui ma o matou mana'oga. O le mea lelei, na ou manaʻo e maua se tulaga e tasi mo le afi suʻesuʻe, faʻafetaui mo le faʻapipiʻiina o autotests i totonu o le paipa. Mo le faʻatinoga na matou filifilia tekinolosi nei:

  • iava,
  • Maven,
  • Seleni,
  • Kukama+IUNI 4,
  • faatosina,
  • Gitapu.

Fa'atino, fua: poto masani i le fa'aogaina o su'ega fa'a otometi ile VTB

Aisea ua faia ai lenei seti faapitoa? Java o se tasi o gagana sili ona lauiloa mo suʻega faʻapitoa, ma e tautala uma tagata o le 'au. Seleni o le fofo manino. Kukama, faʻatasi ai ma isi mea, sa tatau ona faʻateleina le mautinoa i taunuʻuga o suʻega otometi i le vaega a matagaluega o loʻo aʻafia i suʻega tusi.

Su'ega filo tasi

Ina ia aua le toe faʻafouina le uili, matou te ave atinaʻe mai faleoloa eseese i luga o GitHub e fai ma faʻavae mo le faʻavae ma fetuunai mo i matou lava. Na matou faia se fale teu oloa mo le faletusi autu ma le autu o le autotest framework ma se faleteuoloa ma se faʻataʻitaʻiga Auro o le faʻatinoina o suʻesuʻega i luga o la matou autu. E tatau ona ave e 'au ta'itasi le ata Auro ma faia ni su'ega i totonu, fa'afetaui i la latou poloketi. Na matou tuʻuina atu i le GitLab-CI bank, lea na matou faʻatulagaina:

  • fa'ata'ita'iga i aso ta'itasi o su'ega tusitusia uma mo poloketi ta'itasi;
  • fa'alauiloa i totonu o le paipa faufale.

I le taimi muamua sa i ai ni nai suʻega, ma sa faia i le tasi vaitafe. O loʻo faʻaogaina le filo taʻitasi i luga o le Windows runner GitLab e fetaui lelei mo i matou: o suʻega na faʻapipiʻi mama le nofoa suʻega ma toetoe a leai ni punaoa.

I le aluga o taimi, o le numera o autotests na faʻateleina ma sili atu, ma na matou mafaufau e faʻatautaia i latou i le tutusa, ina ua amata ona alu le taʻavale atoa pe a ma le tolu itula. Na aliali mai foi isi faafitauli:

  • sa le mafai ona matou fa'amaonia sa mautu su'ega;
  • su'ega na faia i le tele o taimi i le laina i luga o le masini i le lotoifale o nisi taimi na paʻu i CI.

Fa'ata'ita'iga o le fa'atulagaina o su'ega ta'avale:

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

 Fa'atino, fua: poto masani i le fa'aogaina o su'ega fa'a otometi ile VTB
Faataitaiga lipoti faatosina

 Fa'atino, fua: poto masani i le fa'aogaina o su'ega fa'a otometi ile VTB
Uta a le tamo'e i taimi o su'ega (8 cores, 8 GB RAM, 1 filo)
 
Tulaga lelei o su'ega tasi-filo:

  • faigofie ona fa'atutu ma tamo'e;
  • fa'alauiloa ile CI e toetoe lava a leai se 'ese'esega mai fa'alauiloa fa'apitonu'u;
  • o su'ega e le afaina ai le tasi ma le isi;
  • mana'oga maualalo mo puna'oa tamo'e.

Le lelei ole su'ega tasi-filo:

  • umi se taimi e fa'auma ai;
  • fa'amautu umi o su'ega;
  • le fa'aogaina lelei o punaoa taufetuli, matua maualalo le fa'aogaina.

Su'ega i tui JVM

Talu ai matou te leʻi tausia le filo-safe code pe a faʻaaogaina le faʻavae faavae, o le auala sili ona manino e tamoe tutusa ai. kukama-jvm-parallel-plugin mo Maven. E faigofie ona fetuutuunai le plugin, ae mo le faʻaogaina saʻo tutusa, autotests e tatau ona faʻatautaia i suʻesuʻega eseese. E leai se mea e fai, e tatau ona ou faʻaaogaina Selenoid.

O le Selenoid server na faʻalauiloaina i luga o se masini ma 32 cores ma 24 GB o RAM. Ole tapula'a na fa'atulaga ile 48 su'esu'e - 1,5 filo ile autu ma pe a ma le 400 MB ole RAM. O se taunuuga, na faʻaititia le taimi o suʻega mai le tolu itula i le 40 minute. O le faatelevaveina o tamo'e na fesoasoani e foia ai le fa'afitauli fa'amautu: o lea e mafai ona vave fa'atino su'ega ta'avale fou i le 20-30 taimi se'ia matou mautinoa o lo'o tamomoe ma le fa'atuatuaina.
O le toe faʻafoʻi muamua o le fofo o le maualuga o le faʻaogaina o punaoa taʻavale ma se numera laʻititi o filo tutusa: i luga o le 4 cores ma le 8 GB o le RAM, o suʻega na faʻatautaia i le le sili atu i le 6 filo. Le mea le lelei lona lua: o le faʻapipiʻi e faʻatupuina vasega tamoʻe mo faʻataʻitaʻiga taʻitasi, e tusa lava po o le a le tele o latou faʻalauiloa.

Taua! Aua le pasi se fesuiaiga ma pine i argLine, mo se faʻataʻitaʻiga, pei o lenei:

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

Afai e te pasia le tag i lenei auala, o le a faʻatupuina e le plugin tagata tamoʻe mo suʻega uma, o lona uiga, o le a taumafai e faʻataʻitaʻi uma suʻega, faaseʻe vave pe a uma ona faʻalauiloa ma fatuina le tele o tui JVM.

E sa'o le togi o se fesuiaiga ma se pine i totonu pine i le faʻapipiʻi faʻapipiʻi, vaʻai faʻataʻitaʻiga i lalo. O isi metotia na matou suʻeina e iai faʻafitauli e fesoʻotaʻi ai le plugin Allure.

Fa'ata'ita'iga o le taimi fa'atino mo su'ega pu'upu'u 6 ma fa'atonuga le sa'o:

[INFO] Total time: 03:17 min

Fa'ata'ita'iga ole taimi ole su'ega pe a e tu'u sa'o le pine ile mvn... –Dcucumber.options:

[INFO] Total time: 44.467 s

Fa'ata'ita'iga o le fa'atulagaina o su'ega ta'avale:

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

Fa'atino, fua: poto masani i le fa'aogaina o su'ega fa'a otometi ile VTB
Fa'ata'ita'iga o se lipoti Allure (le su'ega sili ona le mautu, 4 toe ta'avale)

Fa'atino, fua: poto masani i le fa'aogaina o su'ega fa'a otometi ile VTBO le uta o le tamo'e i taimi o su'ega (8 cores, 8 GB RAM, 12 filo)
 
Pros:

  • faigofie seti - e tatau ona e faʻaopoopoina se faʻapipiʻi;
  • le mafai ona faia i le taimi e tasi le tele o suʻega;
  • fa'avavevave o le fa'amautuina o su'ega fa'afetai ile Laasaga 1. 

Cons:

  • Ole tele ole OS/containers e mana'omia;
  • maualuga le faaaogaina o punaoa mo tui taitasi;
  • O le plugin ua tuai ma ua le toe lagolagoina. 

Auala e foia ai le le mautu 

E le lelei nofoa fa'ata'ita'i, e pei lava o su'ega ta'avale. E le o se mea e ofo ai le tele o a matou suʻega vaivai. Sau e laveai maven surefire plugin, lea mai le pusa e lagolagoina le toe amataina o su'ega le manuia. E te manaʻomia le faʻafouina o le plugin version i le itiiti ifo i le 2.21 ma tusi se laina se tasi ma le numera o toe amata i le faila pom pe pasi e fai ma finauga ia Maven.

Fa'ata'ita'iga o le fa'atulagaina o su'ega ta'avale:

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

Po'o le amataga: mvn … -Dsurefire.rerunFailingTestsCount=2 …
O se filifiliga, seti filifiliga Maven mo le PowerShell script (PS1):

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

Pros:

  • e le mana'omia le fa'aalu o le taimi e iloilo ai se su'ega le mautu pe a pa'u;
  • e mafai ona faaitiitia faafitauli mautu nofoa suega.

Cons:

  • e mafai ona misia ni faaletonu opeopea;
  • faʻateleina taimi taʻavale.

Su'ega tutusa ma le faletusi Kukuma 4

O le numera o suʻega na faʻatupulaia i aso uma. Sa matou toe mafaufau i le faatelevaveina o tamo'e. E le gata i lea, na ou manaʻo e tuʻufaʻatasia le tele o suʻega e mafai i totonu o le pipeline faʻapotopotoga talosaga. O le itu taua o le faʻatupuina o tagata tamoʻe na umi tele pe a faʻagasolo tutusa e faʻaaoga ai le Maven plugin.

I lena taimi, ua uma ona tatala le Kukuka 4, o lea na matou filifili ai e toe tusi le fatu mo lenei lomiga. I fa'asalalauga fa'amatalaga na folafola mai ia i matou e fa'atutusa tutusa i le tulaga filo. I le teori e tatau ona i ai:

  • faʻavavevave faʻavave le taʻavaleina o autotests e ala i le faʻateleina o numera o filo;
  • aveese le leiloa o le taimi i le fausiaina o tagata tamo'e mo su'ega ta'itasi.

O le fa'amalieina o le fa'ava'a mo su'ega ta'avale e tele filo na fa'aalia e le'i faigata tele. Kukama 4 e fa'atino su'ega ta'itasi i luga o se filo tu'ufa'atasi mai le amataga e o'o i le fa'ai'uga, o lea na fa'aliliuina ai nisi o mea masani masani i suiga o le ThreadLocal. 
O le mea autu pe a faʻaliliu faʻaaoga meafaigaluega toe faʻaleleia o manatu o le siakiina o nofoaga na faʻatusatusa ai le fesuiaiga (mo se faʻataʻitaʻiga, siaki mo le null). E le gata i lea, e te manaʻomia le faʻaopoopoina o le Allure plugin i le Junit Runner class annotation.

Fa'ata'ita'iga o le fa'atulagaina o su'ega ta'avale:

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

Fa'atino, fua: poto masani i le fa'aogaina o su'ega fa'a otometi ile VTBFa'ata'ita'iga o se lipoti Allure (le su'ega sili ona le mautu, 5 toe ta'avale)

Fa'atino, fua: poto masani i le fa'aogaina o su'ega fa'a otometi ile VTBO le uta o le tamo'e i taimi o su'ega (8 cores, 8 GB RAM, 24 filo)

Pros:

  • maualalo le fa'aaogaina o punaoa;
  • lagolago mai le Kukama - leai ni mea faigaluega fa'aopoopo e mana'omia;
  • le mafai ona tamo'e sili atu nai lo 6 filo i le autu processor.

Cons:

  • e tatau ona e faʻamautinoa o loʻo lagolagoina e le code le faʻatinoina o le tele o filo;
  • fa'atuputeleina le faitoto'a ulufale.

Lipoti fa'alelei ile GitLab itulau

Ina ua uma ona faʻaalia le faʻatinoina o le tele o filo, na amata ona matou faʻaaluina le tele o taimi e iloilo ai lipoti. I lena taimi, e tatau ona matou lafoina lipoti taʻitasi o se mea taua i GitLab, ona laʻu mai lea ma tatala. E le faigofie tele ma e umi se taimi. Ma afai e manaʻo se isi e vaʻai i le lipoti mo ia lava, ona manaʻomia lea ona latou faia ia lava gaioiga. Na matou mananaʻo e maua vave faʻamatalaga, ma matou maua se fofo - GitLab itulau. O se mea faʻapipiʻiina lea e maua i fafo o le atigipusa i lomiga lata mai uma o GitLab. Fa'ataga oe e fa'apipi'i nofoaga fa'amau i luga o lau 'au'aunaga ma maua i latou e ala i se feso'ota'iga sa'o.

O faʻamalama uma o lipoti Allure na ave ile GitLab itulau. Faʻamatalaga mo le faʻapipiʻiina o le lipoti i GitLab itulau - i le Windows PowerShell (aʻo leʻi oʻo i lenei mea e te manaʻomia le taʻavale autotests):

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

O le a le iʻuga? 

O lea la, afai o loʻo e mafaufau pe e te manaʻomia Thread code safe i le Cucumber autotest framework, o lea ua manino le tali - faʻatasi ai ma Kuku 4 e faigofie ona faʻatinoina, ma faʻateleina ai le numera o filo faʻalauiloa i le taimi e tasi. Faatasi ai ma lenei metotia o suʻega suʻega, o le fesili ua avea nei e uiga i le faʻatinoga o le masini ma Selenoid ma le nofoa suʻega.

Fa'ata'ita'i ua fa'aalia o le fa'atinoina o su'esu'ega i luga o filo e mafai ai ona fa'aitiitia le fa'aogaina o puna'oa i se fa'aitiitiga ma le fa'atinoga sili. E pei ona mafai ona vaʻaia mai kalafi, faʻaluaina filo e le oʻo atu i se faʻavavevave tutusa i suʻega faʻatinoga. Ae ui i lea, na mafai ona matou faʻaopoopoina le sili atu ma le 2 suʻega faʻapitoa i le fausiaina o talosaga, lea e oʻo lava i le 200 toe faʻataʻitaʻiina e tamoe ile 5 minute. O lenei mea e mafai ai ona e maua vave faʻamatalaga mai ia i latou, ma, pe a manaʻomia, fai suiga ma toe fai le faiga.

puna: www.habr.com

Faaopoopo i ai se faamatalaga