Hoʻokō, pālākiō: ʻike i ka hoʻohana ʻana i nā hoʻokolohua automated ma VTB

Hoʻokumu kā mākou māhele i nā pipeline piha piha no ka hoʻokuʻu ʻana i nā mana hou o nā noi i loko o ke kaiapuni hana. ʻOiaʻiʻo, pono kēia i nā hoʻokolohua hana automated. Ma lalo o ka ʻoki ʻana he moʻolelo e pili ana i ka hoʻomaka ʻana me ka hoʻāʻo ʻana i hoʻokahi thread ma kahi mīkini kūloko, ua hele mākou i nā autotests multi-threaded e holo ana ma Selenoid i ka pipeline kūkulu me kahi hōʻike Allure ma nā ʻaoʻao GitLab a loaʻa i kahi hāmeʻa automation maikaʻi loa. Hiki i nā poʻe e hiki mai ana ke hoʻohana i nā hui.

Hoʻokō, pālākiō: ʻike i ka hoʻohana ʻana i nā hoʻokolohua automated ma VTB

Ma hea mākou i hoʻomaka ai?

No ka hoʻokō ʻana i nā autotests a hoʻohui iā lākou i ka pipeline, pono mākou i kahi ʻōnaehana automation e hiki ke hoʻololi maʻalahi e kūpono i kā mākou pono. Ma ke kūpono, makemake au e kiʻi i hoʻokahi maʻamau no ka ʻenekini autotesting, i hoʻololi ʻia no ka hoʻokomo ʻana i nā autotests i loko o ka pipeline. No ka hoʻokō, ua koho mākou i nā ʻenehana penei:

  • Iava,
  • Maven,
  • Selenium,
  • Kukama+JUNIT 4,
  • Hoʻohiwahiwa,
  • ʻO GitLab.

Hoʻokō, pālākiō: ʻike i ka hoʻohana ʻana i nā hoʻokolohua automated ma VTB

No ke aha kēia hoʻonohonoho kūikawā? ʻO Java kekahi o nā ʻōlelo kaulana loa no nā hoʻāʻo ʻokoʻa, a ʻōlelo nā lālā a pau. ʻO Selenium ka hopena maopopo. ʻO ka kukama, ma waena o nā mea ʻē aʻe, ua manaʻo ʻia e hoʻonui i ka hilinaʻi i nā hopena o nā hoʻokolohua automated ma ka ʻaoʻao o nā keʻena i komo i ka hoʻāʻo manual.

Nā hoʻāʻo ʻana i hoʻokahi kaula

I ʻole e hana hou i ka huila, ua lawe mākou i nā hoʻomohala mai nā waihona like ʻole ma GitHub i kumu no ka hoʻolālā a hoʻololi iā lākou no mākou iho. Ua hana mākou i kahi waihona no ka waihona nui me ke kumu o ka autotest framework a me kahi waihona me kahi laʻana gula o ka hoʻokō ʻana i nā autotests ma kā mākou kumu. Pono kēlā me kēia hui e lawe i ke kiʻi gula a hoʻomohala i nā hoʻokolohua i loko o ia mea, e hoʻololi iā ia i kā lākou papahana. Hāʻawi mākou iā ia i ka waihona GitLab-CI, kahi a mākou i hoʻonohonoho ai:

  • ka holo ʻana i kēlā me kēia lā o nā hōʻike autotest i kākau ʻia no kēlā me kēia papahana;
  • hoʻokuʻu ʻia i ka pipeline kūkulu.

I ka wā mua he kakaikahi nā hoʻokolohua, a ua lawe ʻia lākou i hoʻokahi kahawai. Ua kūpono loa ka holo ʻana o ka holo hoʻokahi ma ka GitLab Windows runner iā mākou: ua hoʻouka maʻalahi nā hoʻokolohua i ka papa hoʻāʻo a hoʻohana ʻole i nā kumuwaiwai.

I ka wā lōʻihi, ua ʻoi aku ka nui o nā autotests, a noʻonoʻo mākou e holo like me lākou, i ka wā i hoʻomaka ai ka holo holoʻokoʻa ma kahi o ʻekolu hola. Ua ʻike ʻia nā pilikia ʻē aʻe:

  • ʻAʻole hiki iā mākou ke hōʻoia i ka paʻa o nā hoʻokolohua;
  • ʻO nā hoʻokolohua i hana ʻia i nā manawa he nui i ka lālani ma ka mīkini kūloko i kekahi manawa i hāʻule i CI.

