DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.

Osa 1: Veeb / Android

MÀrkus: see artikkel on originaali vene keelde tÔlge «DevOps tools are not only for DevOps. Building test automation infrastructure from scratch». Kuid kÔik illustratsioonid, lingid, tsitaadid ja terminid on sÀilitatud originaalkeeles, et vÀltida tÀhenduse moonutamist vene keelde tÔlkimisel. Soovin teile meeldivat Ôppimist!

DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.

Praegu on DevOps eriala ĂŒks nĂ”utumaid IT-tööstuses. Kui avate populaarsed tööotsingu saidid ja seate palga filtrid, nĂ€ete, et DevOpsiga seotud töökuulutused on nimekirja alguses. Kuid on oluline mĂ”ista, et see kehtib peamiselt 'vanem' positsiooni kohta, mis tĂ€hendab, et kandidaadil on kĂ”rge oskuste tase, teadmised tehnoloogiatest ja tööriistadest. Samuti kaasneb sellega kĂ”rge vastutustunne, mis on seotud tootmise katkematu töö tagamisega. Kuid me oleme hakanud unustama, mis on DevOps. Alguses ei olnud see mingi konkreetne inimene vĂ”i osakond. Kui otsida selle termini definitsioone, leiame palju ilusaid ja Ă”igeid nimisĂ”nu, nagu metodoloogia, praktikad, kultuurifilosoofia, kontseptsioonide kogum jne.

Minu eriala on testimise automatiseerimise insener (QA automation engineer), kuid arvan, et see ei peaks olema seotud ainult automaatsete testide kirjutamise vĂ”i testimise raamistiku arendamisega. 2020. aastal on automatiseerimise infrastruktuuri teadmised samuti vajalikud. See vĂ”imaldab iseseisvalt korraldada automatiseerimisprotsessi, alates testide kĂ€ivitamisest kuni tulemuste edastamiseni kĂ”igile huvitatud osalistele vastavalt seatud eesmĂ€rkidele. SeetĂ”ttu on DevOps'i oskused selle töö teostamiseks kohustuslikud. Ja see kĂ”ik on hea, kuid kahjuks on probleem (spoiler: see artikkel pĂŒĂŒab seda probleemi lihtsustada). See, DevOps is complicated. It's obvious, as companies won't pay a lot for something that's easy to do... In the world of DevOps, there are a lot of tools, terms, and practices to master. This is especially challenging at the beginning of a career and depends on accumulated technical experience.

DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.
Allikas: http://maximelanciauxbi.blogspot.com/2017/04/devops-tools.html

We will probably conclude the introductory part here and focus on the goal of this article. 

What this article is about

In this article, I will share my experience in building an automation testing infrastructure. There are many sources of information online about various tools and how to use them, but I would like to discuss them exclusively in the context of automation. I believe many automation engineers are familiar with the situation where the tests developed are only run by themselves, and no one else cares about their maintenance. As a result, the tests become outdated, requiring time to update them. Again, at the beginning of a career, this can be quite a challenging task: to wisely determine which tools should help solve this problem, how to choose, configure, and maintain them. Some testers turn to DevOps (people) for help, and to be honest, this approach works. In many cases, it may be the only option, as we lack visibility into all dependencies. But, as we know, DevOps are very busy folks, thinking about the entire company's infrastructure, deployment, monitoring, microservices, and other similar tasks depending on the organization/team. As is often the case, automation is not a priority. In such cases, we should try to do everything possible from our side, from start to finish. This will reduce dependencies, speed up workflows, enhance our skills, and allow us to see a broader picture of what is happening.

Artiklis tutvustatakse kĂ”ige nĂ”udlikumaid ja populaarsemaid tööriistu ning nĂ€idatakse, kuidas neid kasutada samm-sammult automatiseerimise infrastruktuuri ĂŒlesehitamiseks. Iga grupp on esindatud tööriistadega, mida on katsetatud isikliku kogemuse pĂ”hjal. Kuid see ei tĂ€henda, et te peaksite kasutama sama. Tööriistad ise ei ole olulised, need tulevad ja kaovad. Meie inseneriĂŒlesanne on mĂ”ista pĂ”hialuseid: miks on meil vajalik see tööriistade grupp ja milliseid tĂ¶Ă¶ĂŒlesandeid saame nende abil lahendada. SeetĂ”ttu jĂ€tan iga sektsiooni lĂ”pus viidatud sarnastele tööriistadele, mida teie organisatsioonis vĂ”ib-olla kasutatakse.

Mida artiklis ei ole

Kordan, et artikkel ei rÀÀgi konkreetsetest tööriistadest, seega ei tule siia koodilÔike dokumentatsioonist ja konkreetsete kÀskude kirjeldusi. Kuid iga sektsiooni lÔpus jÀtan viidatud pÔhjalikule uurimisele.

See on tehtud pÔhjusel, et: 

  • see materjal on vĂ€ga kergesti leitav erinevates allikates (dokumendid, raamatud, videokursused);
  • kui hakkame sĂŒvenema, siis tuleb kirjutada 10, 20, 30 osa sellest artiklist (samal ajal on plaanis 2-3);
  • ma lihtsalt ei soovi teie aega raisata, kuna vĂ”ib-olla soovite kasutada teisi tööriistu samade eesmĂ€rkide saavutamiseks.

Praktika

Sooviksin vÀga, et see materjal oleks kasulik igale lugejale, mitte lihtsalt loetuks ja unustatuks. Igas Ôppimises on praktika vÀga oluline komponent. Selleks olen ette valmistanud GitHubi hoidla samm-sammult juhendiga, kuidas kÔik nullist valmis teha. Teid ootab ka kodutöö, et olla kindel, et te ei kopeerinud lihtsalt kÀsurea kÀskinud ridu mÔtlemata

Plaani

Samm
Tehnoloogia
Tööriistad

1
Kohalik kÀivitamine (valmista veeb / android demo testid ja kÀita neid kohalikult) 
Node.js, Selenium, Appium

2
VersioonihaldussĂŒsteemid 
Git

3
Konteineriseerimine
Docker, Selenium grid, Selenoid (Veeb, Android)

4
CI / CD
Gitlab CI

5
Pilveplatvormid
Google Cloud Platform

6
Orkestreerimine
Kubernetes

7
Infrastruktuur koodina (IaC)
Terraform, Ansible

Iga sektsiooni struktuur

Et sÀilitada jutustust visuaalsena, on iga sektsioon kirjeldatud jÀrgmise plaani jÀrgi:

  • tehnoloogia lĂŒhikirjeldus,
  • vÀÀrtus automaatimise infrastruktuurile,
  • ilustratsioon praegusest infrastruktuuri seisundist,
  • viidatud Ă”ppimiseks,
  • sarnased tööriistad.

1. Kohalik testide kÀitamine

Tehnoloogia lĂŒhikirjeldus

See on vaid ettevalmistav samm, et kÀivitada demonstreerimistestid kohapeal ja kontrollida, et need Ônnestuvad. Praktikas kasutatakse Node.js, kuid programmitöö keel ja platvorm ei ole olulised; saate kasutada neid, mida teie ettevÔttes kasutatakse. 

Automatiseerimisvahenditena soovitan kasutada Selenium WebDriveri veebiplatvormide jaoks ja Appiumit Android-platvormide jaoks, kuna jÀrgmistes sammudes kasutame Docker-pilte, mis on optimeeritud nende konkreetsete tööriistadega töötamiseks. Veelgi enam, viidates töökuulutuste nÔuetele, on need tööriistad turul kÔige nÔutumad.

