Khazikitsani, sikelo: chidziwitso chogwiritsa ntchito mayeso odzichitira pa VTB

Gulu lathu limapanga mapaipi odziwikiratu kuti akhazikitse mitundu yatsopano ya mapulogalamu m'malo opanga. Zoonadi, izi zimafuna kuyesa zoyeserera zokha. Pansi pa odulidwawo pali nkhani ya momwe, kuyambira pakuyesa kwa ulusi umodzi pamakina akomweko, tidafika poyesa makina amtundu wamitundu yambiri omwe akuyenda pa Selenoid pomanga mapaipi ndi lipoti la Allure patsamba la GitLab ndipo pamapeto pake adapeza chida chozizira chodzipangira okha. kuti anthu amtsogolo angagwiritse ntchito magulu.

Khazikitsani, sikelo: chidziwitso chogwiritsa ntchito mayeso odzichitira pa VTB

Tinayambira kuti?

Kuti tigwiritse ntchito ma autotest ndikuwaphatikiza mu payipi, tinkafunikira chimango chodzipangira chomwe chitha kusinthidwa kuti chigwirizane ndi zosowa zathu. Momwemo, ndimafuna kupeza mulingo umodzi wa injini yoyeserera, yosinthidwa kuti ilowetse ma autotes mu mapaipi. Kuti tigwiritse ntchito, tinasankha matekinoloje awa:

  • Java,
  • Maven,
  • Selenium,
  • Nkhaka+JUNIT 4,
  • Chikoka,
  • GitLab.

Khazikitsani, sikelo: chidziwitso chogwiritsa ntchito mayeso odzichitira pa VTB

Chifukwa chiyani zidachitika izi? Java ndi chimodzi mwa zilankhulo zodziwika bwino pamayeso odziyimira pawokha, ndipo mamembala onse amalankhula. Selenium ndiye yankho lodziwikiratu. Nkhaka, mwa zina, zimayenera kuonjezera chidaliro mu zotsatira za mayesero odzipangira okha pa mbali ya madipatimenti omwe akugwira ntchito poyesa pamanja.

Mayeso a ulusi umodzi

Kuti tisayambitsenso gudumuli, tidatenga zomwe zidachitika m'malo osiyanasiyana pa GitHub ngati maziko a chimango ndikuzisinthira tokha. Tinapanga malo osungiramo laibulale yayikulu yokhala ndi maziko a autotest framework ndi malo okhala ndi chitsanzo cha Golide chogwiritsa ntchito ma autotest pachimake chathu. Gulu lililonse limayenera kutenga chithunzi cha Golide ndikupanga mayeso mmenemo, ndikuchisintha kuti chigwirizane ndi polojekiti yawo. Tidazitumiza ku banki ya GitLab-CI, pomwe tidakonza:

  • mayendetsedwe atsiku ndi tsiku a zolemba zonse zolembedwa za polojekiti iliyonse;
  • imayamba pakupanga mapaipi.

Poyamba panali mayesero ochepa, ndipo anachitidwa mumtsinje umodzi. Kuthamanga kwa ulusi umodzi pa Windows wothamanga GitLab kunatikomera bwino: mayesero adanyamula benchi yoyesera mopepuka ndipo sanagwiritse ntchito chilichonse.

M'kupita kwa nthawi, chiwerengero cha autotests chinakula kwambiri, ndipo tinaganiza zowayendetsa mofanana, pamene kuthamanga kwathunthu kunayamba kutenga pafupifupi maola atatu. Mavuto ena adawonekeranso:

  • sitinathe kutsimikizira kuti mayesowo anali okhazikika;
  • mayeso omwe amayendetsedwa kangapo motsatana pamakina am'deralo nthawi zina adagwa mu CI.

Chitsanzo chokhazikitsa ma 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>

 Khazikitsani, sikelo: chidziwitso chogwiritsa ntchito mayeso odzichitira pa VTB
Chitsanzo cha Allure report

 Khazikitsani, sikelo: chidziwitso chogwiritsa ntchito mayeso odzichitira pa VTB
Katundu wothamanga pamayeso (8 cores, 8 GB RAM, 1 ulusi)
 
Ubwino wamayeso amtundu umodzi:

  • zosavuta kukhazikitsa ndi kuthamanga;
  • kukhazikitsidwa mu CI sikusiyana kwenikweni ndi kukhazikitsidwa kwanuko;
  • mayesero samakhudza wina ndi mzake;
  • zofunika zochepa kwa othamanga chuma.

Kuipa kwa mayeso amtundu umodzi:

  • kutenga nthawi yayitali kwambiri kumaliza;
  • kukhazikika kwanthawi yayitali kwa mayeso;
  • kugwiritsa ntchito moyenera zinthu zothamanga, zotsika kwambiri.

Mayeso pa mafoloko a JVM

Popeza sitinasamalire malamulo otetezedwa ndi ulusi pokhazikitsa maziko, njira yodziwikiratu yoyendera limodzi inali. nkhaka-jvm-parallel-plugin za Maven. Pulagiyi ndiyosavuta kuyisintha, koma kuti igwire bwino ntchito yofananira, ma autotest amayenera kuyendetsedwa mumasakatuli osiyanasiyana. Palibe chochita, ndinayenera kugwiritsa ntchito Selenoid.

Seva ya Selenoid idakhazikitsidwa pamakina okhala ndi ma cores 32 ndi 24 GB ya RAM. Malire adayikidwa pa asakatuli 48 - ulusi wa 1,5 pachimake komanso pafupifupi 400 MB ya RAM. Zotsatira zake, nthawi yoyeserera idachepetsedwa kuchoka pa maola atatu mpaka mphindi 40. Kufulumizitsa kuthamanga kunathandizira kuthetsa vuto lokhazikika: tsopano titha kuyendetsa mwachangu ma autotest atsopano nthawi 20-30 mpaka titatsimikiza kuti adathamanga modalirika.
Chotsatira choyamba cha yankho chinali kugwiritsidwa ntchito kwakukulu kwa zida zothamanga ndi ulusi wochepa wofanana: pa 4 cores ndi 8 GB ya RAM, mayeserowa adagwira ntchito mokhazikika popanda ulusi wopitilira 6. Choyipa chachiwiri: pulogalamu yowonjezera imapanga makalasi othamanga pazochitika zilizonse, ziribe kanthu kuti ndi angati omwe amayambitsidwa.

Zofunika! Osapereka zosintha zomwe zili ndi ma tag argline, mwachitsanzo, monga chonchi:

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

Ngati mudutsa chizindikirocho motere, pulogalamu yowonjezera idzapanga othamanga pamayesero onse, ndiye kuti, idzayesa kuyesa mayesero onse, kuwadumpha mwamsanga mutangoyambitsa ndikupanga mafoloko ambiri a JVM.

Ndikoyenera kuponya chosinthika chokhala ndi tag Tags m'makonzedwe a pulogalamu yowonjezera, onani chitsanzo pansipa. Njira zina zomwe tidayesa zimakhala ndi zovuta kulumikiza pulogalamu yowonjezera ya Allure.

Chitsanzo cha nthawi yothamanga pamayeso afupiafupi 6 okhala ndi zosintha zolakwika:

[INFO] Total time: 03:17 min

Chitsanzo cha nthawi yoyeserera ngati mutasamutsa chizindikirocho mvn... -Dcucumber.zosankha:

[INFO] Total time: 44.467 s

Chitsanzo chokhazikitsa ma 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>

Khazikitsani, sikelo: chidziwitso chogwiritsa ntchito mayeso odzichitira pa VTB
Chitsanzo cha lipoti la Allure (mayeso osakhazikika kwambiri, kubwereza 4)

Khazikitsani, sikelo: chidziwitso chogwiritsa ntchito mayeso odzichitira pa VTBKatundu wothamanga pamayeso (ma 8 cores, 8 GB RAM, ulusi 12)
 
Zotsatira:

  • kukhazikitsa kosavuta - mumangofunika kuwonjezera pulogalamu yowonjezera;
  • kuthekera nthawi imodzi kuchita mayeso ambiri;
  • kuthamangitsa kukhazikika kwa mayeso chifukwa cha gawo 1. 

Wotsatsa:

  • Zambiri za OS / zotengera zofunika;
  • kugwiritsa ntchito zinthu zambiri pa foloko iliyonse;
  • Pulagiyi ndi yachikale ndipo sakugwiranso ntchito. 

Momwe mungagonjetsere kusakhazikika 

Mabenchi oyesera si abwino, monga momwe amayesera okha. N'zosadabwitsa kuti tili ndi mayesero angapo ofooka. Anabwera kudzapulumutsa maven surefire plugin, zomwe zili m'bokosilo zimathandizira kuyambitsanso mayeso olephera. Muyenera kusintha mtundu wa plugin kukhala osachepera 2.21 ndikulemba mzere umodzi ndi kuchuluka kwa kuyambiranso mu fayilo ya pom kapena kuyipereka ngati mkangano kwa Maven.

Chitsanzo chokhazikitsa ma autotest:

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

Kapena poyambira: mvn … -Dsurefire.rerunFailingTestsCount=2 …
Monga njira, yikani Maven zosankha za PowerShell script (PS1):

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

Zotsatira:

  • palibe chifukwa chotaya nthawi kusanthula mayeso osakhazikika pamene akugwa;
  • mavuto okhazikika a benchi amatha kuchepetsedwa.

Wotsatsa:

  • zolakwika zoyandama zitha kuphonya;
  • nthawi yowonjezera ikuwonjezeka.

Mayeso ofanana ndi laibulale ya Nkhaka 4

Chiwerengero cha mayesero chinakula tsiku lililonse. Tinaganizanso zofulumizitsa kuthamanga. Kuphatikiza apo, ndidafuna kuphatikiza mayeso ambiri momwe ndingathere mupaipi yophatikiza yofunsira. Chofunikira ndichakuti m'badwo wa othamangawo udatenga nthawi yayitali kwambiri pothamanga limodzi pogwiritsa ntchito plugin ya Maven.

Panthawiyo, nkhaka 4 inali itatulutsidwa kale, choncho tinaganiza zolemberanso kernel yamtunduwu. Muzolemba zomasulidwa tinalonjezedwa kukhazikitsidwa kofanana pamlingo wa ulusi. Mwachidziwitso izi zimayenera kukhala:

  • kufulumizitsa kwambiri kuthamanga kwa autotests powonjezera kuchuluka kwa ulusi;
  • kuthetsa kutaya nthawi pakupanga othamanga pa autotest iliyonse.

Kukonza chimango cha ma autotes amitundu yambiri sikunakhale kovuta kwambiri. Nkhaka 4 imayendetsa mayeso amunthu aliyense pa ulusi wodzipatulira kuyambira koyambira mpaka kumapeto, kotero zinthu zina zodziwika bwino zimangosinthidwa kukhala zosintha za ThreadLocal. 
Chinthu chachikulu mukatembenuza pogwiritsa ntchito Idea refactoring zida ndikuyang'ana malo omwe kusinthaku kunafaniziridwa (mwachitsanzo, kufufuza za null). Kuphatikiza apo, muyenera kuwonjezera pulogalamu yowonjezera ya Allure ku Junit Runner class annotation.

Chitsanzo chokhazikitsa ma 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>

Khazikitsani, sikelo: chidziwitso chogwiritsa ntchito mayeso odzichitira pa VTBChitsanzo cha lipoti la Allure (mayeso osakhazikika kwambiri, kubwereza 5)

Khazikitsani, sikelo: chidziwitso chogwiritsa ntchito mayeso odzichitira pa VTBKatundu wothamanga pamayeso (8 cores, 8 GB RAM, 24 ulusi)

Zotsatira:

  • kugwiritsa ntchito zinthu zochepa;
  • thandizo lachilengedwe kuchokera ku Nkhaka - palibe zida zowonjezera zofunika;
  • Kutha kuyendetsa ulusi wopitilira 6 pachimake cha purosesa.

Wotsatsa:

  • muyenera kuonetsetsa kuti code imathandizira kuphedwa kwamitundu yambiri;
  • malo olowera akuwonjezeka.

Malipoti a Allure pamasamba a GitLab

Pambuyo poyambitsa kuphedwa kwamitundu yambiri, tinayamba kuthera nthawi yochulukirapo kusanthula malipoti. Panthawiyo, tinkayenera kukweza lipoti lililonse ngati chojambula ku GitLab, kenako ndikutsitsa ndikumasula. Sizothandiza kwambiri ndipo zimatenga nthawi yayitali. Ndipo ngati wina akufuna kuti adziwonere yekha lipotilo, ndiye kuti ayenera kuchita zomwezo. Tinkafuna kulandira mayankho mwachangu, ndipo tidapeza yankho - masamba a GitLab. Ichi ndi chopangidwa chomwe chimapezeka m'bokosi m'mitundu yonse yaposachedwa ya GitLab. Zimakulolani kuti mutumize masamba osasunthika pa seva yanu ndikuwapeza kudzera pa ulalo wachindunji.

Zithunzi zonse za malipoti a Allure zidatengedwa patsamba la GitLab. Script yotumizira lipotilo kumasamba a GitLab - mu Windows PowerShell (izi zisanachitike muyenera kuyendetsa ma 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

Chofunika kwambiri ndi chiyani 

Chifukwa chake, ngati mukuganiza ngati mukufunikira Khodi yotetezeka ya Thread mu Cucumber autotest framework, tsopano yankho liri lodziwikiratu - ndi Nkhaka 4 ndizosavuta kukhazikitsa, potero zikuwonjezera kuchuluka kwa ulusi womwe unayambika nthawi imodzi. Ndi njira iyi yoyeserera mayeso, funso tsopano limakhala lokhudza magwiridwe antchito a makina ndi Selenoid ndi benchi yoyeserera.

Zoyeserera zawonetsa kuti kuyendetsa ma autotest pa ulusi kumakupatsani mwayi wochepetsera kugwiritsa ntchito zinthu pang'ono ndikuchita bwino kwambiri. Monga momwe tawonera pamagrafu, ulusi wowirikiza kawiri sikutsogolera kuthamangitsidwa kofananako pakuyesa magwiridwe antchito. Komabe, tidatha kuwonjezera mayeso opitilira 2 pakupanga pulogalamuyo, yomwe ngakhale kubwereza 200 kumathamanga pafupifupi mphindi 5. Izi zimakuthandizani kuti mulandire mayankho mwachangu kuchokera kwa iwo, ndipo, ngati kuli kofunikira, pangani kusintha ndikubwerezanso njirayi.

Source: www.habr.com

Kuwonjezera ndemanga