Ipatuman, sukdanan: kasinatian sa paggamit sa mga automated nga pagsulay sa VTB

Ang among dibisyon nagmugna og hingpit nga awtomatiko nga mga pipeline alang sa paglansad sa mga bag-ong bersyon sa mga aplikasyon sa palibot sa produksiyon. Siyempre, nanginahanglan kini nga awtomatiko nga mga pagsulay sa pagpaandar. Ubos sa pagputol mao ang usa ka istorya kung giunsa, sugod sa usa ka thread nga pagsulay sa usa ka lokal nga makina, nakaabot kami sa punto sa multi-threaded autotest nga nagdagan sa Selenoid sa pipeline sa pagtukod nga adunay usa ka taho sa Allure sa mga panid sa GitLab ug sa katapusan nakakuha usa ka cool nga himan sa automation. nga ang umaabot nga mga tawo makagamit sa mga team.

Ipatuman, sukdanan: kasinatian sa paggamit sa mga automated nga pagsulay sa VTB

Asa ta nagsugod?

Aron mapatuman ang mga autotest ug i-integrate kini sa pipeline, nanginahanglan kami og automation framework nga daling mabag-o sa among mga panginahanglan. Sa tinuud, gusto nako nga makakuha usa ka sukaranan alang sa autotest nga makina, gipahiangay alang sa pag-embed sa mga autotest sa pipeline. Alang sa pagpatuman, gipili namo ang mosunod nga mga teknolohiya:

  • Java,
  • maven,
  • selenium,
  • Pepino+JUNIT 4,
  • pagdani,
  • GitLab.

Ipatuman, sukdanan: kasinatian sa paggamit sa mga automated nga pagsulay sa VTB

Ngano nga kini nga partikular nga set? Ang Java usa sa labing inila nga mga sinultian alang sa mga awtomatiko nga pagsulay, ug ang tanan nga mga miyembro sa team nagsulti niini. Ang selenium mao ang klaro nga solusyon. Ang pepino, lakip sa ubang mga butang, kinahanglan nga makadugang sa pagsalig sa mga resulta sa mga automated nga pagsulay sa bahin sa mga departamento nga nalambigit sa manual testing.

Single threaded nga mga pagsulay

Aron dili mabag-o ang ligid, gikuha namon ang mga kalamboan gikan sa lainlaing mga repositoryo sa GitHub isip sukaranan sa balangkas ug gipahiangay kini alang sa among kaugalingon. Naghimo kami usa ka repository alang sa panguna nga librarya nga adunay kinauyokan sa autotest framework ug usa ka repository nga adunay usa ka Gold nga pananglitan sa pagpatuman sa mga autotest sa among kinauyokan. Ang matag team kinahanglang mokuha ug Gold nga imahen ug maghimog mga pagsulay niini, ipahiangay kini sa ilang proyekto. Gi-deploy sa usa ka GitLab-CI nga bangko, diin among gi-configure:

  • adlaw-adlaw nga paglusad sa tanang sinulat nga autotest para sa matag proyekto;
  • nagdagan sa pagtukod sa pipeline.

Sa sinugdan, adunay pipila ka mga pagsulay, ug sila miadto sa usa ka sapa. Ang usa ka single-threaded nga paglansad sa GitLab Windows runner maayo alang kanamo: ang mga pagsulay nagkarga sa test bench nga gamay ra ug halos wala mogamit sa mga kapanguhaan.

Sa paglabay sa panahon, nagkadaghan ang mga autotest, ug gihunahuna namon ang pagpadagan niini nga managsama, kung ang usa ka tibuuk nga pagdagan nagsugod mga tulo ka oras. Ang ubang mga problema nagpakita usab:

  • dili namo mapamatud-an nga ang mga pagsulay lig-on;
  • Ang mga pagsulay nga gipadagan sa makadaghang higayon sa usa ka laray sa lokal nga makina usahay nahagsa sa CI.

