Cur an gnìomh, sgèile: eòlas air cleachdadh dheuchainnean fèin-ghluasadach aig VTB

Bidh an roinn againn a’ cruthachadh pìoban gu tur fèin-ghluasadach airson dreachan ùra de thagraidhean a chuir a-steach don àrainneachd cinneasachaidh. Gu dearbh, feumaidh seo deuchainnean gnìomh fèin-ghluasadach. Fon gearradh tha sgeulachd mu dheidhinn mar, a’ tòiseachadh le deuchainn aon-snàthainn air inneal ionadail, ràinig sinn ìre an autotest ioma-snàthainn a’ ruith air Selenoid anns an loidhne-phìoban togail le aithisg Allure air duilleagan GitLab agus mu dheireadh fhuair sinn inneal fèin-ghluasaid fionnar gum faod daoine san àm ri teachd sgiobaidhean a chleachdadh.

Cur an gnìomh, sgèile: eòlas air cleachdadh dheuchainnean fèin-ghluasadach aig VTB

Càite an do thòisich sinn?

Gus fèin-dheuchainnean a chuir an gnìomh agus an aonachadh a-steach don loidhne-phìoban, bha feum againn air frèam fèin-ghluasaid a ghabhadh atharrachadh gu sùbailte a rèir ar feumalachdan. Gu h-iomchaidh, bha mi airson aon inbhe fhaighinn airson an einnsean fèin-dheuchainn, air atharrachadh airson fèin-dheuchainnean a thoirt a-steach don loidhne-phìoban. Airson an cur an gnìomh thagh sinn na teicneòlasan a leanas:

  • Java,
  • Mabhainn,
  • Seileium,
  • Cucumber+JUNIT 4,
  • Allure,
  • GitLab.

Cur an gnìomh, sgèile: eòlas air cleachdadh dheuchainnean fèin-ghluasadach aig VTB

Carson a tha an seata sònraichte seo? Is e Java aon de na cànanan as mòr-chòrdte airson deuchainnean fèin-ghluasadach, agus bidh gach ball den sgioba ga bruidhinn. Is e selenium am fuasgladh follaiseach. Bha còir aig cucumber, am measg rudan eile, misneachd àrdachadh ann an toraidhean deuchainnean fèin-ghluasadach bho roinnean a bha an sàs ann an deuchainn làimhe.

Deuchainnean aon-snàthainn

Gus nach ath-chruthaich sinn a’ chuibhle, ghabh sinn leasachaidhean bho dhiofar thasgaidhean air GitHub mar bhunait don fhrèam agus dh’ atharraich sinn iad dhuinn fhìn. Chruthaich sinn stòr airson a’ phrìomh leabharlann le cridhe frèam an autotest agus stòr le eisimpleir òir de bhith a’ buileachadh autotests air ar cridhe. Dh'fheumadh gach sgioba an ìomhaigh òir a ghabhail agus deuchainnean a leasachadh ann, ga atharrachadh don phròiseact aca. Chuir sinn a-steach e don bhanca GitLab-CI, air an do shuidhich sinn:

  • ruith làitheil de gach deuchainn fèin-sgrìobhaidh airson gach pròiseact;
  • a’ cur air bhog san loidhne-phìoban togail.

An toiseach cha robh mòran deuchainnean ann, agus chaidh an dèanamh ann an aon sruth. Bha ruith aon-snàthainn air an ruitheadair Windows GitLab gu math freagarrach dhuinn: bha na deuchainnean a’ luchdachadh a’ bheing deuchainn gu math aotrom agus cha mhòr nach do chleachd iad goireasan sam bith.

Thar ùine, dh'fhàs an àireamh de autotests barrachd is barrachd, agus smaoinich sinn mu bhith gan ruith aig an aon àm, nuair a thòisich làn ruith a 'toirt timcheall air trì uairean a thìde. Nochd duilgheadasan eile cuideachd:

  • cha b' urrainn dhuinn dearbhadh gu robh na deuchainnean seasmhach;
  • bhiodh deuchainnean a chaidh a ruith grunn thursan ann an sreath air an inneal ionadail uaireannan a’ tuiteam ann an CI.

Eisimpleir de bhith a’ stèidheachadh fèin-dheuchainnean:

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

 Cur an gnìomh, sgèile: eòlas air cleachdadh dheuchainnean fèin-ghluasadach aig VTB
Eisimpleir aithris allure

 Cur an gnìomh, sgèile: eòlas air cleachdadh dheuchainnean fèin-ghluasadach aig VTB
Luchd ruitheadair rè deuchainnean (8 cores, 8 GB RAM, 1 snàithlean)
 
Buannachdan deuchainnean aon-snàthainn:

  • furasta a stèidheachadh agus a ruith;
  • cha mhòr nach eil cur air bhog ann an CI eadar-dhealaichte bho chuir air bhog ionadail;
  • chan eil deuchainnean a 'toirt buaidh air a chèile;
  • riatanasan as ìsle airson goireasan ruitheadair.

Eas-bhuannachdan deuchainnean aon-snàthainn:

  • gabh ùine mhòr airson a chrìochnachadh;
  • seasmhachd fhada de dheuchainnean;
  • cleachdadh neo-èifeachdach de ghoireasan ruitheadair, cleachdadh glè ìosal.

Deuchainnean air forks JVM

Leis nach tug sinn aire do chòd sàbhailte snàithlean nuair a chuir sinn am frèam bunaiteach an gnìomh, b ’e an dòigh as fhollaisiche air ruith aig an aon àm cucumber-jvm-co-shìnte-plug airson Maven. Tha am plugan furasta a rèiteachadh, ach airson obrachadh ceart co-shìnte, feumar fèin-dheuchainnean a ruith ann am brobhsairean fa leth. Chan eil dad ri dhèanamh, bha agam ri Selenoid a chleachdadh.

Chaidh am frithealaiche Selenoid a chuir air bhog air inneal le 32 cores agus 24 GB de RAM. Chaidh a’ chrìoch a shuidheachadh aig 48 brobhsairean - 1,5 snàithlean gach cridhe agus timcheall air 400 MB de RAM. Mar thoradh air an sin, chaidh an ùine deuchainn a lùghdachadh bho thrì uairean a thìde gu 40 mionaid. Chuidich luathachadh nan ruith le fuasgladh fhaighinn air an duilgheadas stèidheachaidh: a-nis b’ urrainn dhuinn fèin-dheuchainnean ùra a ruith 20-30 uair gus am biodh sinn cinnteach gun ruith iad gu earbsach.
B ’e a’ chiad tarraing air ais den fhuasgladh cleachdadh àrd de ghoireasan ruitheadair le àireamh bheag de snàithleanan co-shìnte: air 4 cores agus 8 GB de RAM, ruith na deuchainnean gu seasmhach ann an nas motha na snàithleanan 6. An dàrna ana-cothrom: bidh am plugan a’ gineadh clasaichean ruitheadair airson gach suidheachadh, ge bith cia mheud dhiubh a thèid a chuir air bhog.

Cudromach! Na cuir seachad caochladair le tagaichean gu argLine, mar eisimpleir, mar seo:

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

Ma thèid thu seachad air an taga san dòigh seo, cruthaichidh am plugan ruitheadairean airson a h-uile deuchainn, is e sin, feuchaidh e ris a h-uile deuchainn a ruith, gan leum dìreach às deidh an cur air bhog agus a ’cruthachadh mòran de bhogsaichean JVM.

Tha e ceart caochladair le tag a thilgeil a-steach tags anns na roghainnean plugan, faic an eisimpleir gu h-ìosal. Tha duilgheadasan aig dòighean eile a rinn sinn deuchainn air a bhith a’ ceangal plugan Allure.

Eisimpleir de ùine ruith airson 6 deuchainnean goirid le roghainnean ceàrr:

[INFO] Total time: 03:17 min

Eisimpleir de ùine ruith deuchainn ma ghluaiseas tu an taga gu dìreach gu mvn... -Dcucumber.roghainnean:

[INFO] Total time: 44.467 s

Eisimpleir de bhith a’ stèidheachadh fèin-dheuchainnean:

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

Cur an gnìomh, sgèile: eòlas air cleachdadh dheuchainnean fèin-ghluasadach aig VTB
Eisimpleir de aithisg Allure (an deuchainn as neo-sheasmhach, 4 reruns)

Cur an gnìomh, sgèile: eòlas air cleachdadh dheuchainnean fèin-ghluasadach aig VTBLuchdaich ruitheadair rè dheuchainnean (8 cores, 8 GB RAM, 12 snàithlean)
 
Pros:

  • rèiteachadh furasta - chan fheum thu ach plugan a chuir ris;
  • an comas àireamh mhòr de dheuchainnean a dhèanamh aig an aon àm;
  • luathachadh seasmhachd deuchainn le taing do cheum 1. 

Cons:

  • Ioma OS / soithichean a dhìth;
  • caitheamh stòras àrd airson gach forc;
  • Tha am plugan seann-fhasanta agus chan eil taic ann tuilleadh. 

Mar a gheibh thu thairis air neo-sheasmhachd 

Chan eil beingean deuchainn air leth freagarrach, dìreach mar na autotests fhèin. Chan eil e na iongnadh gu bheil grunn deuchainnean flacky againn. Thàinig gu teasairginn Plugin maven surefire, a tha a-mach às a’ bhogsa a’ toirt taic do dheuchainnean air fàilligeadh ath-thòiseachadh. Feumaidh tu an tionndadh plugan ùrachadh gu co-dhiù 2.21 agus sgrìobh aon loidhne leis an àireamh de ath-thòiseachadh anns an fhaidhle pom no cuir seachad e mar argamaid gu Maven.

Eisimpleir de bhith a’ stèidheachadh fèin-dheuchainnean:

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

No nuair a thòisicheas tu: mvn … -Dsurefire.rerunFailingTestsCount=2 …
Mar roghainn, suidhich roghainnean Maven airson an sgriobt PowerShell (PS1):

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

Pros:

  • chan fheumar ùine a chaitheamh a’ dèanamh anailis air deuchainn neo-sheasmhach nuair a thuiteas e;
  • faodar duilgheadasan seasmhachd being deuchainn a lughdachadh.

Cons:

  • faodar lochdan fleòdraidh a chall;
  • meudachadh ùine ruith.

Deuchainnean co-shìnte le leabharlann Cucumber 4

Dh'fhàs an àireamh de dheuchainnean gach latha. Smaoinich sinn a-rithist mu bhith a’ luathachadh nan ruith. A bharrachd air an sin, bha mi airson na h-uimhir de dheuchainnean fhilleadh a-steach don loidhne-phìoban cruinneachaidh tagraidh. B’ e am prìomh adhbhar gun tug ginealach ruitheadairean ro fhada nuair a bha iad a’ ruith aig an aon àm a’ cleachdadh plugan Maven.

Aig an àm sin, bha Cucumber 4 air a leigeil ma sgaoil mu thràth, agus mar sin chuir sinn romhainn an kernel ath-sgrìobhadh airson an dreach seo. Anns na notaichean fuasglaidh chaidh gealltainn dhuinn cur air bhog co-shìnte aig ìre an t-snàthainn. Gu teòiridheach bu chòir seo a bhith:

  • luathaich ruith autotests gu mòr le bhith a’ meudachadh àireamh nan snàithleanan;
  • cuir às do chall ùine air gineadh ruitheadairean airson gach autotest.

Cha robh e cho duilich am frèam airson fèin-dheuchainnean ioma-snàthainn a bharrachadh. Bidh Cucumber 4 a’ ruith gach deuchainn fa leth air snàithlean sònraichte bho thoiseach gu deireadh, agus mar sin chaidh cuid de rudan statach cumanta atharrachadh gu caochladairean ThreadLocal. 
Is e am prìomh rud nuair a bhios tu ag atharrachadh le bhith a’ cleachdadh innealan refactoring Idea sgrùdadh a dhèanamh air na h-àiteachan far an deach coimeas a dhèanamh eadar an caochladair (mar eisimpleir, sgrùdadh airson null). A bharrachd air an sin, feumaidh tu am plugan Allure a chuir ri nota clas Junit Runner.

