Mampihatra, mizana: traikefa amin'ny fampiasana fitsapana mandeha ho azy amin'ny VTB

Ny divizionay dia mamorona fantsona mandeha ho azy tanteraka amin'ny famoahana dikan-teny vaovao amin'ny tontolon'ny famokarana. Mazava ho azy fa mitaky fitsapana miasa mandeha ho azy izany. Eo ambanin'ny fanapahana dia misy tantara iray momba ny fomba, manomboka amin'ny fitiliana kofehy tokana amin'ny milina iray eo an-toerana, tonga amin'ny toeran'ny autotest maromaro misy kofehy mandeha amin'ny Selenoid ao amin'ny fantsona fananganana miaraka amin'ny tatitra Allure ao amin'ny pejy GitLab ary nahazo fitaovana automatique mangatsiaka. fa afaka mampiasa ekipa ny olona ho avy.

Mampihatra, mizana: traikefa amin'ny fampiasana fitsapana mandeha ho azy amin'ny VTB

Taiza no nanombohantsika?

Mba hampiharana ny autotest sy hampidirana azy ireo amin'ny fantsona, dia mila rafitra automatique izay azo ovaina mora foana hifanaraka amin'ny filanay. Ny tsara indrindra dia te-hahazo fenitra tokana ho an'ny maotera autotesting aho, namboarina mba hampidirana autotest amin'ny fantsona. Ho fampiharana dia nisafidy ireto teknolojia manaraka ireto izahay:

  • Java,
  • Maven,
  • selenium,
  • Kôkômbra+JUNIT 4,
  • Famaliana,
  • GitLab.

Mampihatra, mizana: traikefa amin'ny fampiasana fitsapana mandeha ho azy amin'ny VTB

Nahoana ity andiany manokana ity? Java dia iray amin'ireo fiteny malaza indrindra amin'ny fitsapana mandeha ho azy, ary ny mpikambana rehetra ao amin'ny ekipa dia miteny izany. Selenium no vahaolana mazava. Ny kôkômbra, ankoatry ny zavatra hafa, dia noheverina fa hampitombo ny fahatokisana ny valin'ny fitsapana mandeha ho azy avy amin'ny sampana mirotsaka amin'ny fitiliana amin'ny tanana.

Fitsapana misy kofehy tokana

Mba tsy hamerenana indray ny kodiarana, dia naka fivoarana avy amin'ny tahiry isan-karazany ao amin'ny GitHub ho fototry ny rafitra izahay ary nampifanaraka azy ireo ho anay. Namorona tahiry ho an'ny tranomboky lehibe izahay miaraka amin'ny fototry ny rafitra autotest sy tahiry misy ohatra volamena amin'ny fampiharana autotest amin'ny fotontsika. Ny ekipa tsirairay dia tsy maintsy naka ny sarin'ny Volamena ary namolavola fitsapana tao, nampifanaraka izany tamin'ny tetikasany. Nalefanay tany amin'ny banky GitLab-CI izany, izay nanamboaranay:

  • fampandehanana isan'andro ny autotest an-tsoratra rehetra ho an'ny tetikasa tsirairay;
  • manomboka amin'ny fananganana pipeline.

Tamin'ny voalohany dia nisy fitsapana vitsivitsy, ary natao tamin'ny renirano iray. Mifanaraka tsara aminay ny fandehanana amin'ny Windows runner GitLab: ny fitsapana dia nampiditra moramora ny dabilio fitsapana ary saika tsy nampiasa loharano.

Rehefa nandeha ny fotoana, dia nitombo hatrany ny isan'ny autotest, ary nieritreritra ny hampandeha azy ireo mifanitsy izahay, rehefa nanomboka naharitra adiny telo teo ho eo ny hazakazaka feno. Nipoitra ihany koa ny olana hafa:

  • tsy afaka nanamarina izahay fa stable ny fitsapana;
  • Ny fitsapana izay natao imbetsaka nisesy tamin'ny milina eo an-toerana indraindray dia nianjera tao amin'ny CI.

Ohatra amin'ny fametrahana autotest:

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

 Mampihatra, mizana: traikefa amin'ny fampiasana fitsapana mandeha ho azy amin'ny VTB
Ohatra tatitra momba ny Allure

 Mampihatra, mizana: traikefa amin'ny fampiasana fitsapana mandeha ho azy amin'ny VTB
Entan'ny mpihazakazaka mandritra ny andrana (8 cores, 8 GB RAM, kofehy 1)
 
Tombontsoa amin'ny andrana misy kofehy tokana:

  • mora apetraka sy mihazakazaka;
  • Ny fandefasana ao amin'ny CI dia saika tsy misy hafa amin'ny fandefasana eo an-toerana;
  • tsy misy fiantraikany ny fitsapana;
  • fepetra takiana ambany indrindra ho an'ny loharanon'ny mpihazakazaka.

Ny tsy fahampian'ny fitsapana amin'ny kofehy tokana:

  • maka fotoana ela be vao vita;
  • maharitra stabilization ny fitsapana;
  • ny fampiasana tsy mahomby ny loharanon'ny mpihazakazaka, ny fampiasana ambany dia ambany.

Fitsapana amin'ny forks JVM

Koa satria tsy nikarakara kaody azo antoka amin'ny kofehy izahay rehefa nampihatra ny rafitra fototra, ny fomba miharihary indrindra amin'ny fandehanana mifanandrify dia kôkômbra-jvm-parallel-plugin ho an'i Maven. Ny plugin dia mora amboarina, fa ho an'ny asa mifanandrify marina, ny autotest dia tsy maintsy atao amin'ny navigateur samihafa. Tsy misy azo atao, tsy maintsy nampiasa Selenoid aho.

Ny mpizara Selenoid dia natomboka tamin'ny milina misy cores 32 sy 24 GB an'ny RAM. Ny fetra dia napetraka amin'ny navigateur 48 - kofehy 1,5 isaky ny core ary manodidina ny 400 MB RAM. Vokatr'izany, nihena ho 40 minitra ny fotoana fitsapana. Ny fanafainganana ny hazakazaka dia nanampy tamin'ny famahana ny olan'ny fanamafisana: ankehitriny dia afaka manao fitiliana automatique vaovao in-20-30 izahay mandra-pahazoanay antoka fa mandeha tsara izy ireo.
Ny tsy fahampiana voalohany amin'ny vahaolana dia ny fampiasana avo lenta ny loharanon'ny mpihazakazaka miaraka amin'ny kofehy mifanandrify kely: amin'ny 4 cores sy 8 GB an'ny RAM, ny fitsapana dia nihazakazaka tsy nisy afa-tsy 6 kofehy. Ny tsy fahampiana faharoa: ny plugin dia miteraka kilasy mpihazakazaka ho an'ny sehatra tsirairay, na firy na firy amin'izy ireo no atomboka.

Zava-dehibe! Aza mandalo faribolana misy marika mankany argLine, ohatra, toy izao:

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

Raha mandalo ny tag amin'ny fomba toy izany ianao, ny plugin dia hiteraka mpihazakazaka ho an'ny fitsapana rehetra, izany hoe, hiezaka ny hanatanteraka ny fitsapana rehetra, mandingana azy ireo avy hatrany aorian'ny fandefasana sy hamoronana forks JVM maro.

Rariny ny manipy varimbazaha misy marika ao Tags ao amin'ny fanovana plugin, jereo ny ohatra etsy ambany. Ny fomba hafa nosedrainay dia manana olana amin'ny fampifandraisana ny plugin Allure.

Ohatra amin'ny fotoana fandehanana amin'ny fitsapana fohy 6 miaraka amin'ny fika tsy mety:

[INFO] Total time: 03:17 min

Ohatra amin'ny fotoam-pitsapana raha mamindra mivantana ny marika mankany mvn... –Dcucumber.options:

[INFO] Total time: 44.467 s

Ohatra amin'ny fametrahana autotest:

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

Mampihatra, mizana: traikefa amin'ny fampiasana fitsapana mandeha ho azy amin'ny VTB
Ohatra amin'ny tatitra Allure (fitsapana tsy milamina indrindra, famerenana 4)

Mampihatra, mizana: traikefa amin'ny fampiasana fitsapana mandeha ho azy amin'ny VTBNy enta-mavesatry ny mpihazakazaka mandritra ny fitsapana (8 cores, 8 GB RAM, kofehy 12)
 
matihanina:

  • fametrahana mora - mila manampy plugin fotsiny ianao;
  • ny fahafahana manao fitsapana marobe miaraka;
  • fanafainganana ny fanamafisana ny fitsapana noho ny dingana 1. 

maharatsy ny mifampiresaka:

  • OS / container marobe ilaina;
  • fanjifana harena be ho an'ny fork tsirairay;
  • Efa lany andro ny plugin ary tsy tohana intsony. 

Ahoana no handresena ny tsy fandriam-pahalemana 

Ny dabilio fitsapana dia tsy mety, toy ny autotests mihitsy. Tsy mahagaga raha manana fitsapana maro be isika. Tonga hamonjy maven surefire plugin, izay ivelan'ny boaty dia manohana ny famerenana indray ny fitsapana tsy nahomby. Mila manavao ny dikan-teny plugin amin'ny 2.21 farafaharatsiny ianao ary manoratra andalana iray miaraka amin'ny isan'ny restart ao amin'ny rakitra pom na mandefa azy io ho tohan-kevitra amin'i Maven.

Ohatra amin'ny fametrahana autotest:

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

Na amin'ny fanombohana: mvn … -Dsurefire.rerunFailingTestsCount=2 …
Ho safidy, apetraho ny safidy Maven ho an'ny script PowerShell (PS1):

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

matihanina:

  • tsy mila mandany fotoana hamakafaka fitsapana tsy marin-toerana rehefa mianjera;
  • azo ahena ny olan'ny fitoniana amin'ny dabilio fitsapana.

maharatsy ny mifampiresaka:

  • mety ho diso ny kilema mitsingevana;
  • mitombo ny fotoana mihazakazaka.

Fitsapana parallèle miaraka amin'ny tranomboky cucumber 4

Nitombo isan'andro ny isan'ny fitsapana. Nieritreritra ny hanafaingana ny hazakazaka indray izahay. Ho fanampin'izay, te hampiditra fitsapana betsaka araka izay azo atao ao amin'ny fantsom-pivoriana fampiharana aho. Ny zava-dehibe dia ny hoe naharitra ela ny taranaka mpihazakazaka rehefa nihazakazaka nifanitsy tamin'ny fampiasana ny plugin Maven.

Tamin'izany fotoana izany dia efa navoaka ny kôkômbra 4, ka nanapa-kevitra ny hanoratra ny kernel ho an'ity dikan-teny ity izahay. Ao amin'ny naoty famoahana dia nampanantenaina ny fandefasana parallèle amin'ny haavon'ny kofehy. Ara-teorika dia tokony hanana:

  • manafaingana be ny fandehan'ny autotest amin'ny fampitomboana ny isan'ny kofehy;
  • esory ny fatiantoka amin'ny famokarana mpihazakazaka ho an'ny autotest tsirairay.

Ny fanatsarana ny rafitra ho an'ny autotest misy kofehy maro dia tsy dia sarotra loatra. Ny kôkômbra 4 dia manao fitsapana tsirairay amin'ny kofehy voatokana hatrany am-piandohana ka hatramin'ny farany, noho izany dia niova fo ho variana ThreadLocal ny zavatra static mahazatra sasany. 
Ny zava-dehibe indrindra amin'ny famadihana amin'ny alàlan'ny fitaovana fanavaozana hevitra dia ny manamarina ireo toerana nampitahaina ny fari-piainana (ohatra, manamarina ny null). Ankoatr'izay, mila ampianao ny plugin Allure amin'ny fanamarihan'ny kilasy Junit Runner.

Ohatra amin'ny fametrahana autotest:

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

Mampihatra, mizana: traikefa amin'ny fampiasana fitsapana mandeha ho azy amin'ny VTBOhatra amin'ny tatitra Allure (fitsapana tsy milamina indrindra, famerenana 5)

Mampihatra, mizana: traikefa amin'ny fampiasana fitsapana mandeha ho azy amin'ny VTBEnta-mavesatra ny mpihazakazaka mandritra ny fitsapana (8 cores, 8 GB RAM, kofehy 24)

matihanina:

  • ambany fanjifana loharanon-karena;
  • fanohanana avy amin'ny kôkômbra - tsy misy fitaovana fanampiny ilaina;
  • ny fahafahana mihazakazaka mihoatra ny 6 kofehy isaky ny processeur core.

maharatsy ny mifampiresaka:

  • mila miantoka ianao fa ny kaody dia manohana ny famonoana kofehy maromaro;
  • mitombo ny tokonam-pidirana.

Tatitra momba ny Allure amin'ny pejy GitLab

Taorian'ny fampidirana famonoana maromaro misy kofehy, dia nanomboka nandany fotoana bebe kokoa handinihana tatitra izahay. Tamin'izany fotoana izany dia tsy maintsy nampiakatra ny tatitra tsirairay ho toy ny artifact ho an'ny GitLab izahay, avy eo misintona azy ary mamoha azy. Tsy dia mety loatra ary mila fotoana maharitra. Ary raha misy olon-kafa te-hijery ny tatitra ho an'ny tenany, dia mila manao toy izany koa izy ireo. Te hahazo valiny haingana kokoa izahay, ary nahita vahaolana - GitLab page. Ity dia endri-javatra namboarina izay azo alaina ivelan'ny boaty amin'ny dikan-teny farany an'ny GitLab. Mamela anao hametraka tranokala static amin'ny mpizara anao ary miditra amin'izy ireo amin'ny alàlan'ny rohy mivantana.

Ny pikantsary rehetra momba ny tatitra Allure dia nalaina tao amin'ny pejy GitLab. Script amin'ny fametrahana ny tatitra amin'ny pejin'ny GitLab - ao amin'ny Windows PowerShell (alohan'izany dia mila manao autotest ianao):

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

Inona amin'ny farany? 

Noho izany, raha mieritreritra ianao raha mila Thread kaody azo antoka ao amin'ny rafitra autotest cucumber, izao ny valiny dia mazava - miaraka amin'ny cucumber 4 dia mora ny mampihatra izany, ka mampitombo be ny isan'ny kofehy natomboka miaraka. Miaraka amin'io fomba fanaovana fitiliana io, ny fanontaniana dia lasa momba ny fahombiazan'ny milina miaraka amin'ny Selenoid sy ny dabilio fitsapana.

Nasehon'ny fanazaran-tena fa ny fanaovana autotest amin'ny kofehy dia ahafahanao mampihena ny fanjifana loharano ho faran'izay kely indrindra amin'ny fampisehoana tsara indrindra. Araka ny hita amin'ny grafika, ny fampitomboana kofehy dia tsy mitondra amin'ny fanafainganana mitovy amin'ny fitsapana fampisehoana. Na izany aza, afaka nanampy fitsapana automatique mihoatra ny 2 izahay tamin'ny fananganana fampiharana, izay na dia misy famerenana 200 aza dia mandeha ao anatin'ny 5 minitra eo ho eo. Izany dia ahafahanao mahazo valiny haingana avy amin'izy ireo, ary, raha ilaina, manaova fanovana ary avereno indray ny fomba fiasa.

Source: www.habr.com

Add a comment