Usa ka pananglitan sa pag-set up sa mga 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>

 Ipatuman, sukdanan: kasinatian sa paggamit sa mga automated nga pagsulay sa VTB
Pananglitan sa report sa Allure

 Ipatuman, sukdanan: kasinatian sa paggamit sa mga automated nga pagsulay sa VTB
Ang load sa runner sa panahon sa mga pagsulay (8 cores, 8 GB RAM, 1 thread)
 
Mga bentaha sa single-threaded nga mga pagsulay:

  • sayon ​​sa pag-set up ug pagdagan;
  • Ang mga paglansad sa CI halos walay kalainan sa mga lokal nga paglansad;
  • ang mga pagsulay dili makaapekto sa usag usa;
  • minimum nga kinahanglanon sa kapanguhaan alang sa runner.

Mga disbentaha sa single-threaded nga mga pagsulay:

  • dugay kaayo aron makompleto;
  • taas nga stabilization sa mga pagsulay;
  • dili maayo nga paggamit sa mga kapanguhaan sa runner, hilabihan ka ubos nga paggamit.

Mga pagsulay sa JVM forks

Tungod kay wala kami nag-atiman sa thread-safe code sa dihang nag-implementar sa base framework, ang labing klaro nga paagi sa pagdagan nga managsama mao ang cucumber-jvm-parallel-plugin kay maven. Ang plugin sayon ​​​​nga i-set up, apan alang sa husto nga parallel nga operasyon, ang mga autotest kinahanglan nga ipadagan sa lain nga mga browser. Wala’y mahimo, kinahanglan nako nga gamiton ang Selenoid.

Ang Selenoid server gilunsad sa usa ka makina nga adunay 32 ka mga core ug 24 GB sa RAM. Ang limitasyon gitakda sa 48 ka mga browser - 1,5 ka mga thread kada core ug mga 400 MB sa RAM. Ingon usa ka sangputanan, ang oras sa pagsulay gipamubu gikan sa tulo ka oras ngadto sa 40 minuto. Ang pagpadali sa pagpadagan nakatabang sa pagsulbad sa problema sa pag-stabilize: karon dali namong makadagan ang bag-ong mga autotest 20-30 ka beses hangtod nga nakasiguro kami nga kini nagdagan nga kasaligan.
Ang una nga disbentaha sa solusyon mao ang taas nga paggamit sa kapanguhaan sa mga runner nga adunay gamay nga gidaghanon sa parallel nga mga hilo: sa 4 nga mga cores ug 8 GB sa RAM, ang mga pagsulay nagtrabaho nga lig-on sa dili molapas sa 6 nga mga hilo. Ang ikaduha nga minus: ang plugin nagpatunghag mga klase sa runner alang sa matag senaryo, bisan kung pila niini ang gilansad.

Importante! Ayaw ipasa ang usa ka tag nga variable sa argLine, pananglitan sama niini:

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

Kung imong ipasa ang tag sa niini nga paagi, ang plugin makamugna og mga runners alang sa tanan nga mga pagsulay, nga mao, kini mosulay sa pagdagan sa tanan nga mga pagsulay, laktawan dayon kini human sa paglansad ug paghimo sa daghang mga JVM forks sa proseso.

Husto ang paglabay sa usa ka variable nga adunay tag tags sa mga setting sa plugin, tan-awa ang pananglitan sa ubos. Ang ubang mga pamaagi nga among gisulayan adunay mga problema sa pagkonektar sa Allure plugin.

Pananglitan sa runtime alang sa 6 ka mubu nga mga pagsulay nga adunay dili husto nga pag-setup:

[INFO] Total time: 03:17 min

Pananglitan sa panahon sa pagsulay kung direkta nimo nga ibalhin ang tag sa mvn... –Dcucumber.options:

[INFO] Total time: 44.467 s

Usa ka pananglitan sa pag-set up sa mga 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>

Ipatuman, sukdanan: kasinatian sa paggamit sa mga automated nga pagsulay sa VTB
Pananglitan sa report sa allure (labing dili lig-on nga pagsulay, 4 nga pag-usab)

Ipatuman, sukdanan: kasinatian sa paggamit sa mga automated nga pagsulay sa VTBAng load sa runner sa panahon sa mga pagsulay (8 cores, 8 GB RAM, 12 threads)
 
Mga Pro:

  • dali nga pag-setup - kinahanglan ka lang magdugang usa ka plugin;
  • ang abilidad sa dungan nga pagpadagan sa daghang mga pagsulay;
  • pagpadali sa pag-stabilize sa pagsulay tungod sa aytem 1. 

Kahinumduman:

  • daghang OS/container ang gikinahanglan;
  • taas nga konsumo sa kapanguhaan matag tinidor;
  • Ang plugin wala na gigamit ug wala na gisuportahan. 

Unsaon pagbuntog sa pagkawalay kalig-on 

Ang mga bangko sa pagsulay dili perpekto, sama sa mga autotest mismo. Dili ikatingala, kita karon adunay daghang mga flacky nga mga pagsulay. Mianhi sa pagluwas maven sigurado nga plugin, nga gikan sa kahon nagsuporta sa pag-restart sa mga napakyas nga mga pagsulay. Kinahanglan nimo nga i-update ang bersyon sa plugin sa labing menos 2.21 ug isulat ang usa ka linya nga adunay gidaghanon sa mga pag-restart sa pom file o ipasa kini ingon usa ka argumento sa Maven.

Usa ka pananglitan sa pag-set up sa mga autotest:

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

O sa pagsugod: mvn ... -Dsurefire.rerunFailingTestsCount=2 ...
Sa laing paagi, ibutang ang mga opsyon sa Maven para sa PowerShell script (PS1):

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

Mga Pro:

  • dili kinahanglan nga mag-usik sa oras sa pag-analisar sa usa ka dili lig-on nga pagsulay kung kini nahagsa;
  • Ang mga problema sa kalig-on sa test bench mahimong maminusan.

Kahinumduman:

  • mahimo nimong laktawan ang naglutaw nga mga depekto;
  • pagtaas sa oras sa pagdagan.

Parallel nga mga pagsulay sa Cucumber 4 library

Ang gidaghanon sa mga pagsulay mitubo kada adlaw. Naghunahuna na usab kami bahin sa pagpadali sa mga dagan. Dugang pa, gusto nako nga i-embed ang daghang mga pagsulay kutob sa mahimo sa pipeline sa aplikasyon sa asembliya. Ang kritikal nga hinungdan mao ang taas kaayo nga henerasyon sa mga runner kung nagdagan nga managsama gamit ang Maven plugin.

Niadtong panahona, ang Cucumber 4 gipagawas na, mao nga nakahukom kami nga isulat pag-usab ang kernel alang niini nga bersyon. Sa mga nota sa pagpagawas, gisaaran kami nga usa ka parallel nga paglansad sa lebel sa thread. Sa teoriya, kini kinahanglan nga:

  • hinungdanon nga pagpadali sa pagpadagan sa mga autotest pinaagi sa pagdugang sa gidaghanon sa mga hilo;
  • wagtangon ang pagkawala sa oras alang sa henerasyon sa mga runner alang sa matag autotest.

Kini nahimo nga dili kaayo lisud nga ma-optimize ang balangkas alang sa multi-threaded autotests. Ang Cucumber 4 nagpadagan sa matag indibidwal nga pagsulay sa usa ka gipahinungod nga hilo gikan sa pagsugod hangtod sa katapusan, mao nga ang pipila ka sagad nga mga butang nga static gi-convert sa mga variable sa ThreadLocal. 
Ang panguna nga butang kung magbag-o gamit ang mga gamit sa pag-refactor sa Ideya mao ang pagsusi sa mga lugar diin gitandi ang variable (pananglitan, pagsusi sa null). Dugang pa, kinahanglan nimong idugang ang plugin sa Allure sa anotasyon sa klase sa Junit Runner.

Usa ka pananglitan sa pag-set up sa mga 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>

Ipatuman, sukdanan: kasinatian sa paggamit sa mga automated nga pagsulay sa VTBPananglitan sa usa ka taho sa Allure (ang labing dili lig-on nga pagsulay, 5 nga pag-usab)

Ipatuman, sukdanan: kasinatian sa paggamit sa mga automated nga pagsulay sa VTBAng load sa runner sa panahon sa mga pagsulay (8 cores, 8 GB RAM, 24 threads)

Mga Pro:

  • ubos nga konsumo sa kapanguhaan;
  • lumad nga suporta gikan sa Cucumber - walay dugang nga mga himan nga gikinahanglan;
  • ang abilidad sa pagdagan labaw pa sa 6 nga mga hilo matag core sa processor.

Kahinumduman:

  • kinahanglan nimo nga sigurohon nga ang code nagsuporta sa multi-threaded execution;
  • motaas ang entry threshold.

Ang mga taho sa Allure sa mga panid sa GitLab

Pagkahuman sa pagpaila sa multi-threaded nga paglansad, nagsugod kami sa paggugol ug daghang oras sa pag-analisar sa mga taho. Niadtong panahona, kinahanglan namong i-upload ang matag report isip artifact sa GitLab, unya i-download kini, i-unpack kini. Dili kaayo kombenyente ug taas. Ug kung adunay gusto nga makita ang taho sa balay, nan kinahanglan niya nga buhaton ang parehas nga mga operasyon. Gusto namon nga makakuha og feedback nga mas paspas, ug nakakita kami usa ka paagi sa paggawas - Mga panid sa GitLab. Kini usa ka built-in nga bahin nga magamit sa gawas sa kahon sa tanan nga bag-ong bersyon sa GitLab. Nagtugot kanimo sa pag-deploy sa mga static nga site sa imong server ug pag-access niini pinaagi sa usa ka direktang link.

Ang tanan nga mga screenshot sa mga taho sa Allure gikuha sa mga panid sa GitLab. Script para sa pagdeploy sa report sa mga pahina sa GitLab - sa Windows PowerShell (sa wala pa kini kinahanglan nimo nga magpadagan sa mga autotest):

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

Unsa ang katapusan nga linya 

Mao nga, kung naghunahuna ka kung kinahanglan nimo ang Thread safe code sa Cucumber autotest framework, karon ang tubag klaro - sa Cucumber 4 dali nga ipatuman kini, sa ingon madugangan ang gidaghanon sa mga hilo nga gilunsad nga dungan. Uban niini nga pamaagi sa pagpadagan sa mga pagsulay, ang pangutana karon nahimo bahin sa pasundayag sa makina nga adunay Selenoid ug ang bangko sa pagsulay.

Gipakita sa pagpraktis nga ang pagpadagan sa mga autotest sa mga hilo nagtugot kanimo nga maminusan ang pagkonsumo sa kapanguhaan nga adunay labing kaayo nga pasundayag. Ingon sa makita gikan sa mga graph, ang usa ka 2x nga pagtaas sa mga hilo dili mosangpot sa parehas nga pagpadali sa pagpasa sa mga pagsulay sa pasundayag. Bisan pa, nakadugang kami labaw pa sa 200 nga awtomatiko nga mga pagsulay sa pagtukod sa aplikasyon, nga, bisan sa 5 nga pag-usab, nahuman sa mga 24 minuto. Gitugotan ka niini nga makakuha og dali nga feedback gikan kanila, ug kung kinahanglan, paghimo mga pagbag-o ug balika ang pamaagi pag-usab.

Source: www.habr.com

Idugang sa usa ka comment