Ka laʻana o ka hoʻonohonoho ʻana i nā hoʻāʻo auto:

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

 Hoʻokō, pālākiō: ʻike i ka hoʻohana ʻana i nā hoʻokolohua automated ma VTB
Hōʻike hōʻike hoʻohālike

 Hoʻokō, pālākiō: ʻike i ka hoʻohana ʻana i nā hoʻokolohua automated ma VTB
Hoʻouka ka mea holo i ka wā o nā hoʻokolohua (8 cores, 8 GB RAM, 1 thread)
 
ʻO nā mea maikaʻi o nā ho'āʻo hoʻokahi-threaded:

  • maʻalahi e hoʻonohonoho a holo;
  • ʻAʻole ʻokoʻa ka hoʻokuʻu ʻana ma CI mai nā hoʻokuʻu kūloko;
  • ʻaʻole pili nā hoʻokolohua kekahi i kekahi;
  • nā koi liʻiliʻi no nā kumuwaiwai runner.

ʻO nā hemahema o nā hoʻokolohua hoʻokahi-threaded:

  • lōʻihi loa ka hoʻopau ʻana;
  • hoʻopaʻa lōʻihi o nā hoʻokolohua;
  • ka hoʻohana pono ʻole ʻana i nā kumuwaiwai runner, haʻahaʻa loa ka hoʻohana ʻana.

ʻO nā hoʻāʻo ʻana ma nā ʻōpala JVM

No ka mea ʻaʻole mākou i mālama i ka code-safe code i ka wā e hoʻokō ai i ke kahua kumu, ʻo ke ala maopopo loa e holo like ai. kukama-jvm-parallel-plugin no Maven. Maʻalahi ka hoʻonohonoho ʻana i ka plugin, akā no ka hana like ʻana, pono e holo nā autotests i nā mākaʻikaʻi ʻokoʻa. ʻAʻohe mea e hana ai, pono wau e hoʻohana iā Selenoid.

Ua hoʻokuʻu ʻia ka server Selenoid ma kahi mīkini me 32 cores a me 24 GB o RAM. Ua hoʻonoho ʻia ka palena ma 48 mau mākaʻikaʻi - 1,5 mau kaula i kēlā me kēia kumu a ma kahi o 400 MB o RAM. ʻO ka hopena, ua hoʻemi ʻia ka manawa hoʻāʻo mai ʻekolu hola i 40 mau minuke. ʻO ka wikiwiki ʻana i nā holo i kōkua i ka hoʻoponopono ʻana i ka pilikia hoʻokūpaʻa: i kēia manawa hiki iā mākou ke holo wikiwiki i nā hoʻokolohua hou hou 20-30 mau manawa a maopopo iā mākou ua holo pono lākou.
ʻO ka drawback mua o ka hopena ʻo ka hoʻohana kiʻekiʻe o nā kumuwaiwai runner me kahi helu liʻiliʻi o nā kaula like ʻole: ma 4 cores a me 8 GB o RAM, holo paʻa nā hoʻokolohua ma mua o 6 mau kaula. ʻO ka lua o ka hemahema: hoʻopuka ka plugin i nā papa kukini no kēlā me kēia hiʻohiʻona, ʻaʻohe mea e hoʻomaka ai ka nui o lākou.

Mea nui! Mai hāʻawi i kahi hoʻololi me nā hōʻailona i argLine, no ka laʻana, penei:

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

Inā hāʻawi ʻoe i ka hōʻailona ma kēia ʻano, e hoʻopuka ka plugin i nā mea holo no nā hoʻokolohua āpau, ʻo ia hoʻi, e hoʻāʻo e holo i nā hoʻokolohua āpau, e lele koke iā lākou ma hope o ka hoʻomaka ʻana a me ka hana ʻana i nā ʻāpana JVM he nui.

Pono e hoʻolei i kahi hoʻololi me kahi hōʻailona i loko Tags i nā hoʻonohonoho plugin, e ʻike i ka laʻana ma lalo nei. Loaʻa nā pilikia ʻē aʻe a mākou i hoʻāʻo ai i ka hoʻopili ʻana i ka plugin Allure.

Ka laʻana o ka manawa holo no nā hoʻokolohua pōkole 6 me nā hoʻonohonoho hewa:

[INFO] Total time: 03:17 min

Ka laʻana o ka manawa hoʻāʻo inā hoʻololi pololei ʻoe i ka hōʻailona i mvn... –Dcucumber.options:

[INFO] Total time: 44.467 s

Ka laʻana o ka hoʻonohonoho ʻana i nā hoʻāʻo auto:

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

Hoʻokō, pālākiō: ʻike i ka hoʻohana ʻana i nā hoʻokolohua automated ma VTB
Ka laʻana o kahi hōʻike Allure (ka hoʻāʻo paʻa ʻole, 4 mau hoʻoiho)

Hoʻokō, pālākiō: ʻike i ka hoʻohana ʻana i nā hoʻokolohua automated ma VTBHoʻouka ka mea holo i ka wā o nā hoʻokolohua (8 cores, 8 GB RAM, 12 threads)
 
Kākoʻo:

  • hoʻonohonoho maʻalahi - pono ʻoe e hoʻohui i kahi plugin;
  • ka hiki ke hana i ka nui o nā ho'āʻo i ka manawa like;
  • ka wikiwiki o ka hoʻokūpaʻa hoʻāʻo e hoʻomaikaʻi i ka pae 1. 

ʻAla:

  • Pono nā OS / pahu he nui;
  • ka hoʻohana waiwai nui no kēlā me kēia ʻōpala;
  • ʻAʻole i kākoʻo hou ʻia ka plugin. 

Pehea e lanakila ai i ka noho ʻole 

ʻAʻole kūpono nā papa hoʻāʻo, e like me nā hoʻāʻo ʻana iā lākou iho. ʻAʻole ia he mea kupanaha no ka loaʻa ʻana o nā hoʻokolohua flacky. Hele mai e hoʻopakele maven surefire plugin, ka mea ma waho o ka pahu e kākoʻo i ka hoʻomaka hou ʻana i nā hoʻāʻo ʻole. Pono ʻoe e hōʻano hou i ka mana plugin i ka liʻiliʻi 2.21 a kākau i hoʻokahi laina me ka helu o ka hoʻomaka hou ʻana i ka faila pom a i ʻole e hāʻawi iā ia i mea hoʻopaʻapaʻa iā Maven.

Ka laʻana o ka hoʻonohonoho ʻana i nā hoʻāʻo auto:

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

A i ʻole ma ka hoʻomaka ʻana: mvn … -Dsurefire.rerunFailingTestsCount=2 …
Ma ke ʻano he koho, hoʻonoho i nā koho Maven no ka palapala PowerShell (PS1):

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

Kākoʻo:

  • ʻAʻole pono e hoʻonele i ka manawa no ka nānā ʻana i kahi hoʻokolohua paʻa ʻole ke hāʻule;
  • Hiki ke hoʻemi ʻia nā pilikia paʻa o ka papa hoʻāʻo.

ʻAla:

  • hiki ke nalo i na hemahema e lana ana;
  • piʻi ka manawa holo.

Nā hoʻāʻo like ʻana me ka waihona ʻo Cucumber 4

Ua ulu ka nui o nā ho'āʻo i kēlā me kēia lā. Ua noʻonoʻo hou mākou i ka wikiwiki ʻana i nā holo. Eia hou, makemake au e hoʻohui i nā hoʻokolohua he nui i hiki i ka pipeline hui noi. ʻO ke kumu koʻikoʻi ʻo ia ka lōʻihi o ka hana ʻana o nā mea holo i ka wā e holo like ai me ka hoʻohana ʻana i ka plugin Maven.

I kēlā manawa, ua hoʻokuʻu ʻia ʻo Cucumber 4, no laila ua hoʻoholo mākou e kākau hou i ka kernel no kēia mana. Ma nā memo hoʻokuʻu, ua hoʻohiki ʻia mākou e hoʻomaka i ka pae pae. ʻO ka manaʻo pono kēia:

  • e wikiwiki loa i ka holo ʻana o nā autotests ma ka hoʻonui ʻana i ka nui o nā kaula;
  • hoʻopau i ka nalowale o ka manawa ma ka hana ʻana i nā mea holo no kēlā me kēia autotest.

ʻAʻole paʻakikī loa ka hoʻonui ʻana i ke kāʻei no nā autotests multi-threaded. Hoʻohana ʻo Cucumber 4 i kēlā me kēia hoʻāʻo ʻana ma kahi pae i hoʻolaʻa ʻia mai ka hoʻomaka ʻana a hiki i ka pau ʻana, no laila ua hoʻololi wale ʻia kekahi mau mea static maʻamau i ThreadLocal variables. 
ʻO ka mea nui i ka wā e hoʻololi ai me ka hoʻohana ʻana i nā mea hana manaʻo Idea refactoring e nānā i nā wahi i hoʻohālikelike ʻia ai ka loli (no ka laʻana, nānā no ka null). Eia hou, pono ʻoe e hoʻohui i ka plugin Allure i ka hōʻike papa Junit Runner.

Ka laʻana o ka hoʻonohonoho ʻana i nā hoʻāʻo auto:

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

Hoʻokō, pālākiō: ʻike i ka hoʻohana ʻana i nā hoʻokolohua automated ma VTBKa laʻana o kahi hōʻike Allure (ka hoʻāʻo paʻa ʻole, 5 mau hoʻoiho)

Hoʻokō, pālākiō: ʻike i ka hoʻohana ʻana i nā hoʻokolohua automated ma VTBHoʻouka ka mea holo i ka wā o nā hoʻokolohua (8 cores, 8 GB RAM, 24 mau kaula)

Kākoʻo:

  • haʻahaʻa hoʻohana waiwai;
  • kākoʻo maoli mai Kukama - ʻaʻohe mea hana hou e pono ai;
  • ka hiki ke holo ma mua o 6 mau kaula no kēlā me kēia kaʻina hana.

ʻAla:

  • pono ʻoe e hōʻoia e kākoʻo ke code i ka hoʻokō multi-threaded;
  • piʻi ka paepae komo.

Hōʻike ʻo Allure ma nā ʻaoʻao GitLab

Ma hope o ka hoʻokomo ʻana i ka hoʻokō multi-threaded, hoʻomaka mākou e hoʻolilo i ka manawa hou aku i ka nānā ʻana i nā hōʻike. I kēlā manawa, pono mākou e hoʻouka i kēlā me kēia hōʻike ma ke ʻano he kiʻi kiʻi iā GitLab, a laila hoʻoiho a wehe iā ia. ʻAʻole maʻalahi a lōʻihi ka manawa. A inā makemake kekahi e nānā i ka hōʻike no lākou iho, pono lākou e hana i nā hana like. Makemake mākou e loaʻa wikiwiki nā manaʻo, a loaʻa iā mākou kahi hopena - nā ʻaoʻao GitLab. ʻO kēia kahi hiʻohiʻona i kūkulu ʻia i loaʻa ma waho o ka pahu i nā mana hou o GitLab. Hāʻawi iā ʻoe e kau i nā pūnaewele static ma kāu kikowaena a komo iā lākou ma o kahi loulou pololei.

Ua lawe ʻia nā kiʻi paʻi āpau o nā hōʻike Allure ma nā ʻaoʻao GitLab. Palapala no ka lawe ʻana i ka hōʻike i nā ʻaoʻao GitLab - ma Windows PowerShell (ma mua o kēia pono ʻoe e holo i nā 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 ka hopena 

No laila, inā ʻoe e noʻonoʻo nei inā pono ʻoe i ke code palekana Thread i ka ʻōnaehana autotest Cucumber, i kēia manawa ua ʻike ʻia ka pane - me ka Cucumber 4 he maʻalahi ke hoʻokō, a laila e hoʻonui nui i ka helu o nā kaula i hoʻokuʻu ʻia i ka manawa like. Me kēia ʻano o ka holo ʻana i nā hoʻokolohua, lilo ka nīnau e pili ana i ka hana o ka mīkini me Selenoid a me ka papa hoʻāʻo.

Ua hōʻike ka hoʻomaʻamaʻa ʻana i ka holo ʻana i nā autotests ma nā pae e hiki ai iā ʻoe ke hōʻemi i ka hoʻohana waiwai i ka liʻiliʻi me ka hana maikaʻi loa. E like me ka mea i ʻike ʻia mai nā kiʻi, ʻaʻole alakaʻi i nā kaula pālua i ka wikiwiki like i nā hoʻokolohua hana. Eia nō naʻe, ua hiki iā mākou ke hoʻohui i nā hoʻāʻo automated ʻoi aku ma mua o 2 i ka hana noi, ʻoiai me 200 reruns e holo ma kahi o 5 mau minuke. Hiki iā ʻoe ke loaʻa nā manaʻo wikiwiki mai lākou, a, inā pono, e hoʻololi a hana hou i ke kaʻina hana.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka