Aiwatar, ma'auni: ƙwarewar amfani da gwaje-gwaje na atomatik a VTB

Rukunin mu yana ƙirƙirar bututun atomatik don ƙaddamar da sabbin nau'ikan aikace-aikace cikin yanayin samarwa. Tabbas, wannan yana buƙatar gwaje-gwajen aiki na atomatik. A ƙasa da yanke labarin ne game da yadda, farawa da gwajin zaren guda ɗaya akan injin gida, mun kai madaidaicin autotest mai zaren da yawa da ke gudana akan Selenoid a cikin bututun ginin tare da rahoton Allure akan shafukan GitLab kuma a ƙarshe mun sami kayan aikin sarrafa kansa mai sanyi. cewa mutane na gaba za su iya amfani da ƙungiyoyi.

Aiwatar, ma'auni: ƙwarewar amfani da gwaje-gwaje na atomatik a VTB

A ina muka fara?

Don aiwatar da gwaje-gwaje na atomatik da haɗa su cikin bututun, muna buƙatar tsarin sarrafa kansa wanda za'a iya canzawa cikin sauƙi don dacewa da bukatunmu. Da kyau, Ina so in sami ma'auni guda ɗaya don injin gwadawa, wanda aka daidaita don shigar da autotest a cikin bututun. Don aiwatarwa mun zaɓi fasaha masu zuwa:

  • Java,
  • Maven,
  • Selenium,
  • Cucumber+JUNIT 4,
  • Lalacewa,
  • GitLab.

Aiwatar, ma'auni: ƙwarewar amfani da gwaje-gwaje na atomatik a VTB

Me yasa wannan saitin na musamman? Java yana ɗaya daga cikin shahararrun yarukan don gwaje-gwaje na atomatik, kuma duk membobin ƙungiyar suna magana da shi. Selenium shine mafita a bayyane. Cucumber, a tsakanin sauran abubuwa, ya kamata ya ƙara amincewa da sakamakon gwaje-gwaje na atomatik a ɓangaren sassan da ke cikin gwajin hannu.

Gwaje-gwajen zaren guda ɗaya

Don kada mu sake haɓaka dabaran, mun ɗauki abubuwan haɓakawa daga ɗakunan ajiya daban-daban akan GitHub azaman tushen tsarin kuma mun daidaita su don kanmu. Mun ƙirƙiri ma'ajiya don babban ɗakin karatu tare da ainihin tsarin ƙirar autotest da wurin ajiya tare da misalin Zinare na aiwatar da autotests akan ainihin mu. Dole ne kowace ƙungiya ta ɗauki hoton Zinariya kuma ta haɓaka gwaje-gwaje a cikinta, ta daidaita shi da aikin su. Mun tura shi zuwa bankin GitLab-CI, wanda muka tsara:

  • ayyukan yau da kullun na duk rubuce-rubucen autotest don kowane aikin;
  • ƙaddamar da bututun ginawa.

Da farko an yi ƴan gwaje-gwaje, kuma an yi su a rafi ɗaya. Gudun zaren guda ɗaya akan GitLab Windows mai gudu ya dace da mu sosai: gwaje-gwajen sun ɗora nauyin bencin gwajin da sauƙi kuma kusan babu albarkatu.

A tsawon lokaci, adadin autotest ya ƙara yawa, kuma muna tunanin gudanar da su a layi daya, lokacin da cikakken gudu ya fara ɗaukar kimanin sa'o'i uku. Wasu matsaloli kuma sun bayyana:

  • ba za mu iya tabbatar da cewa gwaje-gwajen sun tabbata ba;
  • gwaje-gwajen da aka yi sau da yawa a jere akan na'uran gida wani lokaci suna yin karo a CI.

Misalin kafa autotests:

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

 Aiwatar, ma'auni: ƙwarewar amfani da gwaje-gwaje na atomatik a VTB
Misalin bayyanar cututtuka

 Aiwatar, ma'auni: ƙwarewar amfani da gwaje-gwaje na atomatik a VTB
Nauyin mai gudu yayin gwaje-gwaje (Cores 8, 8 GB RAM, 1 zaren)
 
Ribobi na gwaje-gwaje masu zare guda ɗaya:

  • sauƙi don saitawa da gudu;
  • ƙaddamarwa a cikin CI kusan ba su da bambanci da ƙaddamar da gida;
  • gwaje-gwaje ba sa shafar juna;
  • mafi ƙarancin buƙatun don albarkatun mai gudu.

Lalacewar gwaje-gwaje masu zare guda ɗaya:

  • ɗauki lokaci mai tsawo don kammalawa;
  • dogon kwanciyar hankali na gwaje-gwaje;
  • rashin ingantaccen amfani da albarkatun mai gudu, rashin amfani sosai.

Gwaji akan cokulan JVM

Tun da ba mu kula da lambar amintaccen zaren ba yayin aiwatar da tsarin tushe, mafi bayyananniyar hanyar yin aiki a layi daya ita ce. kokwamba-jvm-parallel-plugin za Maven. plugin ɗin yana da sauƙi don daidaitawa, amma don daidaitaccen aiki na layi ɗaya, dole ne a gudanar da gwaje-gwaje na auto a cikin mazuruftar daban-daban. Babu wani abu da za a yi, dole ne in yi amfani da Selenoid.

An ƙaddamar da uwar garken Selenoid akan na'ura mai nauyin 32 da 24 GB na RAM. An saita iyaka a masu bincike 48 - zaren 1,5 a kowace cibiya da kusan 400 MB na RAM. Sakamakon haka, an rage lokacin gwajin daga sa'o'i uku zuwa minti 40. Ƙaddamar da gudu ya taimaka wajen magance matsalar daidaitawa: yanzu za mu iya hanzarta gudanar da sababbin gwaje-gwaje na atomatik sau 20-30 har sai mun tabbatar da cewa sun yi gudu cikin aminci.
Sakamakon farko na maganin shine babban amfani da albarkatun mai gudu tare da ƙananan zaren layi ɗaya: akan nau'ikan 4 da 8 GB na RAM, gwaje-gwajen sun yi aiki da ƙarfi a cikin zaren da bai wuce 6 ba. Rashin hasara na biyu: plugin ɗin yana haifar da azuzuwan masu gudu don kowane yanayi, komai nawa aka ƙaddamar da su.

Muhimmin! Kar a wuce ma'auni tare da alamu zuwa argLine, misali, kamar haka:

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

Idan kun wuce alamar ta wannan hanyar, plugin ɗin zai haifar da masu gudu don duk gwaje-gwaje, wato, zai yi ƙoƙarin gudanar da duk gwaje-gwaje, tsallake su nan da nan bayan ƙaddamarwa kuma ya ƙirƙira da yawa JVM cokula.

Daidai ne a jefa ma'auni tare da alama a ciki tags a cikin saitunan plugin, duba misali a ƙasa. Sauran hanyoyin da muka gwada suna da matsalolin haɗa plugin ɗin Allure.

Misalin lokacin gudu don gajerun gwaje-gwaje 6 tare da saitunan da ba daidai ba:

[INFO] Total time: 03:17 min

Misalin lokacin gudu na gwaji idan kun canja wurin alamar kai tsaye zuwa mvn... -Cucumber.zaɓi:

[INFO] Total time: 44.467 s

Misalin kafa autotests:

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

Aiwatar, ma'auni: ƙwarewar amfani da gwaje-gwaje na atomatik a VTB
Misalin rahoton Allure (gwajin mafi rashin kwanciyar hankali, sake farawa 4)

Aiwatar, ma'auni: ƙwarewar amfani da gwaje-gwaje na atomatik a VTBNauyin mai gudu yayin gwaje-gwaje (Cores 8, 8 GB RAM, zaren 12)
 
Sakamakon:

  • sauƙi saitin - kawai kuna buƙatar ƙara plugin;
  • da ikon yin babban adadin gwaje-gwaje a lokaci guda;
  • hanzarta daidaita gwajin godiya ga mataki na 1. 

Fursunoni:

  • Ana buƙatar OS / kwantena da yawa;
  • yawan amfani da albarkatu ga kowane cokali mai yatsa;
  • Plugin ya tsufa kuma baya samun tallafi. 

Yadda za a shawo kan rashin zaman lafiya 

Gwajin benci ba su dace ba, kamar yadda masu yin gwajin kansu. Ba abin mamaki ba ne cewa muna da gwaje-gwaje masu banƙyama da yawa. Ya zo domin ceto maven surefire plugin, wanda daga cikin akwatin yana goyan bayan sake kunna gwaje-gwajen da ba su yi nasara ba. Kuna buƙatar sabunta sigar plugin ɗin zuwa aƙalla 2.21 kuma rubuta layi ɗaya tare da adadin sake farawa a cikin fayil ɗin pom ko wuce shi azaman hujja ga Maven.

Misalin kafa autotests:

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

Ko a kan farawa: mvn … -Dsurefire.rerunFailingTestsCount=2…
A matsayin zaɓi, saita zaɓuɓɓukan Maven don rubutun PowerShell (PS1):

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

Sakamakon:

  • babu buƙatar ɓata lokaci don nazarin gwajin mara ƙarfi lokacin da ya fado;
  • gwajin benci matsalolin kwanciyar hankali za a iya rage.

Fursunoni:

  • ana iya rasa lahani masu iyo;
  • lokacin gudu yana ƙaruwa.

Daidaita gwaje-gwaje tare da Cucumber 4 library