Eisimpleir de bhith a’ stèidheachadh fèin-dheuchainnean:

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

Cur an gnìomh, sgèile: eòlas air cleachdadh dheuchainnean fèin-ghluasadach aig VTBEisimpleir de aithisg Allure (an deuchainn as neo-sheasmhach, 5 reruns)

Cur an gnìomh, sgèile: eòlas air cleachdadh dheuchainnean fèin-ghluasadach aig VTBLuchdaich ruitheadair rè dheuchainnean (8 cores, 8 GB RAM, 24 snàithlean)

Pros:

  • caitheamh stòras ìosal;
  • taic dùthchasach bho Cucumber - chan eil feum air innealan a bharrachd;
  • an comas barrachd air 6 snàithleanan a ruith gach cridhe pròiseasar.

Cons:

  • feumaidh tu dèanamh cinnteach gu bheil an còd a 'toirt taic do choileanadh ioma-snàithlean;
  • tha an ìre inntrigidh ag àrdachadh.

Aithisgean Allure air duilleagan GitLab

Às deidh dhuinn coileanadh ioma-snàthainn a thoirt a-steach, thòisich sinn air tòrr a bharrachd ùine a chaitheamh a’ sgrùdadh aithisgean. Aig an àm sin, bha againn ri gach aithisg a luchdachadh suas mar artifact gu GitLab, an uairsin a luchdachadh sìos agus a dhì-phapadh. Chan eil e gu math goireasach agus bheir e ùine mhòr. Agus ma tha cuideigin eile airson an aithisg fhaicinn dhaibh fhèin, feumaidh iad na h-aon obraichean a dhèanamh. Bha sinn airson fios air ais fhaighinn nas luaithe, agus lorg sinn fuasgladh - duilleagan GitLab. Is e feart togte a tha seo a tha ri fhaighinn a-mach às a’ bhogsa anns a h-uile dreach o chionn ghoirid de GitLab. A’ leigeil leat làraich statach a chuir a-steach air an t-seirbheisiche agad agus faighinn thuca tro cheangal dìreach.

Chaidh a h-uile dealbh-sgrìn de aithisgean Allure a thoirt air duilleagan GitLab. Sgriobt airson an aithisg a chuir gu duilleagan GitLab - ann an Windows PowerShell (roimhe seo feumaidh tu autotests a ruith):

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

Dè anns a 'cheann thall 

Mar sin, ma bha thu a’ smaoineachadh a bheil feum agad air còd sàbhailte Thread ann am frèam autotest Cucumber, a-nis tha am freagairt follaiseach - le Cucumber 4 tha e furasta a chuir an gnìomh, agus mar sin ag àrdachadh gu mòr an àireamh de snàithleanan a chaidh a chuir air bhog aig an aon àm. Leis an dòigh seo airson deuchainnean a ruith, bidh a’ cheist a-nis mu choileanadh an inneil le Selenoid agus a’ bheing deuchainn.

Tha cleachdadh air sealltainn gu bheil a bhith a’ ruith fèin-dheuchainnean air snàithleanan a’ leigeil leat caitheamh ghoireasan a lughdachadh cho ìosal ‘s a ghabhas leis a’ choileanadh as fheàrr. Mar a chithear bho na grafaichean, chan eil dùblachadh snàithleanan a’ leantainn gu luathachadh coltach ris ann an deuchainnean coileanaidh. Ach, bha e comasach dhuinn còrr air 2 deuchainn fèin-ghluasadach a chuir ri togail an tagraidh, a bhios eadhon le ath-chuairtean 200 a’ ruith ann an timcheall air 5 mionaidean. Leigidh seo leat fios air ais luath fhaighinn bhuapa, agus, ma tha sin riatanach, atharraichean a dhèanamh agus am modh-obrach ath-aithris a-rithist.

Source: www.habr.com

Cuir beachd ann