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.
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.
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>
Sampla tuarascáil allure
Нагрузка на раннер во время тестов (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
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>
Sampla de thuairisc Allure (an tástáil is éagobhsaí, 4 athrith)
Нагрузка раннера во время тестов (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-тестов. На помощь пришел
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>
Sampla de thuairisc Allure (an tástáil is éagobhsaí, 5 athrith)
Ló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