Nagu olete tÀhele pannud, kÀsitleme ainult veeb- ja Android-teste. Kahjuks on iOS tÀiesti teine lugu (tÀnu Apple'ile). Plaanin demonstreerida lahendusi ja praktikad, mis on seotud iOS-iga, jÀrgmistes osades.

VÀÀrtus automatiseerimisinfrastruktuurile

Infrastruktuuri vaatenurgast ei too kohaliku kÀivitamise tagamine mingit vÀÀrtust. Te ainult kontrollite, kas testid töötavad kohalikul masinal kohalikes brauserites ja simulaatorites. Kuid see on igal juhul vajalik lÀhtepunkt.

Praeguse infrastruktuuri oleku illustreerimine

DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.

Õppimise lingid

Sarnased tööriistad

  • igany programmikeel, mis teile meeldib, koos Seleniumi/Appiumiga - testide jaoks;
  • mistahes testid;
  • iga testijooksja.

2. VersioonihaldussĂŒsteemid (Git)

Tehnoloogia lĂŒhikirjeldus

Ei ole kellelegi ĂŒllatuseks, kui ĂŒtlen, et versioonihaldussĂŒsteem on ÀÀrmiselt oluline osa töötamisest nii meeskonnas kui ka iseseisvalt. Erinevaid allikaid arvestades vĂ”ime kindlalt öelda, et Git on kĂ”ige populaarsem esindaja. VersioonihaldussĂŒsteem pakub mitmeid eeliseid, nagu koodivahetus, versioonide salvestamine, varasemate harude taastamine, projekti ajaloo jĂ€lgimine ja varukoopiad. Me ei hakka igat punkti ĂŒksikasjalikult arutama, kuna olen kindel, et olete sellega hĂ€sti kursis ja kasutate seda igapĂ€evases töös. Kuid kui te pole, siis soovitan selle artikli lugemise peatada ja see auk kiiresti tĂ€ita.

VÀÀrtus automatiseerimisinfrastruktuurile

Ja siin vĂ”ite esitada pĂ”hjendatud kĂŒsimuse: „Miks ta rÀÀgib meile Git'ist? KĂ”ik teavad ja kasutavad seda nii arendus- kui ka autotestimise koodi jaoks.” Te oleksite tĂ€iesti Ă”iged, kuid selles artiklis rÀÀgime me infrastruktuurist ja see lĂ”ik mĂ€ngib ĂŒlevaate rolli peatĂŒkis 7: „Infrastruktuur kui kood (IaC)”. Meie jaoks tĂ€hendab see, et kogu infrastruktuur, sealhulgas testimis-, kirjeldatakse koodina, seega saame sellele rakendada ka versioonihaldussĂŒsteeme ja saavutada sarnaseid eeliseid nagu arendus- ja automatiseerimiskoodile.

KĂ€sitleme IaC-d ĂŒksikasjalikumalt sammus 7, kuid juba praegu saab alustada Git'i kasutamist kohalikult, luues kohaliku hoidla. Üldine pilt laieneb, kui lisame infrastruktuurile kaughoidla.

Praeguse infrastruktuuri oleku illustreerimine

DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.

Õppimise lingid

Sarnased tööriistad

3. Konteineriseerimine (Docker)

Tehnoloogia lĂŒhikirjeldus

Konteineriseerimise mĂ€ngureeglite muutmise demonstreerimiseks teeme vĂ€ikese ajarĂ€nnaku mitme aastakĂŒmne taha. Tookord ostsid inimesed ja kasutasid serveri masinaid rakenduste kĂ€itamiseks. Kuid enamikul juhtudel ei olnud vajalikud ressursid rakenduse kĂ€itamiseks eelnevalt teada. Selle tulemusena kulutasid ettevĂ”tted raha kallite vĂ”imsate serverite soetamiseks, kuid osa neist ressurssidest jĂ€i tĂ€ielikult kasutamata.

JĂ€rgmine arenguetapp olid virtuaalsed masinad (VM), mis lahendasid rahalise kulu probleemid kasutamata ressursside tĂ”ttu. See tehnoloogia vĂ”imaldas alustada rakenduste kĂ€itamist ĂŒksteisest sĂ”ltumatult ĂŒhe serveri sees, eraldades tĂ€ielikult isoleeritud ruumi. Kuid kahjuks on igal tehnoloogial oma puudused. VM kĂ€itamine nĂ”uab tĂ€ielikku operatsioonisĂŒsteemi, mis kasutab CPU-d, RAM-i, salvestust, ja OS-i, sĂ”ltuvalt peab arvestama litsentsikulu. Need tegurid mĂ”jutavad laadimise kiirus ja muudavad ĂŒleviimise keerulisemaks.

Ja nĂŒĂŒd oleme jĂ”udnud konteineriseerimise juurde. Taas lahendas see tehnoloogia eelneva probleemi, kuna konteinerid ei kasuta tĂ€isoperatsioonisĂŒsteemi, mis vabastab palju ressursse ja pakub kiiret ja paindlikku lahendust ĂŒleviimiseks.

Muidugi, konteineritehnoloogia ei ole midagi uut ja seda tutvustati esmakordselt 70-ndate lĂ”pus. Sel ajal viidi lĂ€bi palju teadusuuringuid, arenguid ja katseid. Kuid just Docker kohandas seda tehnoloogiat ja tegi selle massidele kergesti ligipÀÀsetavaks. TĂ€napĂ€eval, kui rÀÀgime konteineritest, mĂ”tleme enamasti Dockerile. Kui rÀÀgime Docker-konteineritest, mĂ”tleme Linuxi konteineritele. Saame kasutada Windowsi ja macOSi sĂŒsteeme konteinerite kĂ€itamiseks, kuid on oluline mĂ”ista, et sel juhul tekib tĂ€iendav kiht. NĂ€iteks kĂ€ivitab Docker Macis vaikselt konteinerid kerge Linuxi VM-i sees. Tagasi sellele teemele tuleme, kui arutame Androidi emulaatorite kĂ€itamist konteinerite sees, kuna siia tekib ĂŒks vĂ€ga oluline nĂŒanss, mida tuleb pĂ”hjalikumalt uurida.

VÀÀrtus automatiseerimisinfrastruktuurile

Oleme vÀlja selgitanud, et konteineriseerimine ja Docker on suured. Vaatame seda automatiseerimise kontekstis, sest iga tööriist vÔi tehnoloogia peaks lahendama mingi probleemi. MÀrkigem esile ilmsed automatiseerimise testimise probleemid UI-testide kontekstis:

  • suur hulk sĂ”ltuvusi Seleniumi ja eriti Appiumi installimisel;
  • brauserite, simulaatorite ja draiverite versioonide vahelised ĂŒhilduvusprobleemid;
  • puudub isoleeritud ruum brauserite/simulaatorite jaoks, mis on eriti kriitiline paralleelse kĂ€itamise puhul;
  • raske on hallata ja toetada, kui tuleb kĂ€itada 10, 50, 100 vĂ”i isegi 1000 brauserit korraga.

Kuid kuna Selenium on kĂ”ige populaarsem automatiseerimistööriist ja Docker on kĂ”ige populaarsem konteenerite loomise tööriist, siis ei tohiks kedagi ĂŒllatada, et keegi on proovinud neid ĂŒhendada, et saada vĂ”imas tööriist eelpoolmainitud probleemide lahendamiseks. Vaatame selliseid lahendusi lĂ€hemalt. 

Selenium grid dockeris

See tööriist on maailma populaarseim Selenium, et hallata mitut brauserit mitmes masinas keskuselt. KĂ€ivitamiseks on vajalik registreerida vĂ€hemalt 2 osa: Hub ja Node(d). Hub on keskne sĂ”lm, mis saab kĂ”ik testidest tulevad pĂ€ringud ja jaotab need vastavatesse Node’desse. Iga Node jaoks saame seadistada konkreetse konfiguratsiooni, nĂ€iteks mÀÀrates vajaliku brauseri ja selle versiooni. Kuid me peame endiselt ise hoolitsema brauserite ĂŒhilduvate draiverite eest ja installima need vajalikele Node’idele. SellepĂ€rast ei kasutata Selenium grid’i puhtal kujul, vĂ€lja arvatud juhtudel, kui peame töötama brauseritega, mida ei saa installida Linuxi opsĂŒsteemile. KĂ”igil teistel juhtudel on paindlikum ja Ă”igem lahendus kasutada Docker-pilte Selenium grid Hub’i ja Node’ide kĂ€ivitamiseks. See lĂ€henemine lihtsustab oluliselt sĂ”lmede haldamist, kuna saame valida sobiva pildi koos juba installitud ĂŒhilduvate brauserite ja draiveritega.

Hoolimata negatiivsetest arvustustest stabiilsuse osas, eriti kui kĂ€ivitada suurt hulka Node’e paralleelselt, jÀÀb Selenium grid endiselt populaarseimaks tööriistaks Selenium-testide paralleelseks kĂ€ivitamiseks. Oluline on mĂ€rkida, et avatud lĂ€htekoodiga keskkonnas ilmuvad pidevalt erinevad tĂ€iustused ja modifikatsioonid sellele tööriistale, mis aitavad lahendada erinevaid kitsaskohti.

Selenoid for Web

See tööriist on lĂ€bimurre Seleniumi maailmas, kuna see töötab kohe kastist vĂ€lja ja on teinud paljude automatiseerimise inseneride elu oluliselt lihtsamaks. Esiteks, see ei ole jĂ€rjekordne Selenium Grid'i modifikatsioon. Selle asemel on arendajad loonud tĂ€iesti uue versiooni Selenium Hub'ist Go keeles, mis koos kergete Docker-piltidega erinevate brauserite jaoks on andnud hoogu automatiseerimise testimise arengule. Lisaks peame Selenium Grid'i puhul mÀÀratlema kĂ”ik vajalikud brauserid ja nende versioonid eelnevalt, mis ei ole probleem, kui töö toimub ainult ĂŒhe brauseriga. Kuid kui jutt kĂ€ib mitmest toetatavast brauserist, siis Selenoid on number ĂŒks lahendus, tĂ€nu funktsioonile 'brauser nĂ”udmisel'. KĂ”ik, mida meilt nĂ”utakse, on eelnevalt vajalikud pildid brauseritega alla laadida ja vĂ€rskendada Selenoid'i interakteeruvat konfiguratsioonifaili. PĂ€rast seda, kui Selenoid saab testidelt pĂ€ringu, kĂ€ivitab see automaatselt vajaliku konteineri vajaliku brauseriga. Kui test on lĂ”ppenud, lĂ”petab Selenoid konteineri, vabastades seelĂ€bi ressursid jĂ€rgnevateks pĂ€ringuteks. See lĂ€henemine kĂ”rvaldab tĂ€ielikult tuntud 'sĂ”lmdegratsiooni' probleemi, millega me sageli Selenium Grid'is silmitsi seisame.

Kuid kahjuks ei ole Selenoid ikka veel hĂ”bepadrun. Me saime funktsiooni 'brauser nĂ”udmisel', kuid funktsioon 'ressursid nĂ”udmisel' ei ole endiselt saadaval. Selenoid'i kasutamiseks peame selle fĂŒĂŒsilisel riistvaral vĂ”i virtuaalmasinas kasutusele vĂ”tma, mis tĂ€hendab, et me peame eelnevalt teadma, kui palju ressursse tuleb eraldada. Ma arvan, et see ei ole probleem vĂ€ikeste projektide puhul, mis kĂ€ivitavad 10, 20 vĂ”i isegi 30 brauserit korraga. Aga mis siis, kui me vajame 100, 500, 1000 ja rohkem? Pole mĂ”tet pidevalt toetada ja maksta nii suure koguse ressursside eest. Artikli osades 5 ja 6 arutame lahendusi, mis vĂ”imaldavad skaleerida, seelĂ€bi oluliselt vĂ€hendades ettevĂ”tte kulusid.

Selenoid Androidile

PĂ€rast Selenoid'i edu veebiautomatiseerimise tööriistana soovisid inimesed midagi sarnast Androidi jaoks. Ja see on juhtunud – Selenoid on vĂ€lja antud Androidi toe ka. Üksikasjalikult kasutajapoolsetes punktides tööpĂ”himĂ”te sarnaneb veebiautomatiseerimisega. Ainus erinevus seisneb selles, et Selenoid kĂ€ivitab Androidi emulaatoritega konteinerid, mitte brauseritega. Minu arvates on see hetkel kĂ”ige vĂ”imsam tasuta tööriist Androidi testide paralleelseks kĂ€itamiseks.

Mulle ei meeldi rÀÀkida selle tööriista negatiivsetest kĂŒlgedest, kuna see meeldib mulle vĂ€ga. Siiski on siin kohal samu puudusi, mis puudutavad ka veebiautomatiseerimist seoses skaleerimisega. Lisaks tuleb rÀÀkida veel ĂŒhest piirangust, mis vĂ”ib osutuda ootamatuks, kui seadistame tööriista esmakordselt. Androidi piltide kĂ€itamiseks on meil vaja fĂŒĂŒsilist masinat vĂ”i VM-i koos pesas virtualiseerimise toega. Praktilises juhendis demonstreerin, kuidas seda Linuxi VM-is aktiveerida. Kuid kui olete macOS kasutaja ja soovite Selenoid'i kohalikult kĂ€itada, siis Androidi teste kĂ€itada ei saa. Kuid alati vĂ”ite kohaliku Linuxi VM-i kĂ€ivitada koos seadistatud 'nested virtualisation' ja kĂ€itada Selenoid'i seal.

Praeguse infrastruktuuri oleku illustreerimine

KÀesolevas artiklis lisame 2 tööriista, et illustreerida infrastruktuuri. Need on Selenium grid veebitestide jaoks ja Selenoid Androidi testide jaoks. GitHubi juhendis nÀitan ka, kuidas kasutada Selenoid'i veebitestide kÀitamiseks. 

DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.

Õppimise lingid

Sarnased tööriistad

  • On olemas teisi konteinerimise tööriistu, kuid Docker on kĂ”ige populaarsem. Kui soovite proovida midagi muud, pidage meeles, et need tööriistad, mida oleme vaadanud Seleniumi testide paralleelseks kĂ€itamiseks, ei tööta otse vĂ€lja.  
  • Nagu juba öeldud, on olemas palju Selenium grid'i modifikatsioone, nĂ€iteks Zalenium.

4. CI / CD

Tehnoloogia lĂŒhikirjeldus

JĂ€tkuva integreerimine on arenduses ĂŒsna populaarne ja seisab koos versioonihaldesĂŒsteemidega. Kuigi see on tĂ”si, tunnen ma, et terminoloogias on teatav segadus. Selles lĂ”igus soovin ma kirjeldada kolme selle tehnoloogia modifikatsiooni oma vaatepunktist. Internetis on palju artikleid erinevate tĂ”lgendustega ja tĂ€iesti normaalne on, kui teie arvamus erineb. Peamine on, et te oleksite oma kolleegidega samal lainel.

Nii et on olemas kolm terminit: CI — Continuous Integration (jĂ€tkuv integreerimine), CD — Continuous Delivery (jĂ€tkuv kohaletoimetamine) ja taas CD — Continuous Deployment (jĂ€tkuv juurutamine). (Edaspidi kasutan neid termineid ingliskeelsena). Iga modifikatsioon lisab teie arendusprotsessile mĂ”ned tĂ€iendavad etapid. Kuid sĂ”na continuous on kĂ”ige olulisem. Selle konteksti juures mĂ”istame midagi, mis toimub algusest lĂ”puni, katkestusteta vĂ”i kĂ€sitsi sekkumiseta. Vaatame CI & CD ja CD-d antud kontekstis.

  • Continuous Integration – see on arengu algfaas. PĂ€rast uue koodi saatmist serverisse ootame kiiresti tagasisidet, et meie muudatused on head. Tavaliselt hĂ”lmab CI staatilise koodi analĂŒĂŒsi tööriistade ja ĂŒksuste/ sisemiste API testide kĂ€ivitamist. See vĂ”imaldab saada teavet meie koodi kohta juba mĂ”ne sekundi/ minuti pĂ€rast.
  • Continuous Delivery on arenenum faas, mille kĂ€igus kĂ€ivitame integreerimis-/UI-testid. Kuid sel hetkel ei saa me tulemusi nii kiiresti kui CI puhul. Esiteks vĂ”tavad need testid rohkem aega lĂ€bimiseks. Teiseks peame enne kĂ€ivitamist oma muudatused test-/staging- keskkonnas juurutama. Veelgi enam, kui rÀÀgime mobiiliarendusest, lisandub meie rakenduse koostamise etapp.
  • Continuous Deployment tĂ€hendab, et me vabastame automaatselt (release) meie muudatused tootmisse, kui kĂ”ik vastuvĂ”tutestid on eelnevalt lĂ€bitud. Lisaks saab vabastamise etapist lĂ€htudes seadistada erinevaid etappe, nagu nĂ€iteks smoke-testide kĂ€ivitamine tootmises ja huvipakkuvate mÔÔdikute kogumine. Continuous Deployment on vĂ”imalik ainult juhul, kui automatiseeritud testide katvus on hea. Kui on vajalikud mingid kĂ€sitsi sekkumised, sealhulgas testimine, siis see pole enam Continuous (katkestusteta). Siis saame rÀÀkida, et meie konveier vastab ainult Continuous Delivery praktikale.

VÀÀrtus automatiseerimisinfrastruktuurile

Selles osas pean tĂ€psustama, et kui rÀÀgime end-to-end UI-testidest, siis see tĂ€hendab, et peame meie muudatused ja seotud teenused testkeskkondadesse juurutama. Continuous Integration protsess ei rakendu antud ĂŒlesande jaoks ja peame hoolitsema vĂ€hemalt Continuous Delivery praktikate rakendamise eest. Continuous Deployment omab mĂ”tet ka UI-testide kontekstis, kui plaanime neid kĂ€ivitada tootmises.

Ja enne kui vaatame arhitektuuri muutmise illustratsiooni, tahan öelda paar sĂ”na GitLab CI-st. Erinevalt teistest CI/CD tööriistadest, pakub GitLab kaugrepo ja palju muid lisafunktsioone. Seega on GitLab rohkem kui CI. See sisaldab kastist vĂ€lja lĂ€htekoodi haldamist, Agile juhtimist, CI/CD pipelines, logimise tööriistu ja mÔÔdikute kogumist. GitLabi arhitektuur koosneb GitLab CI/CD-st ja GitLab Runner-ist. Toome vĂ€lja lĂŒhikese kirjelduse ametlikult lehelt:

Gitlab CI/CD on veebi rakendus koos API-ga, mis salvestab oma oleku andmebaasis, haldab projekte/ehitusi ja pakub kasutajaliidest. GitLab Runner on rakendus, mis töötleb ehitusi. Seda saab installida eraldi ja see töötab GitLab CI/CD-ga lÀbi API. Testide kÀitamiseks vajate nii GitLab instance'd kui ka Runner'it.

Praeguse infrastruktuuri oleku illustreerimine

DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.

Õppimise lingid

Sarnased tööriistad

5. Pilvplatvormid

Tehnoloogia lĂŒhikirjeldus

Selles jaotises arutame populaarset trendi, mida nimetatakse 'avalikeks pilvedeks'. Vaatamata tohutule kasule, mida toovad ĂŒlaltoodud virtualiseerimise ja konteinerimise tehnoloogiad, on meil endiselt vajalikke arvutusressursse. EttevĂ”tted ostavad kallid serverid vĂ”i rentivad andmekeskusi, kuid sellisel juhul tuleb teha kalkulatsioone (mĂ”nikord ebarealistlikke), kui palju ressursse me vajame, kas me kasutame neid 24/7 ja millistel eesmĂ€rkidel. NĂ€iteks, tootmiseks on vajalik ööpĂ€evaringne server, kuid kas vajame sarnaseid ressursse testimiseks vĂ€ljaspool tööaega? See sĂ”ltub ka teostatava testimise tĂŒĂŒbist. NĂ€ideteks vĂ”ivad olla koormus-/stressitestsid, mida plaanime lĂ€bi viia vĂ€ljaspool tööaega, et saada tulemusi jĂ€rgmiseks pĂ€evaks. Kuid kindlasti ei ole ööpĂ€evaringne serverite kĂ€ttesaadavus vajalik end-to-end automaatsete testide jaoks ning eriti kĂ€sitsi testimise keskkondade jaoks. Taoliste olukordade jaoks oleks hea saada piisavalt ressursse vajadusel, kasutada neid ja lĂ”petada maksmine, kui need enam ei ole vajalikud. Veelgi enam, oleks imeline saada neid hetkega, tehes paar hiireklĂ”psu vĂ”i kĂ€ivitades paar skripti. Just selleks kasutatakse avalikke pilvi. Vaadakem mÀÀratlust:

„Avalik pilv mÀÀratletakse kui arvutusressursid, mida pakuvad kolmandate osapoolte teenusepakkujad ĂŒle avaliku Interneti, muutes need kergesti kĂ€ttesaadavaks kĂ”igile, kes soovivad neid kasutada vĂ”i osta. Need vĂ”ivad olla tasuta vĂ”i mĂŒĂŒa nĂ”udmise alusel, vĂ”imaldades klientidel maksta ainult kulutatud CPU tsĂŒklite, salvestusruumi vĂ”i ribalaiuse eest.”

Levinud arvamus on, et avalikud pilved on kallid. Kuid nende peamine idee on ettevĂ”tte kulude vĂ€hendamine. Nagu eelnevalt mainitud, vĂ”imaldavad avalikud pilved saada ressursse vajadusel ja maksta ainult nende kasutamise aja eest. Samuti unustame vahel, et töötajad saavad palka, ja spetsialistid on samuti kallid ressursid. Tuleb meeles pidada, et avalikud pilved kergendavad infrastruktuuri hooldust, mis vĂ”imaldab inseneridel keskenduda olulisematele ĂŒlesannetele. 

VÀÀrtus automatiseerimisinfrastruktuurile

Millised konkreetsed ressursid on meil vaja end-to-end UI-testide jaoks? Peamiselt virtuaalmasinad vĂ”i klastrid (rÀÀgime Kubernetesest jĂ€rgmises jaotises), et kĂ€ivitada brauserid ja emulaatorid. Mida rohkem brausereid ja emulaatoreid soovime korraga kĂ€ivitada, seda rohkem CPU-d ja mĂ€lu on vajalik ning seda rohkem tuleb meil selle eest maksta. Seega vĂ”imaldavad avalikud pilved automaatikate testimise kontekstis meil nĂ”udmise jĂ€rgi kĂ€ivitada suurt arvu (100, 200, 1000 ...) brausereid/emulaatoreid, saada testimistulemusi vĂ”imalikult kiiresti ja lĂ”petada maksmine selliste ĂŒlemÀÀraste ressursside eest. 

KĂ”ige populaarsemad pilveteenuse pakkujad on Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP). Praktilises juhendis on toodud GCP kasutamise nĂ€ited, kuid ĂŒldiselt ei oma tĂ€htsust, mida tĂ€pselt automaatika ĂŒlesannete jaoks kasutate. KĂ”ik need pakuvad umbes sarnast funktsionaalsust. TĂŒĂŒpiliselt keskendub teenuse pakkuja valiku juhend kogu ettevĂ”tte infrastruktuurile ja Ă€riotsustele, mis jÀÀvad selle artikli raamidest vĂ€ljapoole. Automaatikainseneridele vĂ”ib olla huvitavam vĂ”rrelda pilveteenuse pakkujate kasutust konkreetsete testimise eesmĂ€rkide jaoks mĂ”eldud pilveplatvormidega, nagu Sauce Labs, BrowserStack, BitBar jne. Nii teeme ka! Minu arvates on Sauce Labs kĂ”ige tuntum pilvtestimise farm, seega valisin ma selle vĂ”rdlemiseks. 

GCP vs Sauce Labs automaatika eesmÀrkidel:

Kujutame ette, et meil on vaja samaaegselt lĂ€bi viia 8 web-testi ja 8 Android-testi. Selleks kasutame GCP-d ja kĂ€ivitame 2 virtuaalmasinat Selenoidiga. Esimesel kĂ€ivitame 8 konteinerit brauseritega. Teisel – 8 konteinerit emulaatoritega. Vaadakem hindu:  

DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.
Ühe Chrome'i konteineri kĂ€ivitamiseks on meil vaja n1-standard-1 masinat. Androidi puhul on see n1-standard-4 ĂŒhe emulaatori jaoks. Tegelikult on paindlikum ja odavam viis mÀÀrata konkreetseid kasutaja vÀÀrtusi CPU/dĂŒnaamilise mĂ€lu jaoks, kuid hetkel ei ole see Sauce Labsi vĂ”rdlemiseks oluline.

Ja siin on Sauce Labsi kasutustasud:

DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.
Ma arvan, et olete juba mĂ€rganud erinevust, kuid siiski toome vĂ€lja tabeli meie ĂŒlesande arvutustega:

Vajalikud ressursid
Kuu tasu
Tööajad(8.00 – 20.00)
Tööajad+ Eemaldatavad

GCP Webi jaoks
n1-standard-1 x 8 = n1-standard-8
$194.18
23 pÀeva * 12h * 0.38 = 104.88$ 
23 pÀeva * 12h * 0.08 = 22.08$

Sauce Labs veebilehtede jaoks
Virtuaalne Cloud8 paralleeltestimine
$1.559
—
—

GCP Androidile
n1-standard-4 x 8: n1-standard-16
$776.72
23 pÀeva * 12h * 1.52 = 419.52$ 
23 pÀeva * 12h * 0.32 = 88.32$

Sauce Labs Androidile
Reaalne seadme pilv 8 paralleeltestimist
$1.999
—
—

Nagu nÀha, on kulude erinevus tohutu, eriti kui teste kÀivitada ainult tööajal kaheksa tundi. Kuid kulusid saab veelgi vÀhendada, kasutades esitatud masinaid. Mis see on?

Esitatud VM on instance, mille saate luua ja kĂ€ivitada palju odavama hinnaga kui normaalsed instantsid. Siiski vĂ”ib Compute Engine need instantsid katkestada (esitada), kui tal on vaja neid ressursse muude ĂŒlesannete jaoks. Esitatud instantsid on ĂŒleliigne Compute Engine'i maht, seega nende kĂ€ttesaadavus varieerub kasutuse jĂ€rgi.

Kui teie rakendused on vigade suhtes taluvad ja suudavad taluda vĂ”imalikke instance katkestamisi, siis vĂ”ivad esitatud instantsid oluliselt vĂ€hendada teie Compute Engine'i kulusid. NĂ€iteks vĂ”ivad partii töötlemise töökohad töötada esitatud instantsidel. Kui mĂ”ned neist instantsidest katkestatakse töötlemise ajal, siis töö aeglustub, kuid ei peatu tĂ€iesti. Esitatud instantsid viivad lĂ”pule teie partii töötlemise ĂŒlesanded, ilma et need koormaksid teie olemasolevaid instantsid ja ilma et peaksite maksma tĂ€ishinna tĂ€iendavate normaalse instantside eest.

Ja see pole veel kĂ”ik! Tegelikult olen kindel, et keegi ei kĂ€ivita teste 12 tundi jĂ€rjest. Kui see nii on, saate automaatselt kĂ€ivitada ja peatada virtuaalsed masinad, kui need pole vajalikud. Tegelik kasutusaeg vĂ”ib langeda kuni 6 tunnini pĂ€evas. Sel juhul langeks tasu meie ĂŒlesande kontekstis koguni 11$ kuus 8 brauseri eest. Kas see pole imeline? Kuid esitatud masinatega peame olema ettevaatlikud ja valmis katkestusteks ning ebastabiilseks toimimiseks, kuigi neid olukordi saab ette nĂ€ha ja programmeerimise teel kĂ€sitleda. See on seda vÀÀrt!

Aga kindlasti ei ĂŒtle ma, et 'Ă€rge kunagi kasutage pilvetestimise farmisid'. Neil on mitmeid eeliseid. Esiteks ei ole see lihtsalt virtuaalne masin, vaid tĂ€ielik lahendus testimise automatiseerimiseks, millel on vĂ€lja töötatud funktsionaalsus: kaugjuhtimine, logimine, ekraanipildid, videote salvestamine, erinevad brauserid ja fĂŒĂŒsilised mobiilseadmed. Paljusid olukordi vĂ”ib see olla asendamatu suurepĂ€rane alternatiiv. Eriti on testimisplatvormid kasulikud IOS-automatiseerimiseks, kui avalikud pilved suudavad pakkuda ainult Linuxi/Windowsi sĂŒsteeme. Kuid IOS-st rÀÀgitakse jĂ€rgmistes artiklites. Soovitan alati olukorda arvesse vĂ”tta ja ĂŒlesannetest lĂ€htuvalt: mĂ”nes on odavam ja efektiivsem kasutada avalikke pilvi, samas kui mĂ”nes on testimisplatvormid igati raha vÀÀrt.

Praeguse infrastruktuuri oleku illustreerimine

DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.

Õppimise lingid

Sarnased tööriistad:

6. Orkestreerimine

Tehnoloogia lĂŒhikirjeldus

Mul on hĂ€id uudiseid – me oleme peaaegu artikli lĂ”puni jĂ”udnud! Praegu on meie automatiseerimisstruktuur koosneb web ja Android-testidest, mida jooksutame paralleelselt GitLab CI kaudu, kasutades Dockerit toetavaid tööriistu: Selenium grid ja Selenoid. Veelgi enam, me kasutame virtuaalmasinaid, mis on loodud GCP kaudu, et kĂ€ivitada nendes konteinerid, mis sisaldavad brausereid ja emulaatoreid. Kulude vĂ€hendamiseks kĂ€ivitame need virtuaalsed masinad ainult nĂ”udmisel ja peatame need, kui testimist ei toimu. Kas on midagi veel, mis vĂ”iks meie infrastruktuuri parandada? Vastus on jah! Tere tulemast Kubernetes (K8s)!

Alustame sellest, kuidas sĂ”nad orkestreerimine, klaster ja Kubernetes omavahel seotud on. KĂ”rgel tasemel on orkestreerimine sĂŒsteem, mis juurutab ja haldab rakendusi. Testimise automatiseerimiseks on sellised konteineriseeritavad rakendused nagu Selenium grid ja Selenoid. Docker ja K8s tĂ€iendavad ĂŒksteist. Esimene on mĂ”eldud rakenduste juurutamiseks, teine aga orkestreerimiseks. K8s on omakorda klaster. Klastri ĂŒlesanne on kasutada VM-e sĂ”lmedena, mis vĂ”imaldab installida erinevaid funktsioone, programme ja teenuseid ĂŒhe serveri (klastri) raames. Kui mĂ”ni sĂ”lm ebaĂ”nnestub, haaravad teised sĂ”lmed ĂŒlesande, tagades meie rakenduse katkematu töö. Lisaks sellele on K8s-l oluline funktsionaalsus, mis on seotud skaleerimisega, vĂ”imaldades automaatselt saada optimaalset ressursi hulka, tuginedes koormusele ja seatud piirangutele.

TĂ”ele au andes on Kubernetes'i kĂ€sitsi juurutamine algusest peale mitte just lihtne ĂŒlesanne. JĂ€tan lingi tuntud praktilisele juhendile "Kubernetes The Hard Way", ja kui teid huvitab, vĂ”ite harjutada. Kuid Ă”nneks on olemas alternatiivsed meetodid ja tööriistad. Lihtsaim neist on Google Kubernetes Engine (GKE) GCP-s, mis vĂ”imaldab saada valmis klastrit pĂ€rast paari klikki. Alguse tegemiseks soovitan just seda lĂ€henemist, kuna see vĂ”imaldab teil keskenduda studeerimisele, kuidas kasutada K8s oma ĂŒlesannete jaoks, mitte uurida, kuidas sisemised komponendid omavahel integreeruvad. 

VÀÀrtus automatiseerimisinfrastruktuurile

Vaatame mÔningaid olulisi funktsioone, mida K8s pakub:

  • rakenduse juurutamine: multi-nodede klastrite kasutamine, mitte virtuaalmasinate;
  • dĂŒnaamiline skaleerimine: vĂ€hendab kulusid ressurssidele, mis on kasutusel ainult nĂ”udmisel;
  • ennast taastav (Self-healing): automaatne pods'i taastamine (mis toob kaasa ka konteinerite taastamise);
  • uuenduste vĂ€ljalaskmine ja muudatuste tagasivĂ”tmine ilma seisakuta: tööriistade, brauserite ja emulaatorite uuendamine ei katkesta praeguste kasutajate tööd

Kuid K8s ei ole endiselt hĂ”bedane kuul. KĂ”ikide eeliste ja piirangute mĂ”istmiseks meie arutletud tööriistade kontekstis (Selenium grid, Selenoid) arutame lĂŒhidalt K8s ĂŒlesehitust. Klastris on kaks tĂŒĂŒpi node: Master Nodes ja Workers Nodes. Master Nodes vastutavad haldamise, juurutamise ja ajastamisotsuste eest. Workers nodes on need, kus rakendused töötavad. Node'id sisaldavad ka konteinerite kĂ€itamise keskkonda. Meie puhul on selleks Docker, mis vastutab konteineritega seotud toimingute eest. Kuid on ka alternatiivseid lahendusi, nĂ€iteks containerd. Oluline on mĂ”ista, et skaleerimine vĂ”i ennast taastamine ei kehti konteineritele otseselt. See rakendatakse pods'ide arvu suurendamise vĂ”i vĂ€hendamise kaudu, mis omakorda sisaldavad konteinerit (tavaliselt ĂŒks konteiner pod'i kohta, kuid ĂŒlesande jĂ€rgi vĂ”ib olla ka rohkem). KĂ”rgetasemeline hierarhia esindab töötaja node'e, mille sees on pods, mille sees on kĂ€ivitatud konteinerid.

Skaalafunktsioon on vĂ”tmetĂ€htsusega ja seda saab rakendada nii node'ide sees klastrite node-poolides kui ka pod'ide sees node'is. On kaks tĂŒĂŒpi skaalamist, mis kehtivad nii node'ide kui ka pod'ide kohta. Esimene tĂŒĂŒp on horisontaalne – skaleerimine toimub node'ide/pod'ide arvu suurendamise abil. Selline tĂŒĂŒp on eelistatum. Teine tĂŒĂŒp on vastavalt vertikaalne. Skaleerimine toimub node'ide/pod'ide suuruse suurendamisega, mitte nende arvu suurendamisega.

NĂŒĂŒd vaatame meie tööriistu ĂŒlaltoodud mĂ”istete kontekstis.

Selenium grid

Nagu eespool mainitud, on Selenium grid vĂ€ga populaarne tööriist ja pole ĂŒllatav, et see on konteineriseeritud. Seega pole ĂŒllatav, et Selenium grid'i saab kĂ€itada K8s-i keskkonnas. NĂ€idet sellest, kuidas seda teha, vĂ”ib leida ametlikust K8s-i hoidlast. Nagu tavaliselt, lisan sektsiooni lĂ”ppu lingid. Lisaks on praktilises juhendis nĂ€idatud, kuidas seda teha Terraformi abil. Samuti on juhised, kuidas skaleerida pod'ide arvu, mis sisaldavad brauserikonteinereid. Kuid automaatse skaalimise funktsioon K8s-i kontekstis on endiselt keeruline ĂŒlesanne. Kui ma hakkasin Ă”ppima, ei leidnud ma mingit praktilist juhendit ega soovitusi. PĂ€rast mitmeid uuringuid ja katsetusi koos DevOps-meeskonna toega valisime lĂ€henemise, kus tĂ”stame konteinerid koos vajalike brauseritega ĂŒhe pod'i sees, mis asub ĂŒhes töötaja node'is. Selline lĂ€henemine vĂ”imaldab meil rakendada horisontaalset skaleerimisstrateegiat node'ide arvu suurendamise kaudu. Loodan, et tulevikus olukord muutub ja nĂ€eme ĂŒha rohkem parimate lĂ€henemisviiside ja valmislahenduste kirjeldusi, eriti pĂ€rast Selenium grid 4 vĂ€ljaandmist uue sisearhitektuuriga.

Selenoid:

Praegu on Selenoid'i kĂ€itamine K8s-is suurim pettumus. Need ei ole ĂŒhilduvad. Teoreetiliselt saame tĂ”sta Selenoid-konteineri pod'i sees, kuid kui Selenoid hakkab kĂ€itama brauserikonteinereid, on need endiselt samas pod'is. See muudab skaleerimise vĂ”imatuks ja seetĂ”ttu ei erine Selenoid'i töö klastri sees virtuaalmasinast. Lugu lĂ”ppeb siinkohal.

Moon:

Teades seda kitsaskohta Selenoid'i töös, on arendajad vĂ€lja töötanud vĂ”imsama tööriista, mida nad kutsuvad Mooniks. See tööriist oli algselt mĂ”eldud töötama Kubernetes'e keskkonnas ning seetĂ”ttu on automaatne skaleerimisvĂ”imekus saadaval. Veelgi enam, ma ĂŒtleks, et praegu on see ainus tööriist maailmas Seleniumis, mis pakub vĂ€lja karbist vĂ€lja native K8s klastri tuge (ei ole enam, vaata jĂ€rgmist tööriista ). Mooni vĂ”tmeomadus, mis tagab selle toe, on: 

Completely stateless. Selenoid hoiab mĂ€lus teavet praegu kĂ€imasolevate brauseriseansside kohta. Kui mingil pĂ”hjusel selle protsess kokku kukub, kaovad kĂ”ik kĂ€imasolevad seansid. Moonil puudub seevastu sisemine olek ja see saab olla replikatsiooniks andmekeskustes. Brauseriseansid pĂŒsivad aktiivsed isegi siis, kui ĂŒks vĂ”i enam replikat laguneb.

Nii et Moon on suurepĂ€rane lahendus, kuid ĂŒhe probleemiga – see ei ole tasuta. Hind sĂ”ltub seansside arvust. Tasuta saab kĂ€ivitada vaid 0-4 seanssi, mis pole just vĂ€ga kasulik. Kuid alates viiendast seansist tuleb maksta 5$ igaĂŒhe eest. Olukord vĂ”ib ettevĂ”tteti varieeruda, kuid meie puhul pole Mooni kasutamine mĂ”istlik. Nagu ma eespool kirjutasin, saame vajadusel kĂ€ivitada VMs koos Selenium Gridiga vĂ”i suurendada sĂ”lmede arvu klastris. Ühe pipeline'i kohta kĂ€ivitame umbes 500 brauserit ja peatame kĂ”ik ressursid pĂ€rast testide lĂ”ppu. Kui me oleksime kasutanud Mooni, oleksime pidanud maksma tĂ€iendavaid 500 x 5 = 2500 $ kuus, sĂ”ltumata sellest, kui sageli me teste kĂ€ivitame. Ja jĂ€lle, ma ei ĂŒtle "Ă€rge kasutage Moont". Teie ĂŒlesannete jaoks vĂ”ib see olla asendamatu lahendus, nĂ€iteks kui teie organisatsioonis on palju projekte/tiime ning teil on vaja suurt ĂŒhist klastri kĂ”igi jaoks. Nagu alati, jĂ€tan linki lĂ”ppu ja soovitan teha kĂ”ik vajalikud arvutused teie ĂŒlesande kontekstis.

Callisto: (TÀhelepanu! Seda ei ole originaalses artiklis ja see on ainult vene tÔlkes.)

Nagu ma ĂŒtlesin, on Selenium vĂ€ga populaarne tööriist ja IT-sektor areneb vĂ€ga kiiresti. Samal ajal, kui ma tĂ”lkes töötasin, ilmus netis uus paljulubav tööriist Callisto (tere, Cypress ja teised Seleniumi tapjad). See töötab K8s-iga natiivselt ja vĂ”imaldab Selenoid-konteinereid pods-des kĂ€itada, jaotatuna Nodes-idele. KĂ”ik töötab otse vĂ€lja kastist, sealhulgas automaatne skaleerimine. Fantastiline, kuid tuleb testida. Mul on juba Ă”nnestunud see tööriist ĂŒles seada ja teha mĂ”ned katsed. Kuid jĂ€reldusi on veel vara teha, pĂ€rast pikaajalisi tulemusi, vĂ”ib-olla teen jĂ€rgmistes artiklites ĂŒlevaate. Praegu jĂ€tan ainult lingid iseseisvaks uurimiseks.  

Praeguse infrastruktuuri oleku illustreerimine

DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.

Õppimise lingid

Sarnased tööriistad

7. Infrastruktuur kui kood (IaC)

Tehnoloogia lĂŒhikirjeldus

Ja nĂŒĂŒd oleme jĂ”udnud viimase jaotuseni. Tavaliselt ei kuulu see tehnoloogia ja seotud ĂŒlesanded automatiseerimise inseneride vastutusalasse. Sellel on oma pĂ”hjused. Esiteks on paljudes organisatsioonides infrastruktuuri kĂŒsimused DevOps osakonna kontrolli all, ning arendustiimid ei muretse eriti selle pĂ€rast, kuidas pipeline töötab ja kuidas kĂ”ike, mis sellega seotud, toetada. Teiseks, olgem ausad, praktikat «Infrastruktuur kui kood (IaC)» ei rakendata endiselt paljudes ettevĂ”tetes. Kuid kindlasti on see saanud populaarseks suunaks ja on oluline pĂŒĂŒda olla seotud selle protsesside, lĂ€henemiste ja tööriistadega. VĂ”i vĂ€hemalt olla kursis toimuvaga.

Alustame selle lĂ€henemise kasutamise motivatsiooniga. Oleme juba arutanud, et GitlabCI testide kĂ€ivitamiseks vajame vĂ€hemalt ressursse Gitlab Runneri kĂ€itamiseks. Ja et kĂ€ivitada brauserite/emulaatorite konteinerid, peame reserveerima VM-i vĂ”i klastrit. Peale testimise ressursside on meil vaja mĂ€rkimisvÀÀrset hulka vĂ”imekust arenduskeskkondade, staging'i ja tootmise toetamiseks, mis hĂ”lmab ka andmebaase, automaatseid ajakavasid, vĂ”rgukonfiguratsioone, koormuste tasakaalustajat, kasutajate Ă”igusi ja nii edasi. Peamine probleem on nĂ”utavates pingutustes, et seda kĂ”ike toetada. On mitmeid viise, kuidas saame muudatusi teha ja uuendusi vĂ€lja anda. NĂ€iteks GCP kontekstis saame kasutada brauseris UI-konsooli ja teha kĂ”iki toiminguid, klikkides nuppudel. Alternatiivne meetod vĂ”ib olla API-kĂ”nede kasutamine pilveelementidega suhtlemiseks vĂ”i k ĐșĐŸĐŒĐ°ĐœĐŽĐœĐŸĐč ŃŃ‚Ń€ĐŸĐșĐ” gcloud utiliidi rakendamine vajalike toimingute teostamiseks. Kuid tĂ”eliselt suure hulga erinevate elementide ja infrastruktuuri elementide korral muutub kĂ”iki toiminguid kĂ€sitsi teostada raske vĂ”i isegi vĂ”imatuks. Veelgi enam, kĂ”ik need kĂ€sitsi toimingud on kontrollimatud. Me ei saa neid enne tĂ€itmist ĂŒle vaadata, kasutada versioonihaldussĂŒsteemi ega kiiresti tagasi kerida muudatusi, mis on pĂ”hjustanud intsidenti. Selliste problemidega tegelemiseks on insenerid loonud ja loovad automaatseid bash/shell-skripte, mis ei ole oluliselt parem kui eelnevad meetodid, kuna neid ei ole just lihtne kiiresti lugeda, mĂ”ista, toetada ja modifitseerida protseduurilises stiilis.

Selles artiklis ja praktilises juhendis kasutan kahte tööriista, mis kuuluvad IaC praktika alla. Need on Terraform ja Ansible. MĂ”ned arvavad, et nende samal ajal kasutamine pole mĂ”ttekas, kuna nende funktsioonid on sarnased ja nad on ĂŒksteisega asendatavad. Kuid asi on selles, et algselt on nende eesmĂ€rgid tĂ€iesti erinevad. Ja fakt, et need tööriistad peaksid teineteist tĂ€iendama, on kinnitatud koosolekul, mille korraldasid HashiCorpi ja RedHati esindavad arendajad. Kontseptuaalne erinevus seisneb selles, et Terraform on serverite haldamiseks mĂ”eldud provisioningu tööriist, samas kui Ansible on konfiguratsioonihalduse tööriist, mille eesmĂ€rk on tarkvara installimine, seadistamine ja haldamine nendel serveritel.

Teine oluline erinevus nende tööriistade vahel on koodi kirjutamise stiil. Erinevalt bashist ja Ansible'ist kasutab Terraform deklaratiivset stiili, mis pÔhineb soovitud lÔppseisundi kirjeldamisel, mida on vaja saavutada kÀitamise tulemusena. NÀiteks kui kavatseme luua 10 virtuaalmasinat (VM) ja rakendada muudatusi lÀbi Terraformi, saame 10 VM-i. Kui kÀivitame skripti uuesti, siis ei toimu midagi, kuna meil on juba 10 VM-i ja Terraform teab sellest, kuna ta salvestab infrastruktuuri praeguse oleku olekufaile. Ansible seevastu kasutab protseduuri lÀhenemist ja kui palume sellel luua 10 VM-i, saame esimesel kÀivitamisel 10 VM-i, nagu ka Terraformiga. Kuid pÀrast korduvat kÀivitamist on meil juba 20 VM-i. See on oluline erinevus. Protseduurilises stiilis me ei salvesta praegust seisundit, vaid kirjeldame lihtsalt samme, mida tuleb jÀrgida. Loomulikult saame töötada erinevate olukordadega, lisada kontrollib, kas ressursid ja praegune seisund eksisteerivad, kuid pole mÔtet raisata aega ja pingutada selle loogika kontrollimisega. Lisaks suurendab see viga tegemise riski. 

KokkuvÔtteks vÔib öelda, et serverite provisionimiseks on sobivam tööriist Terraform ja deklaratiivne mÀrgistus. Kuid konfiguratsioonihalduse töö tuleks paremini delegeerida Ansible'ile. Kui oleme sellest aru saanud, vaatame automaatimise kontekstis kasutamise nÀiteid.

VÀÀrtus automatiseerimisinfrastruktuurile

Siin on oluline mĂ”ista, et testimise automatiseerimise infrastruktuur peaks olema osa kogu ettevĂ”tte infrastruktuurist. See tĂ€hendab, et kĂ”ik IaC-praktikad tuleb rakendada globaalselt kogu organisatsiooni ressurssidele. Kes on selle eest vastutav, sĂ”ltub teie protsessidest. DevOps-meeskond on nendes kĂŒsimustes kogenum, nad nĂ€evad kogu toimuvat pilti. Samas on QA-insenerid rohkem kaasatud automatiseerimise ja pipeline'i ĂŒlesehitamise protsessi, mis vĂ”imaldab neil paremini nĂ€ha kĂ”iki vajalikke muudatusi ja tĂ€iustamise vĂ”imalusi. Parim variant on töötada koos, jagades teadmisi ja ideid oodatud tulemuse saavutamiseks. 

Tooksin mÔned nÀited Terraformi ja Ansible'i kasutamisest testimise automatiseerimise kontekstis ning tööriistadest, millest oleme varem rÀÀkinud:

1. Kirjeldada Terraformi kaudu vajalikud omadused ja parameetrid VM-idele ja klastritele.

2. Paigaldada Ansible'i abil vajalikud testimise tööriistad: docker, Selenoid, Selenium Grid ja laadida vajalikud brauserite/emulaatorite versioonid.

3. Kirjeldada Terraformi kaudu VM-i omadused, milles töötatakse GitLab Runner.

4. Paigaldada Ansible'i abil GitLab Runner ja vajalikud kaasnevad tööriistad, mÀÀrata seaded ja konfiguratsioonid.

Praeguse infrastruktuuri oleku illustreerimine

DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.

Uuringuks vajalikud lingid:

Sarnased tööriistad

Teeme kokkuvÔtte!

Samm
Tehnoloogia
Tööriistad
VÀÀrtus automatiseerimisinfrastruktuurile

1
Kohalik jooks
Node.js, Selenium, Appium

  • KĂ”ige populaarsemad tööriistad veebis ja mobiilis
  • Toetab paljusid keeli ja platvorme (sealhulgas Node.js)

2
VersioonihaldussĂŒsteemid 
Git

  • Sarnased eelised arendusprogrammiga

3
Konteineriseerimine
Docker, Selenium grid, Selenoid (Veeb, Android)

  • Testide paralleelne kĂ€itamine
  • Isolaatud keskkonnad
  • Lihtne, paindlik versioonide vĂ€rskendamine
  • DĂŒnaamiline mitteaktiivsete ressursside peatamine
  • Lihtne seadistada

4
CI / CD
Gitlab CI

  • Testid on osa konveierist
  • Kiire tagasiside
  • NĂ€htavus kogu ettevĂ”ttes / meeskonnas

5
Pilveplatvormid
Google Cloud Platform

  • Ressursid vastavalt nĂ”udlusele (maksame ainult siis, kui neid vajame)
  • Lihtne hallata ja vĂ€rskendada
  • KĂ”igi ressursside nĂ€htavus ja kontroll

6
Orkestreerimine
Kubernetes
Konteinerite kontekstis brauserite/emulaatoritega pods'i sees:

  • Skaalautuvus / automaatne skaala
  • Iseseisev taastumine
  • A vĂ€rskendused ja tagasipöördumised katkemata

7
Infrastruktuur koodina (IaC)
Terraform, Ansible

  • Sarnased eelised arendusinfrastruktuuris
  • KĂ”ik koodi versioonimise eelised
  • Lihtne teha muudatusi ja hallata
  • Totally automated

MÔttekaardi diagrammid: infrastruktuuri evolutsioon

step1: Kohalik
DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.

step2: VCS
DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.

step3: Konteineriseerimine 
DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.

step4: CI/CD 
DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.

step5: Pilveplatvormid
DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.

step6: Orkestreerimine
DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.

step7: IaC
DevOps'i tööriistad ei ole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri ehitamine nullist.

Mis edasi?

Nii et, see on artikli lÔpp. Kuid lÔpetuseks tahaksin seada teiega mÔned kokkulepped.

Teie poolt
Kuidas alguses öeldi, tahaksin, et artikkel tooks praktilist kasu ja aitaks teil saadud teadmisi reaalses töös rakendada. Lisatakse veel kord link praktilisele juhendile.

Kuid isegi pÀrast seda Àrge peatage, praktiseerige, uurige asjakohaseid linke ja raamatuid, Ôppige, kuidas see töötab teie ettevÔttes, leidke kohti, mida saab parandada, ja osalege selles. Edu!

Minu poolt

Pealkirjast on nĂ€ha, et see oli vaid esimene osa. Kuigi see tuli ĂŒsna suur, pole siin endiselt olulisi teemasid kĂ€sitlemata. Teises osas kavatseme arutada automatiseerimise infrastruktuuri IOS-i kontekstis. Apple'i piirangute tĂ”ttu, mis seondub IOS simulaatorite kĂ€itamisega ainult macOS sĂŒsteemides, on meie lahenduste valik piiratud. NĂ€iteks pole meil vĂ”imalik kasutada Dockerit simulaatori kĂ€itamiseks vĂ”i avalikke pilvi virtuaalmasinate kĂ€itamiseks. Kuid see ei tĂ€henda, et teisi alternatiive ei oleks. PĂŒĂŒan teid kursis hoida tipptasemel lahenduste ja kaasaegsete tööriistadega!

Samuti ei maininud ma ĂŒsna ulatuslikke teemasid, mis on seotud jĂ€lgimisega. Osa 3-s kavatseme arutada kĂ”ige populaarsemaid tööriistu infrastruktuuri jĂ€lgimiseks ning milliseid andmeid ja mÔÔdikuid tuleks arvesse vĂ”tta.

Ja lĂ”petuseks. Tulevikus plaanin vĂ€lja anda videokursuse testimisinfra ehitamisest ja populaarsetest tööriistadest. Praegu on internetis ĂŒsna palju kursusi ja loenguid DevOpsi teemal, kuid kĂ”ik materjalid esitatakse arendamise kontekstis, mitte testimise automatiseerimise. Selle teema osas on mul vĂ€ga vajalik tagasiside, kas selline kursus oleks huvitav ja vÀÀrtuslik testijate ja automatiseerijate kogukonnale. AitĂ€h juba ette!

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster