Cur i bhfeidhm, scála: taithí ar thástálacha uathoibrithe a úsáid ag VTB

Cruthaíonn ár rannóg píblínte go hiomlán uathoibríoch chun leaganacha nua d'fheidhmchláir a sheoladh isteach sa timpeallacht táirgthe. Ar ndóigh, éilíonn sé seo tástálacha feidhmiúla uathoibrithe. Faoi bhun an ghearrtha tá scéal faoi conas, ag tosú le tástáil aon-snáithe ar mheaisín áitiúil, shroicheamar an pointe ina raibh autotest il-snáithithe ag rith ar Selenoid sa phíblíne tógála le tuarascáil Allure ar leathanaigh GitLab agus sa deireadh fuair muid uirlis uathoibrithe fionnuar. gur féidir le daoine amach anseo foirne a úsáid.

Cur i bhfeidhm, scála: taithí ar thástálacha uathoibrithe a úsáid ag VTB

Cár thosaigh muid?

Chun uathtástálacha a chur i bhfeidhm agus chun iad a chomhtháthú sa phíblíne, bhí creat uathoibrithe de dhíth orainn a d'fhéadfaí a athrú go solúbtha chun freastal ar ár riachtanais. Go hidéalach, bhí mé ag iarraidh caighdeán amháin a fháil don inneall tástála uathoibrithe, arna oiriúnú chun uaththástálacha a leabú sa phíblíne. Le cur i bhfeidhm roghnaigh muid na teicneolaíochtaí seo a leanas:

  • Java,
  • Maighean,
  • seiléiniam,
  • Cucumber+JUNIT 4,
  • Allure,
  • GitLab.

Cur i bhfeidhm, scála: taithí ar thástálacha uathoibrithe a úsáid ag VTB

Cén fáth an tacar áirithe seo? Tá Java ar cheann de na teangacha is coitianta le haghaidh tástálacha uathoibrithe, agus labhraíonn gach ball foirne é. Is é seiléiniam an réiteach soiléir. Bhí an cúcamar, i measc rudaí eile, ceaptha chun muinín a mhéadú i dtorthaí tástálacha uathoibrithe ag ranna a bhfuil baint acu le tástáil láimhe.

Tástálacha snáithithe aonair

Chun nach bhféadfaí an roth a athchruthú, ghlacamar forbairtí ó stórtha éagsúla ar GitHub mar bhunús don chreat agus chuireamar in oiriúint dúinn féin iad. Chruthaíomar stór don phríomhleabharlann le croílár chreat na n-uaththástálacha agus stór le sampla Óir d’uaththástálacha a chur i bhfeidhm ar ár gcroílár. Bhí ar gach foireann an íomhá Óir a thógáil agus tástálacha a fhorbairt ann, agus é a oiriúnú dá dtionscadal. Rinneamar é a imscaradh chuig an mbanc GitLab-CI, ar a ndearnamar cumraíocht:

  • rith laethúil na n-uaththástálacha scríofa go léir do gach tionscadal;
  • запуски в пайплайне сборки.

Ar dtús ní raibh mórán tástálacha ann, agus rinneadh iad in aon sruth amháin. D’oirigh rith aon-snáithe ar an rádala Windows GitLab go maith dúinn: rinne na tástálacha lódáil an-éadrom ar an mbinse tástála agus níor úsáideadh beagnach aon acmhainní.

Le himeacht ama, tháinig méadú ar líon na n-uaththástálacha níos mó agus níos mó, agus smaoiníomar ar iad a rith ag an am céanna, nuair a thosaigh reáchtáil iomlán thart ar thrí uair an chloig. Tháinig fadhbanna eile le fios freisin:

  • níorbh fhéidir linn a fhíorú go raibh na tástálacha cobhsaí;
  • тесты, которые проходили по несколько прогонов подряд на локальной машине, иногда падали в CI.

Sampla de uaththástálacha a shocrú:

<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 i bhfeidhm, scála: taithí ar thástálacha uathoibrithe a úsáid ag VTB
Sampla tuarascáil allure

 Cur i bhfeidhm, scála: taithí ar thástálacha uathoibrithe a úsáid ag VTB
Нагрузка на раннер во время тестов (8 ядер, 8 ГБ ОЗУ, 1 поток)
 
Buntáistí tástálacha aon-snáithe:

  • éasca a chur ar bun agus a reáchtáil;
  • ní bhíonn mórán difríochta idir seoltaí CI agus seoltaí áitiúla;
  • ní dhéanann tástálacha difear dá chéile;
  • минимальные требования к ресурсам раннера.

Míbhuntáistí a bhaineann le tástálacha aon-snáithe:

  • a chur i gcrích an-fhada;
  • cobhsú fada ar thástálacha;
  • úsáid neamhéifeachtach acmhainní rádala, úsáid thar a bheith íseal.

Tástálacha ar na forcanna JVM

Ós rud é nár thugamar aire do chód sábháilte snáithe nuair a bhí an bunchreat á chur i bhfeidhm, ba é an bealach is soiléire a rith ag an am céanna cúcamar-jvm-comhthreomhar-breiseán le haghaidh Maven. Is furasta an breiseán a chumrú, ach le haghaidh oibriú comhuaineach i gceart, ní mór uaththástálacha a reáchtáil i mbrabhsálaithe ar leith. Níl aon rud le déanamh, bhí orm Selenoid a úsáid.

Seoladh an freastalaí Selenoid ar mheaisín le 32 cores agus 24 GB RAM. Socraíodh an teorainn ag 48 brabhsálaithe - 1,5 snáithe in aghaidh an chroí agus thart ar 400 MB RAM. Mar thoradh air sin, laghdaíodh an t-am tástála ó thrí uair an chloig go 40 nóiméad. Chabhraigh dlús a chur leis na rití le fadhb an chobhsaithe a réiteach: anois d’fhéadfaimis uathtástálacha nua a rith go tapa 20-30 uair go dtí go mbeimis cinnte gur rith siad go hiontaofa.
Ba é an chéad míbhuntáiste a bhain leis an réiteach ná an úsáid ard a bhaintear as acmhainní rádala le líon beag snáitheanna comhthreomhara: ar 4 chroí agus 8 GB RAM, bhí na tástálacha ar siúl go seasta gan níos mó ná 6 snáithe. An dara míbhuntáiste: gineann an breiseán ranganna rádala do gach cás, is cuma cé mhéad acu a sheoltar.

Tábhachtach! Ná cuir athróg ar a bhfuil clibeanna chuig argLine, например, так:

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

Má éiríonn leat an chlib ar an mbealach seo, ginfidh an breiseán reathaí do gach tástáil, is é sin, déanfaidh sé iarracht na tástálacha go léir a rith, gan bacadh leo díreach tar éis an tseolta agus go leor forcanna JVM a chruthú.

Tá sé ceart athróg le clib a chaitheamh isteach clibeanna sna socruithe breiseán, féach an sampla thíos. Tá fadhbanna ag modhanna eile a ndearnamar tástáil orthu leis an mbreiseán Allure a nascadh.

Sampla d’am reatha le haghaidh 6 thástáil ghearra le socruithe míchearta:

[INFO] Total time: 03:17 min

Sampla d’am rite tástála má aistríonn tú an chlib go díreach chuig mvn... –Dcucumber.roghanna:

[INFO] Total time: 44.467 s

Sampla de uaththástálacha a shocrú:

<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 i bhfeidhm, scála: taithí ar thástálacha uathoibrithe a úsáid ag VTB
Sampla de thuairisc Allure (an tástáil is éagobhsaí, 4 athrith)

Cur i bhfeidhm, scála: taithí ar thástálacha uathoibrithe a úsáid ag VTBНагрузка раннера во время тестов (8 ядер, 8 ГБ ОЗУ, 12 потоков)
 
Son:

  • socrú éasca - ní gá duit ach breiseán a chur leis;
  • an cumas líon mór tástálacha a dhéanamh ag an am céanna;
  • luasghéarú ar chobhsú tástála a bhuíochas do chéim 1. 

CONS:

  • Il-OS/coimeádáin ag teastáil;
  • tomhaltas ard acmhainní do gach forc;
  • Tá an breiseán as dáta agus ní thacaítear leis a thuilleadh. 

Conas éagobhsaíocht a shárú 

Тестовые стенды не идеальны, как и сами автотесты. Неудивительно, что у нас появилось некоторое количество flacky-тестов. На помощь пришел Breiseán maven surefire, который из коробки поддерживает перезапуск упавших тестов. Нужно обновить версию плагина минимум до 2.21 и написать одну строчку с количеством перезапусков в pom-файле или передать в качестве аргумента для Maven.

Sampla de uaththástálacha a shocrú:

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

Nó ag am tosaithe: mvn … -Dsurefire.rerunFailingTestsCount=2 …
Mar rogha, socraigh roghanna Maven don script PowerShell (PS1):

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

Son:

  • ní gá am a chur amú ag déanamh anailíse ar thástáil éagobhsaí nuair a bhuaileann sé;
  • is féidir fadhbanna cobhsaíochta binse tástála a mhaolú.

CONS:

  • is féidir lochtanna snámh a chur amú;
  • méaduithe am reáchtáil.

Tástálacha comhthreomhara leis an leabharlann Cucumber 4

Tháinig méadú ar líon na dtástálacha gach lá. Shíleamar arís faoi na ritheanna a bhrostú. Ina theannta sin, bhí mé ag iarraidh an oiread tástálacha agus is féidir a chomhtháthú sa phíblíne tionóil iarratais. Ba é an fachtóir ríthábhachtach ná gur ghlac giniúint reathaithe ró-fhada agus iad ag rith go comhthreomhar ag baint úsáide as breiseán Maven.

Ag an am sin, bhí Cucumber 4 scaoilte cheana féin, agus mar sin shocraigh muid an eithne a athscríobh don leagan seo. Sna nótaí scaoilte gealladh dúinn seoladh comhthreomhar ag an leibhéal snáithe. Go teoiriciúil ba chóir go mbeadh:

  • значительно ускорить прогон автотестов за счет увеличения количества потоков;
  • deireadh a chur le caillteanas ama ar reathaithe a ghiniúint do gach uathtástáil.

Ní raibh sé chomh deacair an creat d’uaththástálacha il-snáithithe a bharrfheabhsú. Ritheann Cucumber 4 gach tástáil aonair ar snáithe tiomnaithe ó thús go deireadh, agus mar sin rinneadh roinnt rudaí statacha coitianta a thiontú go hathróga ThreadLocal. 
Is é an rud is mó nuair a bhíonn tú ag athrú ag baint úsáide as uirlisí athfhachtóirithe Smaointe ná seiceáil na háiteanna ina ndearnadh an athróg i gcomparáid (mar shampla, seiceáil le haghaidh null). Ina theannta sin, ní mór duit an breiseán Allure a chur leis an nóta ranga Junit Runner.

Sampla de uaththástálacha a shocrú:

 
<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 i bhfeidhm, scála: taithí ar thástálacha uathoibrithe a úsáid ag VTBSampla de thuairisc Allure (an tástáil is éagobhsaí, 5 athrith)

Cur i bhfeidhm, scála: taithí ar thástálacha uathoibrithe a úsáid ag VTBLód an rádala le linn tástálacha (8 gcroíthe, 8 GB RAM, 24 snáithe)

Son:

  • tomhaltas íseal acmhainní;
  • tacaíocht dúchais ó Chucumber - níl aon uirlisí breise ag teastáil;
  • возможность запуска более 6 потоков на ядро процессора.

CONS:

  • нужно следить за тем, чтобы код поддерживал многопоточное выполнение;
  • méadaítear an tairseach iontrála.

Tuairiscíonn Allure ar leathanaigh GitLab

Tar éis forghníomhú il-snáithithe a thabhairt isteach, thosaigh muid ag caitheamh i bhfad níos mó ama ag déanamh anailíse ar thuarascálacha. Ag an am sin, bhí orainn gach tuairisc a uaslódáil mar dhéantán chuig GitLab, ansin é a íoslódáil agus a dhíphacáil. Níl sé an-áisiúil agus tógann sé ar feadh i bhfad. Agus más mian le duine eile an tuarascáil a fheiceáil dóibh féin, beidh orthu na hoibríochtaí céanna a dhéanamh. Theastaigh uainn aiseolas a fháil níos tapúla, agus fuaireamar réiteach - leathanaigh GitLab. Is gné ionsuite é seo atá ar fáil as an mbosca i ngach leagan le déanaí de GitLab. Ligeann sé duit suíomhanna statacha a imscaradh ar do fhreastalaí agus rochtain a fháil orthu trí nasc díreach.

Tógadh gach gabháil scáileáin de thuarascálacha Allure ar leathanaigh GitLab. Script chun an tuarascáil a imscaradh chuig leathanaigh GitLab - i Windows PowerShell (roimh seo ní mór duit uaththástálacha a rith):

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

Leis an toradh go 

Mar sin, má bhí tú ag smaoineamh an bhfuil cód sábháilte Snáithe ag teastáil uait i gcreat uathtástála Cúcamar, tá an freagra soiléir anois - le Cucumber 4 tá sé éasca é a chur i bhfeidhm, agus mar sin méadú suntasach ar líon na snáitheanna a seoladh ag an am céanna. Leis an modh seo chun tástálacha a rith, tagann an cheist anois faoi fheidhmíocht an mheaisín le Selenoid agus an binse tástála.

Практика показала, что запуск автотестов на тредах позволяет свести расход ресурсов к минимуму при наилучшей производительности. Как видно из графиков, увеличение потоков в 2 раза не приводит к аналогичному ускорению прохождения тестов производительности. Тем не менее мы смогли добавить в сборку приложения более 200 автоматических тестов, которые даже с 5 реранами выполняются примерно за 24 минуты. Это позволяет получать от них быстрый фидбэк, а при необходимости — вносить правки и повторять процедуру снова.

Foinse: will.com

Add a comment