Yawan gwaje-gwajen ya karu kowace rana. Mun sake tunani game da hanzarta gudu. Bugu da ƙari, Ina so in haɗa gwaje-gwaje da yawa kamar yadda zai yiwu a cikin bututun taron aikace-aikacen. Muhimmin abu shine cewa tsarar masu gudu sun ɗauki tsayi da yawa lokacin da suke gudana a layi daya ta amfani da plugin Maven.

A wancan lokacin, an riga an saki Cucumber 4, don haka mun yanke shawarar sake rubuta kernel don wannan sigar. A cikin bayanan sakin an yi mana alkawarin ƙaddamar da layi ɗaya a matakin zaren. A ka'ida ya kamata ya kasance:

  • yana da matuƙar hanzarta gudanar da gwaje-gwaje ta atomatik ta hanyar ƙara yawan zaren;
  • kawar da asarar lokaci akan samar da masu gudu don kowane autotest.

Haɓaka tsarin don gwaje-gwaje masu zare da yawa ya juya baya da wahala sosai. Cucumber 4 yana gudanar da gwajin kowane mutum akan zaren da aka keɓe daga farkon zuwa ƙarshe, don haka wasu abubuwa na yau da kullun an canza su zuwa ma'auni na ThreadLocal. 
Babban abu lokacin da ake juyawa ta amfani da kayan aikin gyara Idea shine duba wuraren da aka kwatanta ma'anar (misali, duba maras tushe). Bugu da kari, kuna buƙatar ƙara plugin ɗin Allure zuwa bayanin aji Junit Runner.

Misalin kafa autotests:

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

Aiwatar, ma'auni: ƙwarewar amfani da gwaje-gwaje na atomatik a VTBMisalin rahoton Allure (gwajin mafi rashin kwanciyar hankali, sake farawa 5)

Aiwatar, ma'auni: ƙwarewar amfani da gwaje-gwaje na atomatik a VTBNauyin mai gudu yayin gwaje-gwaje (cores 8, 8 GB RAM, zaren 24)

Sakamakon:

  • ƙananan amfani da albarkatu;
  • goyon bayan ɗan ƙasa daga Kokwamba - babu ƙarin kayan aikin da ake buƙata;
  • da ikon gudu fiye da 6 zaren kowane processor core.

Fursunoni:

  • kana buƙatar tabbatar da cewa lambar tana goyan bayan aiwatar da zaren da yawa;
  • ƙofar shiga yana ƙaruwa.

Allure rahotanni akan shafukan GitLab

Bayan gabatar da kisa masu zare da yawa, mun fara ɗaukar lokaci mai yawa muna nazarin rahotanni. A lokacin, dole ne mu loda kowane rahoto azaman kayan tarihi zuwa GitLab, sannan mu zazzage shi kuma mu kwashe shi. Ba shi da dacewa sosai kuma yana ɗaukar lokaci mai tsawo. Kuma idan wani yana so ya kalli rahoton da kansa, to za su buƙaci yin irin wannan ayyuka. Muna son karɓar martani cikin sauri, kuma mun sami mafita - Shafukan GitLab. Wannan sigar ginanni ce wacce ke samuwa daga cikin akwatin a duk nau'ikan GitLab na kwanan nan. Yana ba ku damar tura rukunoni masu tsattsauran ra'ayi akan sabar ku da samun dama gare su ta hanyar haɗin kai kai tsaye.

An dauki duk hotunan hotunan Allure akan shafukan GitLab. Rubutun don tura rahoton zuwa shafukan GitLab - a cikin Windows PowerShell (kafin wannan kuna buƙatar gudanar da gwaje-gwaje na atomatik):

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

Mene ne a karshen 

Don haka, idan kuna tunanin ko kuna buƙatar lambar aminci ta hanyar Cucumber autotest tsarin, yanzu amsar a bayyane take - tare da Cucumber 4 yana da sauƙin aiwatar da shi, ta haka yana haɓaka adadin zaren da aka ƙaddamar lokaci guda. Tare da wannan hanyar gwajin gwagwarmaya, tambayar yanzu ta zama game da aikin injin tare da Selenoid da benci na gwaji.

Ayyuka sun nuna cewa gudanar da gwaje-gwaje na atomatik akan zaren yana ba ku damar rage yawan amfani da albarkatu tare da mafi kyawun aiki. Kamar yadda ake iya gani daga jadawali, zaren ninka biyu baya haifar da irin wannan hanzari a cikin gwaje-gwajen aiki. Koyaya, mun sami damar ƙara gwaje-gwaje na atomatik sama da 2 zuwa ginin aikace-aikacen, wanda ko da sake kunnawa 200 yana gudana cikin kusan mintuna 5. Wannan yana ba ku damar karɓar amsa mai sauri daga gare su, kuma, idan ya cancanta, yi canje-canje kuma sake maimaita hanya.

source: www.habr.com

Add a comment