O la matou vaega e fa'atupuina paipa otometi atoatoa mo le fa'alauiloaina o lomiga fou o talosaga i totonu o le siosiomaga gaosiga. Ioe, o lenei mea e manaʻomia ai suʻega faʻaogaina otometi. I lalo ifo o le tipi o se tala e uiga i le faʻafefea, amata i suʻega tasi-filo i luga o se masini faʻapitonuʻu, na matou oʻo atu i le tulaga o le tele-threaded autotest o loʻo tamoʻe i luga o Selenoid i le paipa faufale ma se lipoti Allure i itulau GitLab ma iu ai ina maua se meafaigaluega masini masini. e mafai e tagata i le lumanaʻi ona faʻaogaina 'au.
O fea na tatou amata ai?
Ina ia fa'atinoina su'ega ta'avale ma tu'ufa'atasia i totonu o le paipa, matou te mana'omia se auivi otometi e mafai ona suia fa'alelei e fetaui ma o matou mana'oga. O le mea lelei, na ou manaʻo e maua se tulaga e tasi mo le afi suʻesuʻe, faʻafetaui mo le faʻapipiʻiina o autotests i totonu o le paipa. Mo le faʻatinoga na matou filifilia tekinolosi nei:
- iava,
- Maven,
- Seleni,
- Kukama+IUNI 4,
- faatosina,
- Gitapu.
Aisea ua faia ai lenei seti faapitoa? Java o se tasi o gagana sili ona lauiloa mo suʻega faʻapitoa, ma e tautala uma tagata o le 'au. Seleni o le fofo manino. Kukama, faʻatasi ai ma isi mea, sa tatau ona faʻateleina le mautinoa i taunuʻuga o suʻega otometi i le vaega a matagaluega o loʻo aʻafia i suʻega tusi.
Su'ega filo tasi
Ina ia aua le toe faʻafouina le uili, matou te ave atinaʻe mai faleoloa eseese i luga o GitHub e fai ma faʻavae mo le faʻavae ma fetuunai mo i matou lava. Na matou faia se fale teu oloa mo le faletusi autu ma le autu o le autotest framework ma se faleteuoloa ma se faʻataʻitaʻiga Auro o le faʻatinoina o suʻesuʻega i luga o la matou autu. E tatau ona ave e 'au ta'itasi le ata Auro ma faia ni su'ega i totonu, fa'afetaui i la latou poloketi. Na matou tuʻuina atu i le GitLab-CI bank, lea na matou faʻatulagaina:
- fa'ata'ita'iga i aso ta'itasi o su'ega tusitusia uma mo poloketi ta'itasi;
- fa'alauiloa i totonu o le paipa faufale.
I le taimi muamua sa i ai ni nai suʻega, ma sa faia i le tasi vaitafe. O loʻo faʻaogaina le filo taʻitasi i luga o le Windows runner GitLab e fetaui lelei mo i matou: o suʻega na faʻapipiʻi mama le nofoa suʻega ma toetoe a leai ni punaoa.
I le aluga o taimi, o le numera o autotests na faʻateleina ma sili atu, ma na matou mafaufau e faʻatautaia i latou i le tutusa, ina ua amata ona alu le taʻavale atoa pe a ma le tolu itula. Na aliali mai foi isi faafitauli:
- sa le mafai ona matou fa'amaonia sa mautu su'ega;
- su'ega na faia i le tele o taimi i le laina i luga o le masini i le lotoifale o nisi taimi na paʻu i CI.
Fa'ata'ita'iga o le fa'atulagaina o su'ega ta'avale:
<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>
Faataitaiga lipoti faatosina
Uta a le tamo'e i taimi o su'ega (8 cores, 8 GB RAM, 1 filo)
Tulaga lelei o su'ega tasi-filo:
- faigofie ona fa'atutu ma tamo'e;
- fa'alauiloa ile CI e toetoe lava a leai se 'ese'esega mai fa'alauiloa fa'apitonu'u;
- o su'ega e le afaina ai le tasi ma le isi;
- mana'oga maualalo mo puna'oa tamo'e.
Le lelei ole su'ega tasi-filo:
- umi se taimi e fa'auma ai;
- fa'amautu umi o su'ega;
- le fa'aogaina lelei o punaoa taufetuli, matua maualalo le fa'aogaina.
Su'ega i tui JVM
Talu ai matou te leʻi tausia le filo-safe code pe a faʻaaogaina le faʻavae faavae, o le auala sili ona manino e tamoe tutusa ai.
O le Selenoid server na faʻalauiloaina i luga o se masini ma 32 cores ma 24 GB o RAM. Ole tapula'a na fa'atulaga ile 48 su'esu'e - 1,5 filo ile autu ma pe a ma le 400 MB ole RAM. O se taunuuga, na faʻaititia le taimi o suʻega mai le tolu itula i le 40 minute. O le faatelevaveina o tamo'e na fesoasoani e foia ai le fa'afitauli fa'amautu: o lea e mafai ona vave fa'atino su'ega ta'avale fou i le 20-30 taimi se'ia matou mautinoa o lo'o tamomoe ma le fa'atuatuaina.
O le toe faʻafoʻi muamua o le fofo o le maualuga o le faʻaogaina o punaoa taʻavale ma se numera laʻititi o filo tutusa: i luga o le 4 cores ma le 8 GB o le RAM, o suʻega na faʻatautaia i le le sili atu i le 6 filo. Le mea le lelei lona lua: o le faʻapipiʻi e faʻatupuina vasega tamoʻe mo faʻataʻitaʻiga taʻitasi, e tusa lava po o le a le tele o latou faʻalauiloa.
Taua! Aua le pasi se fesuiaiga ma pine i argLine, mo se faʻataʻitaʻiga, pei o lenei:
<argLine>-Dcucumber.options="--tags ${TAGS} --plugin io.qameta.allure.cucumber2jvm.AllureCucumber2Jvm --plugin pretty"</argLine>
…
Mvn –DTAGS="@smoke"
Afai e te pasia le tag i lenei auala, o le a faʻatupuina e le plugin tagata tamoʻe mo suʻega uma, o lona uiga, o le a taumafai e faʻataʻitaʻi uma suʻega, faaseʻe vave pe a uma ona faʻalauiloa ma fatuina le tele o tui JVM.
E sa'o le togi o se fesuiaiga ma se pine i totonu pine i le faʻapipiʻi faʻapipiʻi, vaʻai faʻataʻitaʻiga i lalo. O isi metotia na matou suʻeina e iai faʻafitauli e fesoʻotaʻi ai le plugin Allure.
Fa'ata'ita'iga o le taimi fa'atino mo su'ega pu'upu'u 6 ma fa'atonuga le sa'o:
[INFO] Total time: 03:17 min
Fa'ata'ita'iga ole taimi ole su'ega pe a e tu'u sa'o le pine ile mvn... –Dcucumber.options:
[INFO] Total time: 44.467 s
Fa'ata'ita'iga o le fa'atulagaina o su'ega ta'avale:
<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>
Fa'ata'ita'iga o se lipoti Allure (le su'ega sili ona le mautu, 4 toe ta'avale)
O le uta o le tamo'e i taimi o su'ega (8 cores, 8 GB RAM, 12 filo)
Pros:
- faigofie seti - e tatau ona e faʻaopoopoina se faʻapipiʻi;
- le mafai ona faia i le taimi e tasi le tele o suʻega;
- fa'avavevave o le fa'amautuina o su'ega fa'afetai ile Laasaga 1.
Cons:
- Ole tele ole OS/containers e mana'omia;
- maualuga le faaaogaina o punaoa mo tui taitasi;
- O le plugin ua tuai ma ua le toe lagolagoina.
Auala e foia ai le le mautu
E le lelei nofoa fa'ata'ita'i, e pei lava o su'ega ta'avale. E le o se mea e ofo ai le tele o a matou suʻega vaivai. Sau e laveai
Fa'ata'ita'iga o le fa'atulagaina o su'ega ta'avale:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
….
<rerunFailingTestsCount>2</rerunFailingTestsCount>
….
</configuration>
</plugin>
Po'o le amataga: mvn … -Dsurefire.rerunFailingTestsCount=2 …
O se filifiliga, seti filifiliga Maven mo le PowerShell script (PS1):
Set-Item Env:MAVEN_OPTS "-Dfile.encoding=UTF-8 -Dsurefire.rerunFailingTestsCount=2"
Pros:
- e le mana'omia le fa'aalu o le taimi e iloilo ai se su'ega le mautu pe a pa'u;
- e mafai ona faaitiitia faafitauli mautu nofoa suega.
Cons:
- e mafai ona misia ni faaletonu opeopea;
- faʻateleina taimi taʻavale.
Su'ega tutusa ma le faletusi Kukuma 4
O le numera o suʻega na faʻatupulaia i aso uma. Sa matou toe mafaufau i le faatelevaveina o tamo'e. E le gata i lea, na ou manaʻo e tuʻufaʻatasia le tele o suʻega e mafai i totonu o le pipeline faʻapotopotoga talosaga. O le itu taua o le faʻatupuina o tagata tamoʻe na umi tele pe a faʻagasolo tutusa e faʻaaoga ai le Maven plugin.
I lena taimi, ua uma ona tatala le Kukuka 4, o lea na matou filifili ai e toe tusi le fatu mo lenei lomiga. I fa'asalalauga fa'amatalaga na folafola mai ia i matou e fa'atutusa tutusa i le tulaga filo. I le teori e tatau ona i ai:
- faʻavavevave faʻavave le taʻavaleina o autotests e ala i le faʻateleina o numera o filo;
- aveese le leiloa o le taimi i le fausiaina o tagata tamo'e mo su'ega ta'itasi.
O le fa'amalieina o le fa'ava'a mo su'ega ta'avale e tele filo na fa'aalia e le'i faigata tele. Kukama 4 e fa'atino su'ega ta'itasi i luga o se filo tu'ufa'atasi mai le amataga e o'o i le fa'ai'uga, o lea na fa'aliliuina ai nisi o mea masani masani i suiga o le ThreadLocal.
O le mea autu pe a faʻaliliu faʻaaoga meafaigaluega toe faʻaleleia o manatu o le siakiina o nofoaga na faʻatusatusa ai le fesuiaiga (mo se faʻataʻitaʻiga, siaki mo le null). E le gata i lea, e te manaʻomia le faʻaopoopoina o le Allure plugin i le Junit Runner class annotation.
Fa'ata'ita'iga o le fa'atulagaina o su'ega ta'avale:
<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>
Fa'ata'ita'iga o se lipoti Allure (le su'ega sili ona le mautu, 5 toe ta'avale)
O le uta o le tamo'e i taimi o su'ega (8 cores, 8 GB RAM, 24 filo)
Pros:
- maualalo le fa'aaogaina o punaoa;
- lagolago mai le Kukama - leai ni mea faigaluega fa'aopoopo e mana'omia;
- le mafai ona tamo'e sili atu nai lo 6 filo i le autu processor.
Cons:
- e tatau ona e faʻamautinoa o loʻo lagolagoina e le code le faʻatinoina o le tele o filo;
- fa'atuputeleina le faitoto'a ulufale.
Lipoti fa'alelei ile GitLab itulau
Ina ua uma ona faʻaalia le faʻatinoina o le tele o filo, na amata ona matou faʻaaluina le tele o taimi e iloilo ai lipoti. I lena taimi, e tatau ona matou lafoina lipoti taʻitasi o se mea taua i GitLab, ona laʻu mai lea ma tatala. E le faigofie tele ma e umi se taimi. Ma afai e manaʻo se isi e vaʻai i le lipoti mo ia lava, ona manaʻomia lea ona latou faia ia lava gaioiga. Na matou mananaʻo e maua vave faʻamatalaga, ma matou maua se fofo - GitLab itulau. O se mea faʻapipiʻiina lea e maua i fafo o le atigipusa i lomiga lata mai uma o GitLab. Fa'ataga oe e fa'apipi'i nofoaga fa'amau i luga o lau 'au'aunaga ma maua i latou e ala i se feso'ota'iga sa'o.
O faʻamalama uma o lipoti Allure na ave ile GitLab itulau. Faʻamatalaga mo le faʻapipiʻiina o le lipoti i GitLab itulau - i le Windows PowerShell (aʻo leʻi oʻo i lenei mea e te manaʻomia le taʻavale 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 le a le iʻuga?
O lea la, afai o loʻo e mafaufau pe e te manaʻomia Thread code safe i le Cucumber autotest framework, o lea ua manino le tali - faʻatasi ai ma Kuku 4 e faigofie ona faʻatinoina, ma faʻateleina ai le numera o filo faʻalauiloa i le taimi e tasi. Faatasi ai ma lenei metotia o suʻega suʻega, o le fesili ua avea nei e uiga i le faʻatinoga o le masini ma Selenoid ma le nofoa suʻega.
Fa'ata'ita'i ua fa'aalia o le fa'atinoina o su'esu'ega i luga o filo e mafai ai ona fa'aitiitia le fa'aogaina o puna'oa i se fa'aitiitiga ma le fa'atinoga sili. E pei ona mafai ona vaʻaia mai kalafi, faʻaluaina filo e le oʻo atu i se faʻavavevave tutusa i suʻega faʻatinoga. Ae ui i lea, na mafai ona matou faʻaopoopoina le sili atu ma le 2 suʻega faʻapitoa i le fausiaina o talosaga, lea e oʻo lava i le 200 toe faʻataʻitaʻiina e tamoe ile 5 minute. O lenei mea e mafai ai ona e maua vave faʻamatalaga mai ia i latou, ma, pe a manaʻomia, fai suiga ma toe fai le faiga.
puna: www.habr.com