Gweithredu, graddfa: profiad o ddefnyddio profion awtomataidd yn VTB

Mae ein his-adran yn creu piblinellau cwbl awtomatig ar gyfer lansio fersiynau newydd o gymwysiadau i'r amgylchedd cynhyrchu. Wrth gwrs, mae hyn yn gofyn am brofion swyddogaethol awtomataidd. O dan y toriad mae stori am sut, gan ddechrau gyda phrofion un edau ar beiriant lleol, y gwnaethom gyrraedd pwynt rhedeg autotest aml-edau ar Selenoid ar y gweill gydag adroddiad Allure ar dudalennau GitLab ac yn y pen draw cawsom offeryn awtomeiddio cŵl. y gall pobl y dyfodol ddefnyddio timau.

Gweithredu, graddfa: profiad o ddefnyddio profion awtomataidd yn VTB

Ble wnaethon ni ddechrau?

Er mwyn gweithredu awto-brofion a'u hintegreiddio yn yr arfaeth, roedd angen fframwaith awtomeiddio y gellid ei newid yn hyblyg i weddu i'n hanghenion. Yn ddelfrydol, roeddwn i eisiau cael un safon ar gyfer yr injan profi awtomataidd, wedi'i haddasu ar gyfer mewnosod awtobrofion ar y gweill. Ar gyfer gweithredu rydym wedi dewis y technolegau canlynol:

  • Java,
  • Maven,
  • Seleniwm,
  • Ciwcymbr+JUNED 4,
  • Allure,
  • GitLab.

Gweithredu, graddfa: profiad o ddefnyddio profion awtomataidd yn VTB

Pam y set arbennig hon? Java yw un o'r ieithoedd mwyaf poblogaidd ar gyfer profion awtomataidd, ac mae holl aelodau'r tîm yn ei siarad. Seleniwm yw'r ateb amlwg. Roedd ciwcymbr, ymhlith pethau eraill, i fod i gynyddu hyder yng nghanlyniadau profion awtomataidd ar ran adrannau sy'n ymwneud â phrofi â llaw.

Profion edafedd sengl

Er mwyn peidio ag ailddyfeisio'r olwyn, fe wnaethom gymryd datblygiadau o wahanol gadwrfeydd ar GitHub fel sail i'r fframwaith a'u haddasu i ni ein hunain. Fe wnaethon ni greu ystorfa ar gyfer y brif lyfrgell gyda chraidd y fframwaith autotest ac ystorfa gydag enghraifft Aur o weithredu awtobrofion ar ein craidd. Roedd yn rhaid i bob tîm gymryd y ddelwedd Aur a datblygu profion ynddi, gan ei haddasu i'w prosiect. Fe wnaethom ddefnyddio GitLab-CI yn y banc, ac fe wnaethom ffurfweddu:

  • rhediadau dyddiol o'r holl brofion awtomatig ysgrifenedig ar gyfer pob prosiect;
  • yn lansio ar y gweill adeiladu.

Ar y dechrau ychydig o brofion oedd, ac fe'u cynhaliwyd mewn un ffrwd. Roedd rhedeg un edau ar y rhedwr Windows GitLab yn gweddu'n dda i ni: roedd y profion yn llwytho'r fainc brawf yn ysgafn iawn ac yn defnyddio bron dim adnoddau.

Dros amser, daeth nifer yr awtobrofion yn fwy a mwy niferus, a buom yn meddwl am eu rhedeg yn gyfochrog, pan ddechreuodd rhediad llawn gymryd tua thair awr. Ymddangosodd problemau eraill hefyd:

  • ni allem wirio bod y profion yn sefydlog;
  • roedd profion a gafodd eu rhedeg sawl gwaith yn olynol ar y peiriant lleol weithiau'n damwain yn CI.

Enghraifft o sefydlu profion awtomatig:

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

 Gweithredu, graddfa: profiad o ddefnyddio profion awtomataidd yn VTB
Enghraifft o adroddiad Allure

 Gweithredu, graddfa: profiad o ddefnyddio profion awtomataidd yn VTB
Llwyth rhedwr yn ystod profion (8 cores, 8 GB RAM, 1 edefyn)
 
Manteision profion un edau:

  • hawdd i'w sefydlu a'i redeg;
  • nid yw lansiadau yn CI bron yn wahanol i lansiadau lleol;
  • nid yw profion yn effeithio ar ei gilydd;
  • gofynion lleiaf ar gyfer adnoddau rhedwyr.

Anfanteision profion un edau:

  • cymryd amser hir iawn i'w gwblhau;
  • sefydlogi profion yn hir;
  • defnydd aneffeithlon o adnoddau rhedwr, defnydd isel iawn.

Profion ar ffyrc JVM

Gan na wnaethom ofalu am god edau-diogel wrth weithredu'r fframwaith sylfaen, y ffordd fwyaf amlwg i redeg ochr yn ochr oedd ciwcymbr-jvm-cyfochrog-plug am Maven. Mae'r ategyn yn hawdd i'w ffurfweddu, ond ar gyfer gweithrediad cyfochrog cywir, mae'n rhaid cynnal profion awtomatig mewn porwyr ar wahân. Nid oes dim i'w wneud, roedd yn rhaid i mi ddefnyddio Selenoid.

Lansiwyd y gweinydd Selenoid ar beiriant gyda 32 cores a 24 GB o RAM. Gosodwyd y terfyn ar 48 o borwyr - 1,5 edafedd y craidd a thua 400 MB o RAM. O ganlyniad, gostyngwyd amser y prawf o dair awr i 40 munud. Fe wnaeth cyflymu’r rhediadau helpu i ddatrys y broblem sefydlogi: nawr gallem redeg awtobrofion newydd yn gyflym 20-30 o weithiau nes ein bod yn siŵr eu bod yn rhedeg yn ddibynadwy.
Anfantais gyntaf yr ateb oedd y defnydd uchel o adnoddau rhedwr gyda nifer fach o edafedd cyfochrog: ar 4 craidd ac 8 GB o RAM, rhedodd y profion yn sefydlog mewn dim mwy na 6 edafedd. Yr ail anfantais: mae'r ategyn yn cynhyrchu dosbarthiadau rhedwr ar gyfer pob senario, ni waeth faint ohonynt sy'n cael eu lansio.

Pwysig! Peidiwch â throsglwyddo newidyn gyda thagiau iddo argLine, er enghraifft, fel hyn:

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

Os byddwch chi'n pasio'r tag yn y modd hwn, bydd yr ategyn yn cynhyrchu rhedwyr ar gyfer pob prawf, hynny yw, bydd yn ceisio rhedeg yr holl brofion, gan eu hepgor yn syth ar ôl eu lansio a chreu llawer o ffyrc JVM.

Mae'n gywir taflu newidyn gyda thag i mewn iddo tagiau yn y gosodiadau ategyn, gweler yr enghraifft isod. Mae dulliau eraill a brofwyd gennym yn cael problemau wrth gysylltu'r ategyn Allure.

Enghraifft o amser rhedeg ar gyfer 6 phrawf byr gyda gosodiadau anghywir:

[INFO] Total time: 03:17 min

Enghraifft o amser rhedeg prawf os ydych chi'n trosglwyddo'r tag yn uniongyrchol i mvn... –Dcucumber.options:

[INFO] Total time: 44.467 s

Enghraifft o sefydlu profion awtomatig:

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

Gweithredu, graddfa: profiad o ddefnyddio profion awtomataidd yn VTB
Enghraifft o adroddiad Allure (y prawf mwyaf ansefydlog, 4 ailrediad)

Gweithredu, graddfa: profiad o ddefnyddio profion awtomataidd yn VTBLlwyth rhedwr yn ystod profion (8 cores, 8 GB RAM, 12 edafedd)
 
Manteision:

  • setup hawdd - 'ch jyst angen i ychwanegu ategyn;
  • y gallu i berfformio nifer fawr o brofion ar yr un pryd;
  • cyflymu sefydlogi prawf diolch i gam 1. 

Cons:

  • Mae angen OS/cynwysyddion lluosog;
  • defnydd uchel o adnoddau ar gyfer pob fforc;
  • Mae'r ategyn yn hen ffasiwn ac nid yw'n cael ei gefnogi mwyach. 

Sut i oresgyn ansefydlogrwydd 

Nid yw meinciau prawf yn ddelfrydol, yn union fel yr awtobrofion eu hunain. Nid yw'n syndod bod gennym nifer o brofion anffafriol. Daeth i'r adwy ategyn maven surefire, sydd allan o'r blwch yn cefnogi ailgychwyn profion a fethwyd. Mae angen i chi ddiweddaru'r fersiwn ategyn i o leiaf 2.21 ac ysgrifennu un llinell gyda nifer yr ailgychwyniadau yn y ffeil pom neu ei drosglwyddo fel dadl i Maven.

Enghraifft o sefydlu profion awtomatig:

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

Neu wrth gychwyn: mvn … -Dsurefire.rerunFailingTestsCount=2 …
Fel opsiwn, gosodwch opsiynau Maven ar gyfer y sgript PowerShell (PS1):

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

Manteision:

  • dim angen gwastraffu amser yn dadansoddi prawf ansefydlog pan fydd yn damwain;
  • gellir lliniaru problemau sefydlogrwydd mainc prawf.

Cons:

  • gellir colli diffygion arnofio;
  • amser rhedeg yn cynyddu.

Profion cyfochrog â llyfrgell Cucumber 4

Tyfodd nifer y profion bob dydd. Fe wnaethon ni feddwl eto am gyflymu'r rhediadau. Yn ogystal, roeddwn i eisiau integreiddio cymaint o brofion â phosibl i'r biblinell cydosod ceisiadau. Y ffactor hollbwysig oedd bod y genhedlaeth o redwyr wedi cymryd gormod o amser wrth redeg ochr yn ochr gan ddefnyddio ategyn Maven.

Ar y pryd, roedd Cucumber 4 eisoes wedi'i ryddhau, felly penderfynasom ailysgrifennu'r cnewyllyn ar gyfer y fersiwn hon. Yn y nodiadau rhyddhau cawsom addewid am lansiad cyfochrog ar lefel yr edefyn. Yn ddamcaniaethol, dylai hyn fod wedi bod yn:

  • cyflymu'r broses o redeg autotests yn sylweddol trwy gynyddu nifer yr edafedd;
  • dileu colli amser ar gynhyrchu rhedwyr ar gyfer pob autotest.

Nid oedd hi mor anodd optimeiddio'r fframwaith ar gyfer awtobrofion aml-edau. Mae Ciwcymbr 4 yn rhedeg pob prawf unigol ar edefyn pwrpasol o'r dechrau i'r diwedd, felly troswyd rhai pethau sefydlog cyffredin yn newidynnau ThreadLocal. 
Y prif beth wrth drosi gan ddefnyddio offer ailffactorio Syniad yw gwirio'r mannau lle cymharwyd y newidyn (er enghraifft, gwirio am null). Yn ogystal, mae angen i chi ychwanegu'r ategyn Allure at anodiad dosbarth Junit Runner.

Enghraifft o sefydlu profion awtomatig:

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

Gweithredu, graddfa: profiad o ddefnyddio profion awtomataidd yn VTBEnghraifft o adroddiad Allure (y prawf mwyaf ansefydlog, 5 ailrediad)

Gweithredu, graddfa: profiad o ddefnyddio profion awtomataidd yn VTBLlwyth rhedwr yn ystod profion (8 cores, 8 GB RAM, 24 edafedd)

Manteision:

  • defnydd isel o adnoddau;
  • cefnogaeth frodorol o Cucumber - dim angen offer ychwanegol;
  • y gallu i redeg mwy na 6 edafedd fesul craidd prosesydd.

Cons:

  • mae angen i chi sicrhau bod y cod yn cefnogi gweithredu aml-edau;
  • mae'r trothwy mynediad yn cynyddu.

Adroddiadau Allure ar dudalennau GitLab

Ar ôl cyflwyno gweithredu aml-edau, fe ddechreuon ni dreulio llawer mwy o amser yn dadansoddi adroddiadau. Bryd hynny, roedd yn rhaid i ni uwchlwytho pob adroddiad fel arteffact i GitLab, yna ei lawrlwytho a'i ddadbacio. Nid yw'n gyfleus iawn ac mae'n cymryd amser hir. Ac os yw rhywun arall eisiau gweld yr adroddiad drosto'i hun, yna bydd angen iddyn nhw wneud yr un gweithrediadau. Roeddem am dderbyn adborth yn gyflymach, a daethom o hyd i ateb - tudalennau GitLab. Mae hon yn nodwedd adeiledig sydd ar gael allan o'r bocs ym mhob fersiwn diweddar o GitLab. Yn caniatáu ichi ddefnyddio gwefannau sefydlog ar eich gweinydd a chael mynediad atynt trwy ddolen uniongyrchol.

Cymerwyd holl sgrinluniau o adroddiadau Allure ar dudalennau GitLab. Sgript ar gyfer defnyddio'r adroddiad i dudalennau GitLab - yn Windows PowerShell (cyn hyn mae angen i chi redeg profion awtomatig):

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

Beth yw'r canlyniad 

Felly, os oeddech chi'n meddwl a oes angen cod diogel Thread arnoch chi yn y fframwaith awtotest Cucumber, nawr mae'r ateb yn amlwg - gyda Cucumber 4 mae'n hawdd ei weithredu, a thrwy hynny gynyddu'n sylweddol nifer yr edafedd a lansiwyd ar yr un pryd. Gyda'r dull hwn o redeg profion, daw'r cwestiwn yn awr am berfformiad y peiriant gyda Selenoid a'r fainc brawf.

Mae ymarfer wedi dangos bod rhedeg profion awtomatig ar edafedd yn caniatáu ichi leihau'r defnydd o adnoddau i'r lleiafswm gyda'r perfformiad gorau. Fel y gwelir o'r graffiau, nid yw dyblu edafedd yn arwain at gyflymiad tebyg mewn profion perfformiad. Fodd bynnag, roeddem yn gallu ychwanegu mwy na 2 o brofion awtomataidd i'r broses o adeiladu'r cais, sydd hyd yn oed gyda 200 ail-rediad yn rhedeg mewn tua 5 munud. Mae hyn yn caniatáu ichi dderbyn adborth cyflym ganddynt, ac, os oes angen, gwneud newidiadau ac ailadrodd y weithdrefn eto.

Ffynhonnell: hab.com

Ychwanegu sylw