Aplike, echèl: eksperyans nan sèvi ak tès otomatik nan VTB

Divizyon nou an kreye tiyo totalman otomatik pou lanse nouvo vèsyon aplikasyon yo nan anviwònman pwodiksyon an. Natirèlman, sa a mande pou tès fonksyonèl otomatik yo. Anba a koupe a se yon istwa sou ki jan, kòmanse ak tès yon sèl-fil sou yon machin lokal, nou rive nan pwen nan ototest milti-threaded kouri sou Selenoid nan tiyo bati a ak yon rapò Allure sou paj GitLab epi evantyèlman te resevwa yon zouti automatisation fre. ke moun nan lavni ka itilize ekip.

Aplike, echèl: eksperyans nan sèvi ak tès otomatik nan VTB

Ki kote nou te kòmanse?

Pou aplike ototès yo epi entegre yo nan tiyo a, nou te bezwen yon kad automatisation ki ta ka chanje fleksibilite pou adapte ak bezwen nou yo. Idealman, mwen te vle jwenn yon sèl estanda pou motè autotesting, adapte pou entegre autotests nan tiyo a. Pou aplikasyon nou te chwazi teknoloji sa yo:

  • Java,
  • Maven,
  • Selenyòm,
  • Konkonm+JUNIT 4,
  • Atire,
  • GitLab.

Aplike, echèl: eksperyans nan sèvi ak tès otomatik nan VTB

Poukisa seri patikilye sa a? Java se youn nan lang ki pi popilè pou tès otomatik yo, epi tout manm ekip yo pale li. Selenyòm se solisyon an evidan. Konkonm, pami lòt bagay, te sipoze ogmante konfyans nan rezilta tès otomatik yo sou pati depatman ki enplike nan tès manyèl yo.

Tès fil sèl

Pou nou pa reenvante volan an, nou te pran devlopman nan divès depo sou GitHub kòm baz pou fondasyon an epi adapte yo pou tèt nou. Nou te kreye yon depo pou bibliyotèk prensipal la ak nwayo kad ototès la ak yon depo ak yon egzanp Gold sou aplikasyon ototès sou nwayo nou an. Chak ekip te oblije pran imaj Gold la epi devlope tès ladan l, adapte li ak pwojè yo. Nou te deplwaye li nan bank GitLab-CI, kote nou te konfigirasyon:

  • kouri chak jou nan tout tès ototès ekri pou chak pwojè;
  • lanse nan tiyo konstriksyon an.

Okòmansman, te gen kèk tès, epi yo te pote soti nan yon sèl kouran. Kouri yon sèl-threaded sou GitLab Windows kourè a adapte nou byen: tès yo chaje ban tès la trè alalejè epi yo itilize prèske pa gen okenn resous.

Apre yon tan, kantite ototès te vin pi plis ak plis anpil, epi nou te panse sou kouri yo nan paralèl, lè yon kouri konplè te kòmanse pran apeprè twa èdtan. Lòt pwoblèm parèt tou:

  • nou pa t 'kapab verifye ke tès yo te estab;
  • tès ki te kouri plizyè fwa nan yon ranje sou machin lokal la pafwa fè aksidan nan CI.

Egzanp mete kanpe ototès:

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

 Aplike, echèl: eksperyans nan sèvi ak tès otomatik nan VTB
Egzanp rapò allure

 Aplike, echèl: eksperyans nan sèvi ak tès otomatik nan VTB
Chaj kourè pandan tès yo (8 nwayo, 8 GB RAM, 1 fil)
 
Avantaj nan tès yon sèl-threaded:

  • fasil yo mete kanpe ak kouri;
  • lansman nan CI yo pratikman pa diferan de lansman lokal yo;
  • tès yo pa afekte youn ak lòt;
  • kondisyon minimòm pou resous kourè.

Dezavantaj tès yon sèl-threaded:

  • pran yon tan trè long pou konplete;
  • tan estabilizasyon tès yo;
  • itilizasyon rezèvwa resous kourè, itilizasyon trè ba.

Tès sou fouchèt JVM

Piske nou pa t pran swen kòd fil ki san danje lè n ap aplike fondasyon baz la, fason ki pi evidan pou kouri an paralèl se te. konkonm-jvm-paralèl-plugin pou Maven. Plugin a fasil pou konfigirasyon, men pou operasyon paralèl kòrèk, ototest yo dwe kouri nan navigatè separe. Pa gen anyen pou m fè, mwen te oblije sèvi ak selenoid.

Sèvè Selenoid la te lanse sou yon machin ki gen 32 nwayo ak 24 GB RAM. Limit la te fikse nan 48 navigatè - 1,5 fil pou chak nwayo ak apeprè 400 MB RAM. Kòm yon rezilta, tan tès la te redwi soti nan twa èdtan a 40 minit. Akselere kouri yo te ede rezoud pwoblèm estabilizasyon an: kounye a nou te kapab byen vit kouri nouvo tès ototès 20-30 fwa jiskaske nou te asire yo ke yo kouri seryezman.
Premye dezavantaj solisyon an se itilizasyon segondè resous kourè ak yon ti kantite fil paralèl: sou 4 am ak 8 GB RAM, tès yo te kouri estab nan pa plis pase 6 fil. Dezyèm dezavantaj la: Plugin la jenere klas kourè pou chak senaryo, kèlkeswa kantite nan yo te lanse.

Enpòtan! Pa pase yon varyab ak tags pou argLine, pou egzanp, tankou sa a:

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

Si ou pase tag la nan fason sa a, Plugin a pral jenere kourè pou tout tès yo, se sa ki, li pral eseye kouri tout tès yo, sote yo imedyatman apre lansman ak kreye anpil fouchèt JVM.

Li kòrèk pou voye yon varyab ak yon tag nan tags nan anviwònman plugin yo, gade egzanp ki anba a. Lòt metòd nou teste gen pwoblèm pou konekte Plugin Allure la.

Egzanp tan kouri pou 6 tès kout ak anviwònman kòrèk:

[INFO] Total time: 03:17 min

Egzanp tan tès la si ou transfere dirèkteman tag la mvn... –Dcucumber.opsyon:

[INFO] Total time: 44.467 s

Egzanp mete kanpe ototès:

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

Aplike, echèl: eksperyans nan sèvi ak tès otomatik nan VTB
Egzanp yon rapò Allure (tès ki pi enstab la, 4 refè)

Aplike, echèl: eksperyans nan sèvi ak tès otomatik nan VTBChaj kourè pandan tès yo (8 nwayo, 8 GB RAM, 12 fil)
 
Pou:

  • konfigirasyon fasil - ou jis bezwen ajoute yon Plugin;
  • kapasite nan ansanm fè yon gwo kantite tès;
  • akselerasyon estabilizasyon tès gras a etap 1. 

Kont:

  • Plizyè OS/resipyan obligatwa;
  • gwo konsomasyon resous pou chak fouchèt;
  • Plugin la demode epi li pa sipòte ankò. 

Ki jan yo simonte enstabilite 

Ban tès yo pa ideyal, menm jan ak ototès yo tèt yo. Li pa etone ke nou gen yon kantite tès flacky. Vin sekou maven surefire plugin, ki soti nan bwat la sipòte rekòmanse tès echwe yo. Ou bezwen mete ajou vèsyon an plugin pou omwen 2.21 epi ekri yon liy ak kantite rekòmanse nan dosye pom la oswa pase li kòm yon agiman bay Maven.

Egzanp mete kanpe ototès:

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

Oswa sou demaraj: mvn … -Dsurefire.rerunFailingTestsCount=2 …
Kòm yon opsyon, mete opsyon Maven pou script PowerShell (PS1):

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

Pou:

  • pa bezwen gaspiye tan analize yon tès enstab lè li aksidan;
  • pwoblèm estabilite ban tès yo ka bese.

Kont:

  • defo k ap flote ka rate;
  • tan kouri ogmante.

Tès paralèl ak bibliyotèk Konkonm 4 la

Kantite tès yo te ogmante chak jou. Nou te panse ankò sou pi vit kouri yo. Anplis de sa, mwen te vle entegre anpil tès ke posib nan tiyo asanble aplikasyon an. Faktè kritik la te ke jenerasyon an nan kourè te pran twò lontan lè yo te kouri nan paralèl lè l sèvi avèk Plugin Maven la.

Nan moman sa a, Konkonm 4 te deja lage, kidonk nou te deside reekri nwayo a pou vèsyon sa a. Nan nòt yo lage nou te pwomèt lansman paralèl nan nivo fil la. Teyorikman sa a ta dwe:

  • siyifikativman akselere kouri nan ototès pa ogmante kantite fil;
  • elimine pèt tan an sou génération kourè pou chak tès oto.

Optimize fondasyon an pou ototest milti-threaded yo te tounen soti yo pa tèlman difisil. Konkonm 4 kouri chak tès endividyèl sou yon fil devwe depi nan kòmansman rive nan fini, kidonk kèk bagay komen estatik yo te tou senpleman konvèti nan varyab ThreadLocal. 
Bagay pwensipal lan lè konvèti lè l sèvi avèk zouti refactoring Ide se tcheke kote yo te konpare varyab la (pa egzanp, tcheke pou nil). Anplis de sa, ou bezwen ajoute Plugin Allure nan anotasyon klas Junit Runner.

Egzanp mete kanpe ototès:

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

Aplike, echèl: eksperyans nan sèvi ak tès otomatik nan VTBEgzanp yon rapò Allure (tès ki pi enstab la, 5 renouvlab)

Aplike, echèl: eksperyans nan sèvi ak tès otomatik nan VTBChaj kourè pandan tès yo (8 nwayo, 8 GB RAM, 24 fil)

Pou:

  • ba konsomasyon resous;
  • sipò natif natal nan konkonm - pa gen okenn zouti adisyonèl obligatwa;
  • kapasite nan kouri plis pase 6 fil pou chak nwayo processeur.

Kont:

  • ou bezwen asire ke kòd la sipòte milti-threaded ekzekisyon;
  • papòt la antre ogmante.

Rapò Allure sou paj GitLab

Apre entwodwi ekzekisyon milti-threaded, nou te kòmanse pase pi plis tan analize rapò yo. Lè sa a, nou te oblije telechaje chak rapò kòm yon zafè nan GitLab, answit telechaje li epi depake li. Li pa trè pratik epi li pran yon bon bout tan. Men, si yon lòt moun vle wè rapò a pou tèt yo, Lè sa a, yo pral bezwen fè menm operasyon yo. Nou te vle resevwa fidbak pi vit, epi nou jwenn yon solisyon - paj GitLab. Sa a se yon karakteristik entegre ki disponib soti nan bwat la nan tout dènye vèsyon GitLab. Pèmèt ou deplwaye sit estatik sou sèvè ou a epi jwenn aksè nan yo atravè yon lyen dirèk.

Tout Ekran nan rapò Allure yo te pran sou paj GitLab. Script pou deplwaye rapò a nan paj GitLab - nan Windows PowerShell (anvan sa ou bezwen kouri ototès):

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

Avèk rezilta a ki 

Se konsa, si ou t ap panse sou si ou bezwen kòd Thread sekirite nan kad ototest Konkonm, kounye a repons lan se evidan - ak Konkonm 4 li fasil aplike li, kidonk siyifikativman ogmante kantite fil lanse ansanm. Avèk metòd sa a nan kouri tès yo, kesyon an vin kounye a sou pèfòmans nan machin nan ak Selenoid ak ban tès la.

Pratike te montre ke kouri ototest sou fil pèmèt ou diminye konsomasyon resous nan yon minimòm ak pi bon pèfòmans. Kòm ka wè nan graf yo, fil doub pa mennen nan yon akselerasyon menm jan an nan tès pèfòmans yo. Sepandan, nou te kapab ajoute plis pase 2 tès otomatik nan bati aplikasyon an, ki menm ak 200 renouvlab kouri nan apeprè 5 minit. Sa a pèmèt ou resevwa fidbak rapid nan men yo, epi, si sa nesesè, fè chanjman epi repete pwosedi a ankò.

Sous: www.habr.com

Add nouvo kòmantè