Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.

Pjesa 1: Web / Android

Shënim: ky artikull është përkthim në shqip i artikullit origjinal «Mjetet e DevOps nuk janë vetëm për DevOps. Ndërtimi i infrastrukturës së automatizimit të testeve nga zero». Megjithatë, të gjitha ilustrimet, lidhjet, citatet dhe terma janë ruajtur në gjuhën origjinale për të shmangur shkeljen e kuptimit gjatë përkthimit në shqip. Ju uroj një studim të këndshëm!

Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.

Aktualisht, specializimi DevOps Ă«shtĂ« njĂ« nga mĂ« tĂ« kĂ«rkuarat nĂ« industrinĂ« e IT. NĂ«se hapni faqet e njohura pĂ«r kĂ«rkimin e punĂ«s dhe vendosni filtrin pĂ«r pagat, do tĂ« shihni se ofertat e punĂ«s lidhur me DevOps janĂ« nĂ« fillim tĂ« listĂ«s. MegjithatĂ«, Ă«shtĂ« e rĂ«ndĂ«sishme tĂ« kuptohet se kjo lidhet kryesisht me pozitat ‘Senior’, gjĂ« qĂ« nĂ«nkupton se kandidati ka njĂ« nivel tĂ« lartĂ« aftĂ«sish, njohuri pĂ«r teknologji dhe mjete. Kjo gjithashtu vjen me njĂ« shkallĂ« tĂ« lartĂ« pĂ«rgjegjĂ«sie lidhur me funksionimin e vazhdueshĂ«m tĂ« production. MegjithatĂ«, kemi filluar tĂ« harrojmĂ« se çfarĂ« Ă«shtĂ« realisht DevOps. Fillimisht, kjo nuk ishte njĂ« person ose departament specifik. NĂ«se kĂ«rkojmĂ« definicione tĂ« kĂ«tij termi, do tĂ« gjejmĂ« shumĂ« substanca dhe tĂ« sakta, si metodologji, praktika, filozofi kulturore, grup koncepcionesh dhe kĂ«shtu me radhĂ«.

Specializimi im Ă«shtĂ« inxhinier i automatizimit tĂ« testeve (QA automation engineer), por unĂ« besoj se kjo nuk duhet tĂ« lidhet vetĂ«m me shkrimin e testeve automatike ose zhvillimin e arkitekturĂ«s sĂ« framework-ut pĂ«r teste. NĂ« vitin 2020, njohuritĂ« mbi infrastrukturĂ«n e automatizimit gjithashtu janĂ« tĂ« nevojshme. Kjo lejon qĂ« procesi i automatizimit tĂ« organizohet vetĂ«, duke filluar nga ekzekutimi i testeve dhe duke pĂ«rfunduar me ofrimin e rezultateve pĂ«r tĂ« gjithĂ« personat e interesuar nĂ« pĂ«rputhje me objektivat e vendosura. Si rezultat, aftĂ«sitĂ« DevOps janĂ« njĂ« faktor i domosdoshĂ«m pĂ«r kryerjen e kĂ«saj pune. Dhe gjithĂ« kjo Ă«shtĂ« e bukur, por fatkeqĂ«sisht, ka njĂ« problem (spoiler: ky artikull bĂ«n pĂ«rpjekje pĂ«r ta thjeshtuar kĂ«tĂ« problem). Ai qĂ«ndron nĂ« faktin se DevOps Ă«shtĂ« i komplikuar. Dhe kjo Ă«shtĂ« e qartĂ«, pasi kompanitĂ« nuk do tĂ« paguajnĂ« shumĂ« pĂ«r atĂ« qĂ« Ă«shtĂ« e lehtĂ« pĂ«r t'u bĂ«rë  NĂ« botĂ«n e DevOps ekziston njĂ« numĂ«r i madh mjetesh, termash, praktikash, qĂ« duhen zotĂ«ruar. Sidomos kjo Ă«shtĂ« e vĂ«shtirĂ« nĂ« fillim tĂ« karrierĂ«s dhe varet nga doƛwiadcja teknike e mbledhur.

Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.
Burimi: http://maximelanciauxbi.blogspot.com/2017/04/devops-tools.html

Këtu, mendoj se do ta përfundojmë me pjesën hyrëse dhe do të fokusohemi në qëllimin e këtij artikulli. 

Për çfarë ka të bëjë ky artikull

NĂ« kĂ«tĂ« artikull, do tĂ« ndaj pĂ«rvojĂ«n time nĂ« ndĂ«rtimin e infrastrukturĂ«s pĂ«r automatizimin e testimit. NĂ« internet mund tĂ« gjeni shumĂ« burime informacioni rreth veglave tĂ« ndryshme dhe si t'i pĂ«rdorni ato, por do doja t'i shqyrtoja ato ekskluzivisht nĂ« kontekstin e automatizimit. Besoj se shumĂ« inxhinierĂ« tĂ« automatizimit e njohin situatĂ«n kur testet e zhvilluara, pĂ«rveç vetes, askush nuk i ekzekuton dhe nuk kujdeset pĂ«r mbĂ«shtetje. Si rezultat, testet bĂ«hen tĂ« tejkaluara dhe duhet tĂ« shpenzohet kohĂ« pĂ«r t’i aktualizuar. NĂ« fillim tĂ« karrierĂ«s, kjo mund tĂ« jetĂ« njĂ« detyrĂ« mjaft e vĂ«shtirĂ«: tĂ« zgjidhni nĂ« mĂ«nyrĂ« tĂ« mençur se cilat vegla duhet tĂ« ndihmojnĂ« pĂ«r t'u zbuluar kjo problematikĂ«, si t'i zgjidhni, konfiguroni dhe mbani. Disa testues kĂ«rkojnĂ« ndihmĂ« nga DevOps (individĂ«), dhe po tĂ« jemi tĂ« sinqertĂ«, njĂ« qasje e tillĂ« funksionon. NĂ« shumĂ« raste, kjo mund tĂ« jetĂ« opsioni i vetĂ«m, pasi na mungon transparenca mbi tĂ« gjitha varĂ«sitĂ«. Por, siç e dimĂ«, DevOps janĂ« djem tĂ« zĂ«nĂ«, sepse ata duhet tĂ« mendojnĂ« pĂ«r infrastrukturĂ«n e tĂ«rĂ« kompanisĂ«, implementimin, monitorimin, mikroshĂ«rbimet dhe detyra tĂ« tjera tĂ« ngjashme nĂ« varĂ«si tĂ« organizatĂ«s/faqes. Siç ndodh zakonisht, automatizimi nuk Ă«shtĂ« prioritet. NĂ« kĂ«to raste, duhet tĂ« pĂ«rpiqemi tĂ« bĂ«jmĂ« gjithçka nĂ« anĂ«n tonĂ« nga fillimi deri nĂ« fund. Kjo do ta reduktojĂ« varĂ«sinĂ«, do tĂ« pĂ«rshpejtojĂ« procesin e punĂ«s, do tĂ« pĂ«rmirĂ«sojĂ« aftĂ«sitĂ« tona dhe do tĂ« na lejojĂ« tĂ« shohim njĂ« pamje mĂ« tĂ« gjerĂ« tĂ« asaj qĂ« ndodh.

NĂ« kĂ«tĂ« artikull, paraqiten mjetet mĂ« tĂ« kĂ«rkuara dhe mĂ« tĂ« njohura, sĂ« bashku me mĂ«nyrĂ«n se si tĂ« pĂ«rdoren ato pĂ«r ndĂ«rtimin hap pas hapi tĂ« infrastrukturĂ«s sĂ« automatizimit. Çdo grup paraqitet me mjete qĂ« janĂ« verifikuar pĂ«rmes pĂ«rvojĂ«s personale. Por kjo nuk do tĂ« thotĂ« se ju duhet tĂ« pĂ«rdorni tĂ« njĂ«jtat. VetĂ«m mjetet nuk janĂ« tĂ« rĂ«ndĂ«sishme, ato shfaqen dhe bĂ«hen tĂ« tejkalueshme. Detyra jonĂ« inxhinierike Ă«shtĂ« tĂ« kuptojmĂ« parimet bazĂ«: pĂ«rse na nevojitet ky grup mjete dhe cilat detyra punĂ«s mund tĂ« zgjidhim me ndihmĂ«n e tyre. Prandaj, nĂ« fund tĂ« secilĂ«s seksioni, lĂ« lidhje pĂ«r mjete tĂ« ngjashme qĂ« ndoshta pĂ«rdoren nĂ« organizatĂ«n tuaj.

ÇfarĂ« nuk ka nĂ« kĂ«tĂ« artikull

Përsëris për të disatën herë, artikulli nuk është për mjete specifike, prandaj këtu nuk do të ketë fragmentesh kode nga dokumentacioni dhe përshkrime të komandave specifike. Por në fund të secilës seksion, lë lidhje për studim më të detajuar.

Kjo është bërë për shkak se: 

  • kĂ«tĂ« material Ă«shtĂ« shumĂ« e lehtĂ« ta gjeni nĂ« burime tĂ« ndryshme (dokumentacion, libra, kurse video);
  • nĂ«se fillojmĂ« tĂ« thellohemi, do tĂ« duhet tĂ« shkruajmĂ« 10, 20, 30 pjesĂ« tĂ« kĂ«tij artikulli (ndĂ«rsa planet janĂ« 2-3);
  • Thjesht nuk dua tĂ« humbas kohĂ«n tuaj, sepse ndoshta dĂ«shironi tĂ« pĂ«rdorni mjete tĂ« tjera pĂ«r tĂ« arritur tĂ« njĂ«jtat qĂ«llime.

Praktika

Do të doja shumë që ky material të ishte i dobishëm për çdo lexues, dhe jo thjesht të lexohej dhe të harrohej. Në çdo studim, praktika është një komponent shumë i rëndësishëm. Për këtë, kam përgatitur repo GitHub me udhëzime hap pas hapi se si të bëni gjithçka nga e para. Po ashtu, do të keni detyra për të qenë të sigurt se nuk keni kopjuar verbërisht rreshtat e komandave të ekzekutimit.

Plani

Hapi
Teknologjia
Mjetet

1
Ekzekutimi lokal (përgatitni teste demo web / android dhe ekzekutoni ato lokalmente) 
Node.js, Selenium, Appium

2
Sistemet e kontrollit të versioneve 
Git

3
Containerizimi
Docker, Selenium grid, Selenoid (Web, Android)

4
CI / CD
Gitlab CI

5
Platforma në cloud
Google Cloud Platform

6
Orkestrimi
Kubernetes

7
Infrastruktura si kod (IaC)
Terraform, Ansible

Struktura e çdo seksioni

Për të mbajtur narrativin në një pamje të qartë, çdo seksion përshkruhet sipas skemës së mëposhtme:

  • pĂ«rshkrim tĂ« shkurtĂ«r tĂ« teknologjisĂ«,
  • vlera pĂ«r infrastrukturĂ«n e automatizimit,
  • ilustrimi i gjendjes aktuale tĂ« infrastrukturĂ«s,
  • linket pĂ«r studim,
  • mjetet e ngjashme.

1. Ekzekutimi lokal i testeve

Përshkrim i shkurtër i teknologjisë

Ky është thjesht një hap përgatitor për të nisur testet demonstrative në mënyrë lokale dhe për të verifikuar që ato kalojnë me sukses. Në pjesën praktike përdoret Node.js, por gjuha e programimit dhe platforma gjithashtu nuk janë të rëndësishme dhe mund të përdoren ato që përdoren në kompaninë tuaj. 

Megjithatë, si mjete automatizimi rekomandoj të përdorni Selenium WebDriver për platformat web dhe Appium për platformën Android, pasi në hapat e ardhshëm do të përdorim imazhe Docker që janë optimizuar për të punuar me këto mjete. Për më tepër, duke iu referuar kërkesave në shpalljet e punës, këto mjete janë më të kërkuara në treg.

Siç mund ta keni vënë re, ne po shqyrtojmë vetëm testet web dhe Android. Fatkeqësisht, IOS është një histori krejt e ndryshme (faleminderit Apple). Planifikoj të ilustroj zgjidhje dhe praktika të lidhura me IOS në pjesët e ardhshme.

Vlera për infrastrukturën e automatizimit

Nga këndvështrimi i infrastrukturës, nisja lokale nuk ka asnjë vlerë. Ju thjesht po kontrolloni nëse testet funksionojnë në makinën lokale në shfletuesit dhe simulatorët lokalë. Por megjithatë, kjo është një pikë fillestare e nevojshme.

Ilustrimi i gjendjes aktuale të infrastrukturës

Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.

Linket për studim

Vegla të ngjashme

  • cdo gjuhĂ« programuese qĂ« ju pĂ«lqen, nĂ« bashkĂ«punim me Selenium/Appium - testet;
  • çdo test;
  • cdo test-runners.

2. Sistemet e kontrollit të versioneve (Git)

Përshkrim i shkurtër i teknologjisë

Nuk e ka të vështirë të themi se sistemi i kontrollit të versioneve është një pjesë jashtëzakonisht e rëndësishme e zhvillimit, si në ekip ashtu edhe individualisht. Duke u mbështetur në burime të ndryshme, mund të themi me siguri se Git është përfaqësuesi më i njohur. Sistemi i kontrollit të versioneve ofron shumë avantazhe, si shkëmbimi i kodit, ruajtja e versioneve, rikuperimi në degët e mëparshme, monitorimi i historisë së projektit, dhe kopjet rezervë. Nuk do t'i diskutojmë çdo pikë në detaje, pasi jam i sigurt se jeni të njohur me to dhe i përdorni në punën tuaj të përditshme. Por nëse ndodhemi në rastin tjetër, ju rekomandoj të ndaloni leximin e këtij artikulli dhe të plotësoni sa më shpejt këtë boshllëk.

Vlera për infrastrukturën e automatizimit

Dhe këtu mund të bëni një pyetje të arsyeshme: «Përse po na flet për Git? Të gjithë e dinë dhe e përdorin për kodin e zhvillimit, si dhe për kodin e testeve automatike». Do të jeni plotësisht të drejtë, por në këtë artikull po flasim për infrastrukturën dhe kjo seksion ka rol si një parashikim për seksionin 7: «Infrastruktura si kod (IaC)». Për ne, kjo do të thotë që e gjithë infrastruktura, duke përfshirë atë të testimit, përshkruhet në formë kode, për rrjedhojë mund t'i aplikojmë sisteme versionimi dhe të përfitojmë përfitime të ngjashme si për kodin e zhvillimit dhe automatizimin.

Do ta shqyrtojmë IaC më në detaje në hapin 7, por edhe tani mund të filloni të përdorni Git lokalisht duke krijuar një repository lokal. Pamja e përgjithshme do të jetë më e gjerë kur të shtojmë në infrastrukturë një repository të largët.

Ilustrimi i gjendjes aktuale të infrastrukturës

Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.

Linket për studim

Vegla të ngjashme

3. Kontenjerizimi (Docker)

Përshkrim i shkurtër i teknologjisë

Për të demonstruar se si containerizimi ka ndryshuar rregullat e lojës, le të kthehemi disa dekada mbrapa. Në ato kohë, njerëzit blinin dhe përdornin serverë për të drejtuar aplikacione. Por në shumicën e rasteve, resurset e nevojshme për funksionimin nuk njiheshin paraprakisht. Si rezultat, kompanitë shpenzonin para për të blerë serverë të fuqishëm dhe të shtrenjtë, por një pjesë e këtyre kapaciteteve nuk përdorej plotësisht.

Hapi tjetër i evolucionit ishin makinat virtuale (VM), që zgjidhën problemin e shpenzimeve për burime të papërdorura. Kjo teknologji lejonte që aplikacionet të funksiononin të pavarura nga njëra-tjetra brenda një serveri, duke ndarë hapësirë plotësisht të izoluar. Por, fatkeqësisht, çdo teknologji ka disavantazhet e saj. Funksionimi i VM kërkon një sistem operativ të plotë, i cili konsumon CPU, RAM, ruajtje dhe, varësisht nga sistemi operativ, duhet marrë parasysh edhe kostoja e licencës. Këta faktorë ndikojnë në shpejtësinë e ngarkesës dhe e komplikojnë portabilitetin.

Dhe ja, kemi arritur te kontenjerizimi. Përsëri, kjo teknologji zgjidhi problemin e mëparshëm, sepse kontenjerët nuk përdorin një OS të plotë, duke çliruar kështu një sasi të madhe burimesh dhe ofruar një zgjidhje të shpejtë dhe fleksibile për portabilitetin.

Sigurisht, teknologjia e kontenjerizimit nuk është diçka e re dhe u prezantua për herë të parë në fund të viteve '70. Në atë kohë, u zhvilluan shumë studime, përpjekje dhe eksperimente. Por pikërisht Docker adaptoi këtë teknologji dhe e bëri atë të lehtë për t'u aksesuar nga masa. Në ditët tona, kur flasim për kontenjerë, në shumicën e rasteve kemi parasysh Docker-in. Kur flasim për kontenjerët Docker, nënkuptojmë kontenjerët Linux. Mund të përdorim sisteme Windows dhe macOS për të ekzekutuar kontenjerë, por është e rëndësishme të kuptojmë se në këtë rast shfaqet një shtresë shtesë. Për shembull, Docker në Mac fshehurazi ekzekuton kontenjerë brenda një VM të lehtë Linux. Do të kthehemi përsëri te kjo temë kur të diskutojmë për ekranuarët Android brenda kontenjerëve, sepse këtu shfaqet një aspekt shumë i rëndësishëm që duhet të shqyrtohet më në detail.

Vlera për infrastrukturën e automatizimit

Ne kemi zbuluar se kontenizimi dhe Docker janë të shkëlqyera. Le të shohim këtë në kontekstin e automatizimit, sepse çdo mjet ose teknologji duhet të zgjidhë një problem. Le të përcaktojmë problemet e dukshme të automatizimit të testimit në kontekstin e testeve UI:

  • numĂ«r i madh varĂ«sish gjatĂ« instalimit tĂ« Selenium dhe veçanĂ«risht tĂ« Appium;
  • probleme pajtueshmĂ«rie midis versioneve tĂ« shfletuesve, simulatoreve dhe driverĂ«ve;
  • mungesĂ« e hapĂ«sirĂ«s sĂ« izoluar pĂ«r shfletuesit/simulatoret, qĂ« Ă«shtĂ« veçanĂ«risht kritike pĂ«r ekzekutimin paralel;
  • Ă«shtĂ« e vĂ«shtirĂ« tĂ« menaxhohet dhe tĂ« mbĂ«shtetet, nĂ«se duhet tĂ« ekzekutoni 10, 50, 100 ose madje 1000 shfletuesit njĂ«kohĂ«sisht.

Por pasi që Selenium është mjeti më popullor i automatizimit dhe Docker është mjeti më popullor i kontenizimit, nuk duhet të jetë befasi për askënd që dikush përpiqet t'i bashkojë këto dy për të krijuar një mjet të fuqishëm për zgjidhjen e problemeve të mësipërme. Le të shqyrtojmë zgjidhjet e tilla më në detaje. 

Selenium grid në docker

Ky kyç është mjeti më i njohur në botë për Selenium për të drejtuar disa shfletues në disa makina dhe për t'i menaxhuar ato nga një qendër. Për të drejtuar të paktën 2 komponentë: Hub dhe Node(s) duhet të regjistrohemi. Hub është qendra që merr të gjitha kërkesat nga testet dhe i shpërndan ato në Nodes përkatëse. Për çdo Node mund të konfiguroni specifikime konkrete, si për shembull të tregoni shfletuesin dhe versionin e tij të dëshiruar. Megjithatë, na nevojitet ende të sigurohemi për shoferët e përputhshëm për shfletuesit dhe t'i instalojmë ato në Nodes përkatëse. Për këtë arsye, Selenium grid nuk përdoret në formën e tij të pastër, përveç rasteve kur na nevojitet të punojmë me shfletues që nuk mund të instalohen në sistemi operacional Linux. Për të gjitha rastet e tjera, një zgjidhje shumë fleksibël dhe e përshtatshme do të ishte përdorimi i imazheve Docker për të drejtuar Selenium grid Hub dhe Nodes. Ky qasje shumë e lehtëson menaxhimin e nodëve, pasi mund të zgjedhim imazhin e dëshiruar me versionet e shfletuesve dhe shoferëve të përputhshëm tashmë të instaluara.

MegjithĂ«se ka komente negative mbi stabilitetin e operimit, veçanĂ«risht kur ekzekutohen njĂ« numĂ«r i madh Nodes paralelisht, Selenium grid vazhdon tĂ« mbetet mjeti mĂ« i njohur pĂ«r ekzekutimin paralel tĂ« testeve Selenium. ËshtĂ« e rĂ«ndĂ«sishme tĂ« theksohet se nĂ« open-source po shfaqen vazhdimisht pĂ«rmirĂ«sime dhe modifikime tĂ« ndryshme tĂ« kĂ«tij mjeti, tĂ« cilat pĂ«rballen me ngushticat e ndryshme.

Selenoid për Web

Kyta mjet është një revolucion në botën e Selenium, pasi funksionon menjëherë nga kutia dhe ka bërë jetën e shumë inxhinierëve të automatizimit ndjeshëm më të lehtë. Së pari, kjo nuk është thjesht një modifikim tjetër i Selenium grid. Në vend të kësaj, zhvilluesit kanë krijuar një version krejtësisht të ri të Selenium Hub në gjuhën Golang, e cila, në lidhje me imazhet e lehta Docker për shfletues të ndryshëm, ka dhënë një nxitje në zhvillimin e automatizimit të testeve. Për më tepër, në rastin e Selenium Grid, ne duhet të përcaktojmë të gjithë shfletuesit dhe versionet e tyre të kërkuara paraprakisht, çka nuk është problem kur punojmë vetëm me një shfletues. Por kur flasim për disa shfletues të mbështetur, Selenoid është zgjidhja numër një, falë funksionit 'shfletues sipas kërkesës'. Të gjitha që na nevojitet është të shkarkojmë paraprakisht imazhet e nevojshme të shfletuesve dhe të azhurnojmë skedarin e konfigurimit me të cilin ndërvepron Selenoid. Pas kërkesës nga testet, Selenoid automatikisht do të nisë kontejnerin e nevojshëm me shfletuesin përkatës. Pas përfundimit të testit, Selenoid do të heqë kontejnerin, duke e liruar kështu burimin për kërkesa të ardhshme. Ky qasje eliminon plotësisht problemin e njohur të 'degradimit të nyjave', të cilin shpesh e hasim në Selenium grid.

Megjithatë, Selenoid nuk është ende një zgjidhje magjike. Ne morëm funksionin 'shfletues në kërkesë', por funksioni 'burime në kërkesë' ende nuk është i disponueshëm. Për të përdorur Selenoid, ne duhet ta angazhojmë atë në harduerin fizik ose në VM, që do të thotë se duhet të dimë paraprakisht sa burime na nevojiten. Mendoj se kjo nuk është një problem për projektet e vogla që ekzekutojnë 10, 20 ose madje 30 shfletues paralelisht. Por çfarë ndodh nëse na duhen 100, 500, 1000 e më shumë? Nuk ka kuptim të mbash dhe të paguash për një numër kaq të madh burimesh vazhdimisht. Në seksionet 5 dhe 6 të këtij artikulli, ne do të diskutojmë zgjidhjet që lejojnë të shkallëzohen, duke ulur ndjeshëm kostot për kompaninë.

Selenoid për Android

Pas suksesit tĂ« Selenoid si njĂ« instrument pĂ«r automatizimin web, njerĂ«zit dĂ«shironin tĂ« kishin diçka tĂ« ngjashme pĂ«r Android. Dhe kjo ndodhi – Selenoid u lançua me mbĂ«shtetje pĂ«r Android. Nga pikĂ«pamja e pĂ«rdoruesit, principi i funksionimit Ă«shtĂ« i ngjashĂ«m me automatizimin web. Dallimi i vetĂ«m Ă«shtĂ« se, nĂ« vend tĂ« kontejnerĂ«ve me shfletues, Selenoid nis kontejnerĂ« me emulatorĂ« Android. Sipas mendimit tim, deri mĂ« sot, ky Ă«shtĂ« instrumenti mĂ« i fuqishĂ«m falas pĂ«r tĂ« executuar teste Android nĂ« paralel.

Nuk doja tĂ« flas pĂ«r anĂ«t negative tĂ« kĂ«tij instrumenti, pasi mĂ« pĂ«lqen shumĂ«. MegjithatĂ«, ka disa tĂ« njĂ«jtat kufizime si nĂ« web-automatikĂ«n e lidhur me shkallĂ«zimin. PĂ«rveç kĂ«saj, Ă«shtĂ« e nevojshme tĂ« pĂ«rmendim njĂ« kufizim tjetĂ«r qĂ« mund tĂ« jetĂ« befasues nĂ«se po e konfiguroni kĂ«tĂ« instrument pĂ«r herĂ« tĂ« parĂ«. PĂ«r tĂ« nisur imazhet Android na nevojitet njĂ« makinĂ« fizike ose VM me mbĂ«shtetje pĂ«r virtualizimin nĂ« nivele tĂ« thella. NĂ« udhĂ«zimin praktik, tregoj si ta aktivizoni kĂ«tĂ« nĂ« njĂ« VM Linux. MegjithatĂ«, nĂ«se jeni pĂ«rdorues i macOS dhe dĂ«shironi tĂ« shkoni nĂ« Selenoid lokal, do tĂ« jetĂ« e pamundur tĂ« ekzekutoni testet Android. Por gjithmonĂ« mund tĂ« nisni njĂ« VM Linux lokal me ‘virtualizimin nĂ« nivele tĂ« thella’ tĂ« aktivizuar dhe tĂ« vendosni Selenoid brenda.

Ilustrimi i gjendjes aktuale të infrastrukturës

Në kontekstin e këtij artikulli, do të shtojmë 2 mjete për të ilustruar infrastrukturën. Këto janë Selenium grid për testet web dhe Selenoid për testet Android. Në udhëzimin në GitHub, do të tregoj gjithashtu si të përdorni Selenoid për të ekzekutuar testet web. 

Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.

Linket për studim

Vegla të ngjashme

  • EkzistojnĂ« mjete tĂ« tjera tĂ« konteinerizimit, por Docker Ă«shtĂ« mĂ« i popullarizuari. NĂ«se dĂ«shironi tĂ« provoni diçka tjetĂ«r, mbani parasysh se ato mjete qĂ« shqyrtuam pĂ«r ekzekutimin paralel tĂ« testeve Selenium nuk do tĂ« funksionojnĂ« nga kutia.  
  • Siç Ă«shtĂ« thĂ«nĂ« tashmĂ«, ekzistojnĂ« shumĂ« modifikime tĂ« Selenium grid, pĂ«r shembull, Zalenium.

4. CI / CD

Përshkrim i shkurtër i teknologjisë

Praktika e integrimit të vazhdueshëm është mjaft e njohur në zhvillim dhe qëndron në të njëjtin nivel me sistemet e kontrollit të versioneve. Megjithatë, ndiej se ekziston konfuzion në terminologji. Në këtë paragraf, dëshiroj të përshkruaj 3 modifikime të kësaj teknologjie nga pikëpamja ime. Në internet mund të gjeni shumë artikuj me interpretime të ndryshme, dhe është plotësisht normale nëse mendimi juaj ndryshon. Më e rëndësishmja, është që të jeni në të njëjtën valë me kolegët tuaj.

Pra, ekzistojnĂ« 3 terma: CI — Integrimi i VazhdushĂ«m (Continuous Integration), CD — DorĂ«zimi i VazhdushĂ«m (Continuous Delivery) dhe sĂ«rish CD — Zbatimi i VazhdushĂ«m (Continuous Deployment). (MĂ« tutje, do tĂ« pĂ«rdor kĂ«ta terma nĂ« anglisht). Çdo modifikim shton disa etapa tĂ« tjera nĂ« procesin tuaj tĂ« zhvillimit. Por fjala e vazhdueshme Ă«shtĂ« mĂ« e rĂ«ndĂ«sishmja. NĂ« kĂ«tĂ« kontekst, ne ĐżĐŸĐŽŃ€Đ°Đ·ŃƒĐŒĐ”ĐČать diçka qĂ« ndodh nga fillimi deri nĂ« fund, pa ndĂ«rprerje apo ndĂ«rhyrje manuale. Le tĂ« shohim CI & CD dhe CD nĂ« kĂ«tĂ« kontekst.

  • Integrimi i vazhdueshĂ«m – Ă«shtĂ« hapi fillestar i evolucionit. Pas dĂ«rgimit tĂ« kodit tĂ« ri nĂ« server, ne presim tĂ« marrim njĂ« pĂ«rgjigje tĂ« shpejtĂ«, qĂ« ndryshimet tona janĂ« nĂ« rregull. Zakonisht, CI pĂ«rfshin ekzekutimin e mjeteve pĂ«r analizimin statik tĂ« kodit dhe teste tĂ« brendshme tĂ« API-ve modulare. Kjo lejon tĂ« marrim informacion nĂ« lidhje me kodin tonĂ« vetĂ«m disa sekonda/mĂ« vonĂ«.
  • Continuous Delivery Ă«shtĂ« njĂ« hap mĂ« i avancuar, ku ne nisnim testet integruese/UI. MegjithatĂ«, nĂ« kĂ«tĂ« fazĂ« ne nuk marrim rezultate aq shpejt si nĂ« rastin e CI. NĂ« radhĂ« tĂ« parĂ«, kĂ«to lloje testesh kĂ«rkojnĂ« mĂ« shumĂ« kohĂ« pĂ«r t'u realizuar. NĂ« tĂ« dytĂ«n, para se tĂ« nisnim, duhet tĂ« implementojmĂ« ndryshimet tona nĂ« ambientin test/staging. MĂ« shumĂ« se kaq, nĂ«se flasim pĂ«r zhvillimin e aplikacioneve mobile, do tĂ« ketĂ« njĂ« hap shtesĂ« pĂ«r krijimin e versionit tĂ« aplikacionit tonĂ«.
  • Continuous Deployment parashikon qĂ« ne automatikisht lĂ«shojmĂ« (release) ndryshimet tona nĂ« production, nĂ«se tĂ« gjitha testet e pranuara janĂ« kaluar nĂ« fazat e mĂ«parshme. PĂ«rveç kĂ«saj, pas fazĂ«s release mund tĂ« konfigurohen faza tĂ« ndryshme, siç Ă«shtĂ« ekzekutimi i testeve smoke nĂ« production dhe mbledhja e metrikeve tĂ« interesit. Continuous Deployment Ă«shtĂ« e mundur vetĂ«m me njĂ« mbulueshmĂ«ri tĂ« mirĂ« nga testet automatike. NĂ«se kĂ«rkohen ndĂ«rhyrje manuale, duke pĂ«rfshirĂ« testimin, atĂ«herĂ« kjo nuk Ă«shtĂ« mĂ« Continuous (pa ndĂ«rprerje). AtĂ«herĂ« ne mund tĂ« flasim qĂ« kona i ynĂ« pĂ«rputhet vetĂ«m me praktikĂ«n e Continuous Delivery.

Vlera për infrastrukturën e automatizimit

NĂ« kĂ«tĂ« seksion, dua tĂ« theksoj se kur flasim pĂ«r testet UI end-to-end, kjo do tĂ« thotĂ« se duhet tĂ« deploy-nĂ« ndryshimet tona dhe shĂ«rbimet lidhĂ«se nĂ« ambientet testuese. Continuous Integration — procesi nuk aplikohet pĂ«r kĂ«tĂ« detyrĂ« dhe duhet tĂ« kujdesemi pĂ«r tĂ« implementuar praktikĂ«n e paktĂ«n tĂ« Continuous Delivery. Continuous Deployment ka gjithashtu kuptim nĂ« kontekstin e testeve UI, nĂ«se planifikojmĂ« t'i ekzekutojmĂ« ato nĂ« production.

Dhe para se të shohim ilustrimin e ndryshimit të arkitekturës, dua të them disa fjalë për GitLab CI. Ndryshe nga mjetet e tjera CI/CD, GitLab ofron një depo të largët dhe shumë funksione të tjera shtesë. Prandaj, GitLab është më shumë se CI. Ai përfshin nga kutia menaxhimin e kodit burimor, menaxhimin Agile, CI/CD pipelines, mjetet e logimit dhe mbledhjen e metrikave. Arkitektura e GitLab përbëhet nga GitLab CI/CD dhe GitLab Runner. Po sjell një përshkrim të shkurtër nga faqja zyrtare:

GitLab CI/CD është një aplikacion në internet me një API që ruan gjendjen e tij në një bazë të dhënash, menaxhon projektet/build-et dhe ofron një ndërfaqe përdoruesi. GitLab Runner është një aplikacion që proceson build-et. Ai mund të deploy-het veçmas dhe punon me GitLab CI/CD përmes një API. Për ekzekutimin e testeve, ju nevojiten si instanca e GitLab ashtu edhe Runner-i.

Ilustrimi i gjendjes aktuale të infrastrukturës

Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.

Linket për studim

Vegla të ngjashme

5. Platforma të cloud

Përshkrim i shkurtër i teknologjisë

Në këtë seksion, do të flasim për një trend të njohur që quhet 'rrjetet publike të reja'. Pavarësisht nga përfitimet e mëdha që ofrojnë teknologjitë e përshkruara më sipër për virtualizimin dhe kontejnerizimin, ne ende kemi nevojë për burime kompjuterike. Kompanitë blejnë servera të shtrenjtë ose paguajnë për qendrat e të dhënave, por në këtë rast, është e nevojshme të bëhen kalkulime (ndonjëherë të paarsyeshme) për sa burime do na nevojiten, nëse do t'i përdorim ato 24/7 dhe për cilat qëllime. Për shembull, për produksi, na nevojitet një server aktiv 24 orë, por a na duhen burime të ngjashme për testimin jashtë orarit të punës? Kjo varet gjithashtu nga lloji i testimit që po bëjmë. Një shembull mund të jenë testet e ngarkesës/stresit, të cilat planifikojmë t'i realizojmë jashtë orareve të punës për të marrë rezultate për ditën tjetër. Por, patjetër, qasja 24-orëshe në servera nuk është e nevojshme për testet automatike end-to-end dhe sidomos për ambientet e testimit manual. Për këto situata do të ishte mirë të merrnim aq burime sa na nevojiten në kërkesë, t'i përdorim dhe të ndalojmë pagesat kur ato nuk janë më të nevojshme. Më tej, do të ishte e mrekullueshme t'i merrnim ato menjëherë, duke bërë disa klikime ose duke nisur disa skripta. Për këtë qëllim përdoren rrjetet publike. Le të shohim përkufizimin:

«Ndexhi i publike përkufizohet si shërbime kompjuterike të ofruara nga ofrues të jashtëm përmes Internetit publik, duke i bërë ato të disponueshme për këdo që dëshiron t'i përdorë ose t'i blejë. Ato mund të jenë falas ose të shiten sipas kërkesës, duke i lejuar klientët të paguajnë vetëm për përdorimin për ciklet e CPU, ruajtjen ose bandwidth-in që konsumojnë».

Ekziston një mendim i zakonshëm se re të publikut janë të shtrenjta. Por ideja kryesore e tyre është ulja e shpenzimeve për kompaninë. Siç u përmend më parë, re të publikut lejojnë që të merren burime sipas kërkesës dhe të paguhet vetëm për kohën e përdorimit të tyre. Gjithashtu, ndonjëherë harrojmë se punonjësit marrin pagë dhe specialistët gjithashtu janë një burim i shtrenjtë. Duhet të merret në konsideratë se re të publikut ndihmojnë shumë në mbështetje të infrastrukturës, çka i lejon inxhinierët të përqendrohen në detyra më të rëndësishme. 

Vlera për infrastrukturën e automatizimit

Cilat burime konkretisht na nevojiten pĂ«r testimi UI end-to-end? Kryesisht, kĂ«to janĂ« makina virtuale ose klastere (do tĂ« flasim pĂ«r Kubernetes nĂ« seksionin e ardhshĂ«m) pĂ«r tĂ« nisur shfletuesit dhe emuluesit. MĂ« shumĂ« shfletues dhe emulues qĂ« dĂ«shirojmĂ« tĂ« nisim njĂ«kohĂ«sisht, aq mĂ« shumĂ« CPU dhe memorie na nevojitet dhe aq mĂ« shumĂ« do tĂ« duhet tĂ« paguajmĂ« pĂ«r kĂ«tĂ«. NĂ« kĂ«tĂ« mĂ«nyrĂ«, cloud-et publike nĂ« kontekstin e automatizimit tĂ« testimit na lejojnĂ« tĂ« nisnim njĂ« numĂ«r tĂ« madh (100, 200, 1000 
) shfletuesish/emuluesish sipas kĂ«rkesĂ«s, tĂ« marrim rezultatet e testimit sa mĂ« shpejt tĂ« jetĂ« e mundur dhe tĂ« ndalojmĂ« sĂ« paguari pĂ«r kĂ«to kapacitete jashtĂ«zakonisht tĂ« shpenzuara me burime. 

Ofertat më të njohura të shërbimeve në re janë Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP). Në udhëzuesin praktik, paraqiten shembuj të përdorimit të GCP, por në përgjithësi nuk ka rëndësi se çfarë do të përdorni për detyrat e automatizimit. Të gjithë ata ofrojnë funksionalitete të ngjashme. Zgjedhja e ofruesit zakonisht fokusohet në infrastrukturën e tërë të kompanisë dhe kërkesat e biznesit, që është jashtë këtij artikulli. Për inxhinierët e automatizimit, do të ishte më interesante të krahasohej përdorimi i ofruesve të shërbimeve në re me përdorimin e platformave specifike për qëllime testi, siç janë Sauce Labs, BrowserStack, BitBar dhe kështu me radhë. Pra, le të bëjmë këtë! Në mendimin tim, Sauce Labs është fermë më e njohur e testeve në re, prandaj e kam zgjedhur atë për krahasim. 

GCP kundër Sauce Labs për qëllime automatizimi:

Imagjinoni se na nevojitet tĂ« kryejmĂ« njĂ«kohĂ«sisht 8 teste web dhe 8 teste Android. PĂ«r kĂ«tĂ«, do tĂ« pĂ«rdorim GCP dhe do tĂ« nisim 2 makina virtuale me Selenoid. NĂ« tĂ« parĂ«n, do tĂ« ngremĂ« 8 kontejnerĂ« me shfletues. NĂ« tĂ« dytĂ«n – 8 kontejnerĂ« me emulues. Le tĂ« shikojmĂ« çmimet:  

Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.
Për të nisur një kontejner me Chrome, na nevojitet n1-standard-1 makina. Në rastin e Android, kjo do të jetë n1-standard-4 për një emulator. Në të vërtetë, një mënyrë më fleksibël dhe më e lirë është përcaktimi i vlerave specifike për CPU/Memorie, por aktualisht për krahasim me Sauce Labs, kjo nuk është thelbësore.

Këtu janë tarifat për përdorimin e Sauce Labs:

Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.
Mendoj se e keni vënë re ndryshimin, por përsëri do të sjell një tabelë me llogaritjet për detyrën tonë:

Burimet e nevojshme
Muajore
OrĂ«t e punĂ«s(8 a.m — 8 p.m)
Orët e punës+ Preemptible

GCP për Web
n1-standard-1 x 8 = n1-standard-8
$194.18
23 ditë * 12h * 0.38 = 104.88$ 
23 ditë * 12h * 0.08 = 22.08$

Sauce Labs për Web
Virtual Cloud 8 teste paralele
$1.559
—
—

GCP për Android
n1-standard-4 x 8: n1-standard-16
$776.72
23 ditë * 12h * 1.52 = 419.52$ 
23 ditë * 12h * 0.32 = 88.32$

Sauce Labs për Android
Real Device Cloud 8 teste paralele
$1.999
—
—

Siç duket, ndryshimi nĂ« kostot Ă«shtĂ« i madh, veçanĂ«risht nĂ«se ekzekutoni testet vetĂ«m gjatĂ« orarit tĂ« punĂ«s dymbĂ«dhjetĂ« orĂ«. Por mund tĂ« reduktoni kostot edhe mĂ« shumĂ« nĂ«se pĂ«rdorni makinat preemptible. ÇfarĂ« Ă«shtĂ« kjo?

Një VM preemptible është një instancë që mund të krijoni dhe ekzekutoni me një çmim shumë më të ulët se instancat normale. Megjithatë, Motorri i Llogaritjes mund t'i ndalë (preempt) këto instanca nëse ka nevojë për qasje në ato burime për detyra të tjera. Instancat preemptible janë kapacitet i tepruar i Motorit të Llogaritjes, kështu që disponibiliteti i tyre variacion me përdorimin.

Nëse aplikacionet tuaja janë të qëndrueshme ndaj defekteve dhe mund të përballojnë mundësitë e mundshme të ndërprerjes së instanceve, atëherë instancat e ndërprershme mund të ulin ndjeshëm kostot tuaja të Compute Engine. Për shembull, punët e përpunimit të grumbujve mund të ekzekutohen në instanca të ndërprershme. Nëse disa nga këto instance ndalen gjatë përpunimit, puna ngadalësohet, por nuk ndalon krejtësisht. Instancat e ndërprershme përfundojnë detyrat tuaja të përpunimit të grumbujve pa vendosur një ngarkesë shtesë mbi instancat tuaja ekzistuese dhe pa e bërë të nevojshme të paguani çmimin e plotë për instance normale shtesë.

Dhe kjo nuk është akoma fundi! Në të vërtetë, jam i sigurt që askush nuk bën testet për 12 orë pa pushim. Dhe nëse është kështu, atëherë mund të nisni dhe ndaloni automatikisht makinat virtuale kur ato nuk janë të nevojshme. Koha reale e përdorimit mund të ulet në 6 orë në ditë. Atëherë pagesa në kontekstin e detyrës tonë do të ulet deri në 11$ në muaj për 8 shfletues. A nuk është kjo e mrekullueshme? Por me makinat e ndërprershme duhet të jemi të kujdesshëm dhe të përgatitur për ndërprerje dhe funksionim të paqëndrueshëm, edhe pse këto situata mund të parashikohen dhe trajtohen programatikisht. Vlen!

Por tĂ« qenit tĂ« qartĂ«, unĂ« nuk po thĂ«mĂ« ‘kurrĂ« mos pĂ«rdorni ferma testimi nĂ« re’. Ato kanĂ« disa pĂ«rfitime. Para sĂ« gjithash, nuk janĂ« vetĂ«m makina virtuale, por njĂ« zgjidhje e plotĂ« pĂ«r automatizimin e testimit me njĂ« paketĂ« funksionalitetesh qĂ« vijnĂ« nga kutia: akses nĂ« distancĂ«, regjistrime, skrinshot, videoincizime, shfletues tĂ« ndryshĂ«m dhe pajisje mobile fizike. NĂ« shumĂ« raste, kjo mund tĂ« jetĂ« njĂ« alternativĂ« e shkĂ«lqyer. Sidomos platformat e testimit janĂ« tĂ« dobishme pĂ«r automatizimin e IOS-it, kur reja publike ofron vetĂ«m sisteme Linux/Windows. Por biseda pĂ«r IOS-in do tĂ« jetĂ« nĂ« artikujt e ardhshĂ«m. UnĂ« rekomandoj qĂ« gjithmonĂ« tĂ« vlerĂ«soni situatĂ«n dhe tĂ« bazoheni nĂ« detyrat: ndonjĂ«herĂ« Ă«shtĂ« mĂ« e lirĂ« dhe efektive tĂ« pĂ«rdorni re publike, ndĂ«rsa nĂ« disa raste platformat e testimit padyshim qĂ« meritojnĂ« paratĂ« e shpenzuara.

Ilustrimi i gjendjes aktuale të infrastrukturës

Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.

Linket për studim

Mjete të ngjashme:

6. Orkestrimi

Përshkrim i shkurtër i teknologjisë

Kam njĂ« lajmi tĂ« mirĂ« – pothuajse arritĂ«m nĂ« fund tĂ« artikullit! Aktualisht, infrastruktura jonĂ« e automatizimit pĂ«rbĂ«het nga teste web dhe Android, tĂ« cilat i kryejmĂ« pĂ«rmes GitLab CI nĂ« mĂ«nyrĂ« paralelisht, duke pĂ«rdorur mjete me mbĂ«shtetje Docker: Selenium grid dhe Selenoid. PĂ«r mĂ« tepĂ«r, ne pĂ«rdorim makinat virtuale tĂ« krijuara pĂ«rmes GCP pĂ«r tĂ« ngritur nĂ« to kontejnerĂ« me shfletues dhe emulatorĂ«. PĂ«r tĂ« reduktuar shpenzimet, i aktivizojmĂ« kĂ«to makina virtuale vetĂ«m kur Ă«shtĂ« e nevojshme dhe i ndalojmĂ« kur testingu nuk Ă«shtĂ« nĂ« zhvillim. A ka diçka tjetĂ«r qĂ« mund tĂ« pĂ«rmirĂ«sojĂ« infrastrukturĂ«n tonĂ«? PĂ«rgjigjja Ă«shtĂ« po! MirĂ« se erdhi Kubernetes (K8s)!

SĂ« pari, le tĂ« shqyrtojmĂ« se si fjalĂ«t orkestrim, grumbull dhe Kubernetes janĂ« tĂ« lidhura me njĂ«ra-tjetrĂ«n. NĂ« njĂ« nivel tĂ« lartĂ«, orkestrimi Ă«shtĂ« njĂ« sistem qĂ« dislokon dhe menaxhon aplikacionet. PĂ«r automatizimin e testimit, aplikacionet e containerizuara janĂ« Selenium grid dhe Selenoid. Docker dhe K8s plotĂ«sojnĂ« njĂ«ri-tjetrin. I pari pĂ«rdoret pĂ«r dislokimin e aplikacioneve, i dyti – pĂ«r orkestrimin. Nga ana tjetĂ«r, K8s Ă«shtĂ« njĂ« grumbull. Detyra e grumbullit Ă«shtĂ« tĂ« pĂ«rdorĂ« VM-tĂ« si Node, qĂ« lejon instalimin e funksionaliteteve tĂ« ndryshme, programeve dhe shĂ«rbimeve brenda njĂ« serveri (grumbulli). NĂ«se ndonjĂ« Node rrĂ«zohet, atĂ«herĂ« Nodes tĂ« tjera do ta marrin pĂ«rsipĂ«r, duke garantuar funksionimin pa ndĂ«rprerje tĂ« aplikacionit tonĂ«. PĂ«rveç kĂ«saj, K8s ka njĂ« funksionalitet tĂ« rĂ«ndĂ«sishĂ«m qĂ« lidhet me shkallĂ«zimin (scaling), duke na ofruar automatikisht numrin optimal tĂ« burimeve, nĂ« bazĂ« tĂ« ngarkesĂ«s dhe kufizimeve tĂ« caktuara.

Sipas të vërtetë, konfigurimi manual i Kubernetes nga zero është një detyrë mjaft e ndërlikuar. Do të lë një lidhje me udhëzimin e njohur praktik "Kubernetes The Hard Way", dhe nëse jeni të interesuar, mund të praktikoni. Por, për fat të mirë, ekzistojnë mënyra dhe mjete alternative. Më i lehti prej tyre është të përdorni Google Kubernetes Engine (GKE) në GCP, i cili do të sigurojë një klaster të gatshëm pas disa klikimeve. Për fillimin e studimeve, rekomandoj të përdorni këtë qasje, pasi do t'ju lejojë të përqendroheni në mënyrën se si të përdorni K8s për nevojat tuaja në vend të eksplorimit të mënyrës se si komponentët e brendshëm duhet të integrohen me njëri-tjetrin. 

Vlera për infrastrukturën e automatizimit

Le të shqyrtojmë disa karakteristika të rëndësishme që ofron K8s:

  • nĂ« shpĂ«rndarjen e aplikacioneve: pĂ«rdorimi i njĂ« klasteri multi-nodes, nĂ« vend tĂ« VM-ve;
  • shkallĂ«zim dinamik: redukton shpenzimet pĂ«r burimet, tĂ« cilat pĂ«rdoren vetĂ«m sipas kĂ«rkesĂ«s;
  • riparimi automat (Self-healing): rikthimi automatik i pods (duke rikthyer gjithashtu dhe kontejnerĂ«t);
  • rilizimi i pĂ«rditĂ«simeve dhe rikthimeve tĂ« ndryshimeve pa ndalje: pĂ«rditĂ«simi i mjeteve, shfletuesve dhe emulatorĂ«ve nuk e ndĂ«rpret punĂ«n e pĂ«rdoruesve aktualĂ«

Por K8s – ende nuk Ă«shtĂ« njĂ« plumb argjendi. PĂ«r tĂ« kuptuar tĂ« gjithĂ« pĂ«rfitimet dhe kufizimet nĂ« kontekstin e mjeteve qĂ« po shqyrtojmĂ« (Selenium grid, Selenoid), le tĂ« diskutojmĂ« shkurtimisht ndĂ«rtimin e K8s. Klasteri pĂ«rmban dy lloje nodash: Master Nodes dhe Workers Nodes. Master Nodes janĂ« pĂ«rgjegjĂ«s pĂ«r menaxhimin, shpĂ«rndarjen dhe vendimet e grafikut. Workers nodes – kĂ«tu janĂ« aplikaçionet qĂ« janĂ« tĂ« laufruara. Nodes gjithashtu pĂ«rmbajnĂ« mjedisin e ekzekutimit tĂ« kontejnerĂ«ve. NĂ« rastin tonĂ«, ky Ă«shtĂ« Docker, i cili Ă«shtĂ« pĂ«rgjegjĂ«s pĂ«r operacionet e lidhura me kontejnerĂ«t. Por ka edhe zgjidhje alternative, pĂ«r shembull containerd. ËshtĂ« e rĂ«ndĂ«sishme tĂ« kuptohet se shkallĂ«zimi ose vetĂ«-riparimi nuk i referohet drejtpĂ«rdrejt kontejnerĂ«ve. Kjo realizohet pĂ«rmes shtimit/redukimit tĂ« numrit tĂ« pods, tĂ« cilat nga ana e tyre pĂ«rmbajnĂ« kontejnerĂ« (zakonisht njĂ« kontejner nĂ« pod, por nĂ« varĂ«si tĂ« detyrĂ«s mund tĂ« ketĂ« edhe mĂ« shumĂ«). Hierarkia nĂ« nivel tĂ« lartĂ« pĂ«rbĂ«n nodet e punĂ«s, brenda tĂ« cilave ndodhen pods, brenda tĂ« cilave ngrihen kontejnerĂ«t.

Funksioni i shkallĂ«zimit Ă«shtĂ« thelbĂ«sor dhe mund tĂ« aplikohet si pĂ«r nodes brenda cluster node-pool, ashtu edhe pĂ«r pods brenda node. EkzistojnĂ« 2 lloje shkallĂ«zimi qĂ« i pĂ«rkasin si nodes, ashtu edhe pods. Lloji i parĂ« – horizontal – shkallĂ«zimi ndodh pĂ«rmes rritjes sĂ« numrit tĂ« nodes/pods. Ky lloj Ă«shtĂ« mĂ« i preferuar. Lloji i dytĂ«, pĂ«rkatĂ«sisht, vertikal. ShkallĂ«zimi bĂ«het pĂ«rmes rritjes sĂ« dimensioneve tĂ« nodes/pods, jo tĂ« numrit tĂ« tyre.

Tani le të shqyrtojmë mjetet tona në kontekstin e termave të përmendur më sipër.

Selenium grid

Siç është përmendur më parë, Selenium grid është një mjet shumë i njohur, dhe nuk është befasi që ai është containerizuar. Prandaj, nuk është çudi që Selenium grid mund të implementohet në K8s. Një shembull se si ta bëni këtë mund të gjeni në depot zyrtare të K8s. Si zakonisht, po bashkangjisë lidhjet në fund të seksionit. Përveç kësaj, në udhëzimin praktik tregohet si ta realizoni këtë nëpërmjet Terraform. Ka gjithashtu një udhëzues se si të shkallëzoni numrin e pods që përmbajnë kontejnerë me shfletues. Por, funksioni i shkallëzimit automatizuar në kontekstin e K8s mbetet ende një detyrë jo plotësisht e qartë. Kur fillova studimin, nuk gjeta asnjë udhëzim praktik ose rekomandime. Pas disa kërkimeve dhe eksperimentesh me mbështetje nga ekipi DevOps, ne zgjodhëm qasjen e ngritjes së kontejnerëve me shfletuesit e nevojshëm brenda një pod-i që ndodhet brenda një node punues. Kjo qasje na lejon të aplikojmë strategjinë e shkallëzimit horizontal të nodes duke rritur numrin e tyre. Shpresoj që në të ardhmen situata të ndryshojë, dhe të shohim gjithnjë e më shumë përshkrime të metodave më të mira dhe zgjidhjeve të gatshme, veçanërisht pas lëshimit të Selenium grid 4 me arkitekturën e brendshme të ndryshuar.

Selenoid:

Aktualisht, shpërndarja e Selenoid në K8s është zhgënjimi më i madh. Ata nuk janë të kompatibilshëm. Teorikisht, mund të ngremë kontejnerin Selenoid brenda pod-it, por kur Selenoid fillon të nisë kontejnerët me shfletues, ata ende do të jenë brenda të njëjtit pod. Kjo bën që shkallëzimi të jetë e pamundur dhe, si rezultat, funksionimi i Selenoid brenda klasterit nuk do të jetë i ndryshëm nga funksionimi brenda një makine virtuale. Fundi i historisë.

Moon:

Duke e ditur këtë ngushticë kur punoni me Selenoid, zhvilluesit lëshuan një mjet më të fuqishëm, të cilin e quajtën Moon. Ky mjet ishte fillimisht konceptuar për të punuar me Kubernetes dhe, si rezultat, mund dhe duhet të përdoret funksioni i skalimit automatik. Më shumë se kaq, do të thosha se aktualisht është i vetmi më i miri mjet në botë për Selenium, që nga arka vjen me mbështetje native për klasterin K8s (nuk ka më, shih mjetin e ardhshëm ). Karakteristika kryesore e Moon, që siguron këtë mbështetje, është: 

PlotĂ«sisht pa gjendje. Selenoid ruan nĂ« memorje informacionin rreth sesioneve aktuale tĂ« shfletuesit. NĂ«se pĂ«r njĂ« arsye procesi i tij rrĂ«zohet — atĂ«herĂ« tĂ« gjitha sesionet nĂ« punĂ« humbasin. Moon, nga ana tjetĂ«r, nuk ka gjendje tĂ« brendshme dhe mund tĂ« riprodhohet nĂ«pĂ«r qendra tĂ« tĂ« dhĂ«nave. Sesionet e shfletuesit mbeten aktive edhe nĂ«se njĂ« ose mĂ« shumĂ« kopje bien.

Pra ndaj, Moon Ă«shtĂ« njĂ« zgjidhje e shkĂ«lqyer, por ka njĂ« problem: nuk Ă«shtĂ« falas. Çmimi varet nga numri i seancave. Mund tĂ« aktivizoni pa pagesĂ« vetĂ«m 0-4 seanca, qĂ« nuk Ă«shtĂ« shumĂ« e dobishme. MegjithatĂ«, duke filluar nga seanca e pestĂ«, do tĂ« duhet tĂ« paguani 5$ pĂ«r secilĂ«n. Situata mund tĂ« ndryshojĂ« nga kompanitĂ« e ndryshme, por nĂ« rastin tonĂ«, pĂ«rdorimi i Moon Ă«shtĂ« pa kuptim. Siç e pĂ«rshkrova mĂ« sipĂ«r, mund tĂ« aktivizojmĂ« VMs me Selenium Grid sipas kĂ«rkesĂ«s ose tĂ« rrisim numrin e Nodes nĂ« klaster. NĂ« mĂ«nyrĂ« aproximative, pĂ«r njĂ« pipeline aktivizojmĂ« 500 shfletues dhe ndalojmĂ« tĂ« gjitha burimet pas pĂ«rfundimit tĂ« testeve. Po tĂ« ishim pĂ«rdorur Moon, do tĂ« na duhej tĂ« paguanim 500 x 5 = 2500 $ nĂ« muaj, pavarĂ«sisht sa shpesh e aktivizojmĂ« testet. Dhe pĂ«rsĂ«ri, nuk po them "mos pĂ«rdorni Moon". PĂ«r nevojat tuaja, mund tĂ« jetĂ« njĂ« zgjidhje e pazĂ«vendĂ«sueshme, pĂ«r shembull, nĂ«se nĂ« organizatĂ«n tuaj ka shumĂ« projekte/equipe dhe ju nevojitet njĂ« klaster i madh pĂ«r tĂ« gjithĂ«. Si gjithmonĂ«, po lĂ« njĂ« lidhje nĂ« fund dhe rekomandoj tĂ« bĂ«ni tĂ« gjitha llogaritĂ« e nevojshme nĂ« kontekstin e detyrave tuaja.

Callisto: (Kujdes! Kjo nuk është në artikullin origjinal dhe përfshihet vetëm në përkthimin në rusisht.)

Siç thashë, Selenium është një mjet shumë i njohur, dhe fusha e IT po zhvillohet shumë shpejt. Ndërsa punoja mbi përkthimin, në internet doli një mjet i ri premtues Callisto (përshëndetje Cypress dhe vrasësve të tjerë të Selenium). Ai punon natyrshëm me K8s dhe lejon ekzekutimin e kontejnerëve Selenoid në pods, shpërndarë në Nodes. E gjithë kjo funksionon menjëherë nga kutia, duke përfshirë automatikisht shkallëzimin. Fantastike, por duhet testuar. Më është arritur të vendos këtë mjet dhe të realizoj disa eksperimente. Por është ende herët për të nxjerrë përfundime; pas marrjes së rezultateve në një distancë të gjatë, ndoshta do të bëj një rishikim në artikujt e ardhshëm. Deri atëherë, lë vetëm lidhjet për hulumtime të pavarura.  

Ilustrimi i gjendjes aktuale të infrastrukturës

Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.

Linket për studim

Vegla të ngjashme

7. Infrastrukturë si kod (IaC)

Përshkrim i shkurtër i teknologjisë

Dhe ja, po arrijmë në seksionin e fundit. Zakonisht, kjo teknologji dhe detyrat e lidhura me të nuk janë brenda fushës së përgjegjësisë së inxhinierëve të automatizimit. Dhe ka arsye për këtë. Së pari, në shumë organizata, çështjet infrastrukturore janë nën kontrollin e departamentit DevOps dhe ekipi i zhvillimit nuk shqetësohet shumë për atë se çfarë mban në funksion pipeline dhe si duhet të mbahen të gjitha gjërat që lidhen me të. Së dyti, të jemi të sinqertë, praktika e "Infrastrukturës si Kod (IaC)" ende nuk është aplikuar në shumë kompani. Por padyshim që ka filluar të bëhet një trend i njohur dhe është e rëndësishme të përpiqemi të jemi të angazhuar në proceset, qasjet dhe mjetet që lidhen me të. Ose, të paktën, të jemi në dijeni të ngjarjeve.

Të fillojmë me motivimin për përdorimin e këtij qasjeje. Ne tashmë kemi diskutuar se për të nisur testet në GitlabCI, na nevojiten së paku burime për të nisur Gitlab Runner. Dhe për të nisur kontenierët me shfletues/emulatorë, na nevojitet të rezervojmë një VM ose një klaster. Përveç burimeve për testim, na nevojitet një numër të konsiderueshëm kapacitetesh për të mbështetur ambientet e zhvillimit, staging, dhe production, që gjithashtu përfshin bazat e të dhënave, oraret automatike, konfigurimet e rrjetit, balancuesin e ngarkesës, të drejtat e përdoruesve dhe kështu me radhë. Problemi kryesor qëndron te përpjekjet e nevojshme për të mbështetur gjithçka këtë. Ekzistojnë disa mënyra se si mund të bëjmë ndryshime dhe të publikojmë përditësime. Për shembull, në kontekstin e GCP, mund të përdorim konzolën UI në shfletues dhe të kryejmë të gjitha veprimet duke klikuar butona. Një mënyrë alternative mund të jetë përdorimi i thirrjeve API për të ndërvepruar me entitetet e mjeteve ose aplikimi i utilitarit të linjës së komandës gcloud për të kryer manipulimet e nevojshme. Por, me të vërtetë në një numër të madh entitetesh të ndryshme dhe elementëve të infrastrukturës, bëhet e vështirë ose madje e pamundur të kryhen të gjitha operacionet manualisht. Për më tepër, të gjitha këto veprime manuale janë të pakontrolluara. Ne nuk mund t'i dërgojmë ato për rishikim para se t'i ekzekutojmë, të përdorim një sistem kontrolli versioni dhe të rikthejmë shpejt ndryshimet që shkaktuan incidentin. Për të zgjidhur këto probleme, inxhinierët kanë krijuar dhe krijojnë skripte automatike bash/shell, që nuk janë shumë më të mira se metodat e mëparshme, pasi nuk janë aq të lehta për t'u lexuar, kuptuar, mbajtur dhe modifikuar në stilin proceduror.

Në këtë artikull dhe udhëzues praktik, unë po përdor 2 mjete që i përkasin praktikës IaC. Këto janë Terraform dhe Ansible. Disa mendojnë se nuk ka kuptim t'i përdorësh ato njëkohësisht, pasi funksionalitetet e tyre janë shumë të ngjashme dhe ato ndërrueshëm. Por e vërteta është se fillimisht ato kanë detyra tërësisht të ndryshme. Dhe fakti që këto mjete duhet të plotësojnë njëra-tjetrën u konfirmua në një prezantim të përbashkët nga zhvilluesit që përfaqësonin kompanitë HashiCorp dhe RedHat. Diferenca konceptuale qëndron në atë se Terraform është një mjet provisioning për menaxhimin e serverëve të vetë. Ndërsa Ansible është një mjet për menaxhimin e konfiguracioneve, detyra e të cilit është instalimi, konfigurimi dhe menaxhimi i softuerit në këta servera.

Një veçori tjetër kryesore dalluese e këtyre mjeteve është stili i shkrimit të kodit. Ndryshe nga bash dhe Ansible, Terraform përdor një stil deklarativ, të bazuar në përshkrimin e gjendjes përfundimtare të dëshiruar që duhet arritur si rezultat i ekzekutimit. Për shembull, nëse kemi ndërmend të krijojmë 10 VM dhe të aplikojmë ndryshimet përmes Terraform, do të marrim 10 VM. Nëse ekzekutimi bëhet përsëri, nuk do të ndodhi asgjë, pasi tashmë kemi 10 VM, dhe Terraform e di këtë sepse ruan gjendjen aktuale të infrastrukturës në skedarin e gjendjes. Ndërsa Ansible përdor një qasje procedurale dhe, nëse i kërkojmë të krijojë 10 VM, në ekzekutimin e parë do të marrim 10 VM, si me Terraform. Por pas ekzekutimit të dytë, do të kemi tashmë 20 VM. Kjo është dallimi i rëndësishëm. Në stilin procedurial, ne nuk ruajmë gjendjen aktuale dhe thjesht përshkruajmë sekuencën e hapave që duhet të kryhen. Sigurisht, mund të përballojmë situata të ndryshme, të shtojmë disa kontrollime për ekzistencën e burimeve dhe gjendjen aktuale, por nuk ka kuptim të harxhojmë kohën tonë dhe të bëjmë përpjekje për të kontroluar këtë logjikë. Po ashtu, kjo rrit riskun e kryerjes së gabimeve. 

Duke përmbledhur gjithçka më sipër, mund të nxjerrim përfundimin se mjeti më i përshtatshëm për provisioning e serverëve është Terraform dhe nota deklarative. Ndërsa, punën për menaxhimin e konfigurimeve është më mirë ta delegojmë tek Ansible. Pas këtij sqarimi, le të shohim disa shembuj përdorimi në kontekstin e automatizimit.

Vlera për infrastrukturën e automatizimit

ËshtĂ« e rĂ«ndĂ«sishme tĂ« kuptohet se infrastruktura e automatizimit tĂ« testimit duhet tĂ« konsiderohet si njĂ« pjesĂ« e gjithĂ« infrastrukturĂ«s sĂ« kompanisĂ«. Kjo do tĂ« thotĂ« se tĂ« gjitha praktikat IaC duhet tĂ« aplikohen nĂ« mĂ«nyrĂ« globale mbi resurset e gjithĂ« organizatĂ«s. Kush Ă«shtĂ« pĂ«rgjegjĂ«s pĂ«r kĂ«tĂ« varet nga proceset tuaja. Ekipa DevOps Ă«shtĂ« mĂ« e eksperiencuar nĂ« kĂ«to çështje, ata shohin gjithĂ« pamjen e asaj qĂ« ndodh. MegjithatĂ«, inxhinierĂ«t QA janĂ« mĂ« tepĂ«r tĂ« pĂ«rfshirĂ« nĂ« procesin e ndĂ«rtimit tĂ« automatizimit dhe strukturĂ«s sĂ« pipeline, gjĂ« qĂ« u lejon atyre tĂ« shohin mĂ« mirĂ« tĂ« gjitha ndryshimet e nevojshme dhe mundĂ«sitĂ« pĂ«r pĂ«rmirĂ«sim. Zgjedhja mĂ« e mirĂ« Ă«shtĂ« tĂ« punoni sĂ« bashku, tĂ« shkĂ«mbeni dije dhe ide pĂ«r tĂ« arritur rezultatin e pritur. 

Do t'i jap disa shembuj të përdorimit të Terraform dhe Ansible në kontekstin e automatizimit të testeve dhe mjeteve që kemi diskutuar deri tani:

1. Të përshkruajmë nëpërmjet Terraform karakteristikat e nevojshme dhe parametrat e VM-ve dhe klasterëve.

2. Të instalojmë me Ansible mjetet e nevojshme për testim: docker, Selenoid, Selenium Grid dhe të ngarkojmë versionet e duhura të shfletuesve/emulatorëve.

3. Të përshkruajmë nëpërmjet Terraform karakteristikat e VM-së ku do të ekzekutohet GitLab Runner.

4. Të instalojmë me Ansible GitLab Runner dhe mjetet përkatëse, të caktrojmë konfigurimet dhe cilësimet.

Ilustrimi i gjendjes aktuale të infrastrukturës

Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.

Linke për studim:

Vegla të ngjashme

Të përmbledhim!

Hapi
Teknologjia
Mjetet
Vlera për infrastrukturën e automatizimit

1
Ekzekutimi lokal
Node.js, Selenium, Appium

  • Mjetet mĂ« tĂ« njohura pĂ«r web dhe mobile
  • MbĂ«shtetje pĂ«r shumĂ« gjuhĂ« dhe platforma (duke pĂ«rfshirĂ« Node.js)

2
Sistemet e kontrollit të versioneve 
Git

  • Avantazhe tĂ« ngjashme me kodin e zhvillimit

3
Containerizimi
Docker, Selenium grid, Selenoid (Web, Android)

  • Ekzekutimi paralel i testeve
  • Mjedise tĂ« izoluar
  • PĂ«rditĂ«sime tĂ« thjeshta dhe fleksibĂ«l tĂ« versioneve
  • NDinimizimi i resurseve tĂ« papĂ«rdorura
  • E lehtĂ« pĂ«r t'u konfiguruar

4
CI / CD
Gitlab CI

  • Testet pjesĂ« e konvejerit
  • Feedback i shpejtĂ«
  • DukshmĂ«ri pĂ«r tĂ« gjithĂ« kompaninĂ« / ekipin

5
Platforma në cloud
Google Cloud Platform

  • Burime sipas kĂ«rkesĂ«s (paguajmĂ« vetĂ«m kur janĂ« tĂ« nevojshme)
  • LehtĂ« pĂ«r t'u menaxhuar dhe pĂ«rditĂ«suar
  • DukshmĂ«ria dhe kontrolli i tĂ« gjitha burimeve

6
Orkestrimi
Kubernetes
Në kontekstin e kontejnerëve me shfletues/emulatorë brenda pods:

  • ShkallĂ«zimi / automatik i shkallĂ«zimit
  • RimĂ«kĂ«mbje e vetĂ«-automatuar
  • PĂ«rditĂ«sime dhe rikthime pa ndĂ«rprerje

7
Infrastruktura si kod (IaC)
Terraform, Ansible

  • PĂ«rfitime tĂ« ngjashme me infrastrukturĂ«n e zhvillimit
  • TĂ« gjitha pĂ«rfitimet e versionimit tĂ« kodit
  • LehtĂ« pĂ«r tĂ« bĂ«rĂ« ndryshime dhe pĂ«r tĂ« mbajtur
  • PlotĂ«sisht i automatizuar

Diagramet e hartës mendore: evolucioni i infrastrukturës

hapi1: Lokal
Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.

hapi2: VCS
Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.

hapi3: Konteinerizimi 
Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.

hapi4: CI/CD 
Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.

hapi5: Platformat e Cloud
Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.

hapi6: Orkestrimi
Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.

hapi7: IaC
Mjetet e DevOps nuk janë vetëm për DevOps. Procesi i ndërtimit të infrastrukturës së automatizimit të testeve nga zero.

ÇfarĂ« ndodh mĂ« tej?

Kështu, kjo është fundi i artikullit. Por në përfundim, do doja të vendosja disa marrëveshje me ju.

Nga ana juaj
Siç u tha në fillim, do doja që artikulli të kishte një dobi praktike dhe të ndihmonte në aplikimin e njohurive të marra në punën reale. Po shtoj përsëri linkun në udhëzuesin praktik.

Por edhe pas kësaj, mos u ndalni, stërvituni, studiojini lidhjet përkatëse dhe librat, merrni vesh si funksionon tek ju në kompani, gjeni vende që mund të përmirësohen dhe merrni pjesë në këtë. Suksese!

Nga ana ime

Nga titulli duket se kjo ishte vetëm pjesa e parë. Edhe pse doli mjaft e gjatë, këtu ende nuk janë zbuluar tema të rëndësishme. Në pjesën e dytë planifikoj të shqyrtoj infrastrukturën e automatizimit në kontekstin e IOS. Për shkak të kufizimeve të Apple që lidhen me ekzekutimin e simulatorëve të IOS vetëm në sistemet macOS, seti ynë i zgjidhjeve është ngushtuar. Për shembull, ne nuk kemi mundësinë të përdorim Docker për të ekzekutuar simulatorin ose cloud publik për të nisur makina virtuale. Por kjo nuk do të thotë se nuk ka alternativa të tjera. Do të përpiqem t'ju mbaj në dijeni për zgjidhjet më të avancuara dhe mjetet moderne!

Po ashtu, nuk e përmenda temën e rëndësishme lidhur me monitorimin. Në pjesën 3 do të shqyrtoj mjetet më të njohura për monitorimin e infrastrukturës, si dhe cilat të dhëna dhe metrika duhet të kemi parasysh.

Dhe përfundimisht. Në të ardhmen, planifikoj të publikoj një kurs video mbi ndërtimin e infrastrukturës së testimit dhe mjetet e njohura. Aktualisht, në internet ka shumë kurse dhe ligjërata për DevOps, por të gjitha materialet janë paraqitur në kontekstin e zhvillimit, jo të automatizimit të testimit. Në këtë çështje, kam nevojë për reagime; nëse një kurs i tillë do të ishte i dobishëm dhe i vlefshëm për komunitetin e testuesve dhe automatizuesve. Faleminderit paraprakisht!

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster