Del 1: Web / Android
AnmÀrkning: denna artikel Àr en översÀttning till ryska av den ursprungliga artikeln Alla illustrationer, lÀnkar, citat och termer har dock behÄllits pÄ originalsprÄket för att undvika att betydelsen förvrÀngs vid översÀttningen till ryska. Jag önskar er en trevlig studie!

För nĂ€rvarande Ă€r DevOps en av de mest efterfrĂ„gade yrkena inom IT-branschen. Om du öppnar populĂ€ra jobb-sökningssajter och stĂ€ller in din sökfilter för löner, sĂ„ ser du att DevOps-relaterade jobb ligger högst pĂ„ listan. Men det Ă€r viktigt att förstĂ„ att detta frĂ€mst gĂ€ller âSeniorâ-positioner, vilket innebĂ€r att kandidaten har en hög kompetensnivĂ„, kunskaper om teknologier och verktyg. Detta medför Ă€ven ett stort ansvar relaterat till att upprĂ€tthĂ„lla produktionens stabilitet. Men vi har börjat glömma vad DevOps egentligen Ă€r. Ursprungligen var det inte en specifik person eller avdelning. Om vi söker definitioner av detta begrepp, kommer vi att hitta mĂ„nga vackra och korrekta substantiv som metodik, praktiker, kulturell filosofi, en grupp koncept m.m.
Min specialisering Àr testeringsautomatiseringsingenjör (QA automation engineer), men jag anser att det inte bara bör handla om att skriva automatiserade tester eller utveckla arkitekturen för testframework. à r 2020 Àr kunskap om automatiseringsinfrastruktur ocksÄ nödvÀndigt. Det möjliggör att organisera automatiseringsprocessen pÄ egen hand, frÄn att köra tester till att tillhandahÄlla resultat till alla intresserade parter i linje med uppsatta mÄl. Som resultat Àr DevOps-fÀrdigheter en obligatorisk faktor för att utföra detta arbete. Och allt detta Àr bra, men tyvÀrr finns det ett problem (spoiler: denna artikel gör försök att förenkla detta problem). Den bestÄr i att DevOps Àr komplext. Och det Àr uppenbart, för företag kommer inte att betala mycket för nÄgot som Àr lÀtt att göra... Inom DevOps finns det en mÀngd verktyg, termer och praktiker som mÄste behÀrskas. SÀrskilt Àr det svÄrt i början av karriÀren och beror pÄ den mÀngd teknisk erfarenhet som samlats.

KĂ€lla:
HĂ€r avslutar vi nog med introduktionen och fokuserar pĂ„ syftet med denna artikel.Â
Vad handlar denna artikel om
I den hÀr artikeln kommer jag att dela med mig av min erfarenhet av att bygga infrastruktur för testautomatisering. Det finns mÄnga kÀllor pÄ internet om olika verktyg och hur man anvÀnder dem, men jag skulle vilja diskutera dem uteslutande i kontexten av automatisering. Jag tror att mÄnga automatiseringsingenjörer kÀnner igen situationen dÀr de utvecklade testerna, förutom av er sjÀlva, ingen kör eller tar hand om dem. Som ett resultat blir testerna förÄldrade och man mÄste lÀgga tid pÄ att uppdatera dem. à terigen kan detta vara en ganska komplex uppgift i början av karriÀren: att smart besluta vilka verktyg som ska hjÀlpa till att lösa detta problem, hur man vÀljer dem, konfigurerar och underhÄller dem. Vissa testare söker hjÀlp frÄn DevOps (personer) och, Àrligt talat, sÄ fungerar den metoden. I mÄnga fall kan detta vara det enda alternativet, eftersom vi saknar insyn i alla beroenden. Men som vi vet, Àr DevOps mycket upptagna mÀnniskor, eftersom de mÄste tÀnka pÄ infrastrukturen för hela företaget, deployment, övervakning, mikrotjÀnster och andra liknande uppgifter beroende pÄ organisationen/teamet. Som det ofta Àr, Àr automatisering inte en prioritet. I sÄdana fall mÄste vi försöka göra allt vi kan frÄn början till slut. Detta minskar beroenden, pÄskyndar arbetsflödet, förbÀttrar vÄra fÀrdigheter och gör att vi kan se en större bild av vad som hÀnder.
Artikeln presenterar de mest efterfrÄgade och populÀra verktygen och visar hur man anvÀnder dem för en steg-för-steg-byggnad av automatiseringsinfrastruktur. Varje grupp presenteras med verktyg som har prövats i personlig erfarenhet. Men det betyder inte att du mÄste anvÀnda samma. SjÀlva verktygen Àr inte viktiga, de kommer och gÄr. VÄr ingenjörs uppgift Àr att förstÄ de grundlÀggande principerna: varför vi behöver denna grupp verktyg och vilka arbetsuppgifter vi kan lösa med hjÀlp av dem. DÀrför lÀmnar jag i slutet av varje avsnitt lÀnkar till liknande verktyg som möjligen anvÀnds i din organisation.
Vad som saknas i denna artikel
Jag upprepar Ànnu en gÄng att artikeln inte handlar om specifika verktyg, sÄ hÀr kommer det inte att finnas nÄgra kodexempel frÄn dokumentationen eller beskrivningar av specifika kommandon. Men i slutet av varje avsnitt lÀmnar jag lÀnkar för en mer detaljerad studie.
Detta har gjorts av följande skĂ€l:Â
- detta material Àr mycket lÀtt att hitta i olika kÀllor (dokumentation, böcker, videokurser);
- om vi börjar fördjupa oss, kommer vi att behöva skriva 10, 20, 30 delar av denna artikel (nÀr vi planerar 2-3);
- jag vill helt enkelt inte slösa din tid, eftersom du möjligen vill anvÀnda andra verktyg för att uppnÄ samma mÄl.
Praxis
Jag skulle verkligen vilja att detta material Àr anvÀndbart för varje lÀsare, och inte bara lÀses och glöms bort. I varje inlÀrning Àr praxis en mycket viktig komponent. För detta har jag förberett. Du fÄr ocksÄ en hemuppgift för att vara sÀker pÄ att du inte slentrianmÀssigt kopierar utförande kommandon.
Plan
Steg
Teknik
Verktyg
1
Lokal körning (förbereda webben / android demotester och köra det lokalt)Â
Node.js, Selenium, Appium
2
VersionshanteringssystemÂ
Git
3
Containerisering
Docker, Selenium grid, Selenoid (Web, Android)
4
CI / CD
Gitlab CI
5
Molnplattformar
Google Cloud Platform
6
Orkestrering
Kubernetes
7
Infrastruktur som kod (IaC)
Terraform, Ansible
Strukturen för varje avsnitt
För att hÄlla berÀttelsen visuellt klar, beskrivs varje avsnitt enligt följande plan:
- kort beskrivning av tekniken,
- vÀrdet för automatiseringsinfrastruktur,
- illustration av det aktuella tillstÄndet för infrastrukturen,
- lÀnkar för studier,
- liknande verktyg.
1. Lokal körning av tester
Kort beskrivning av tekniken
Detta Ă€r bara ett förberedande steg för att köra demonstrativa tester lokalt och för att kontrollera att de lyckas. I den praktiska delen anvĂ€nds Node.js, men programmeringssprĂ„ket och plattformen Ă€r inte sĂ„ viktiga och man kan anvĂ€nda de som anvĂ€nds i ditt företag.Â
Men som automatiseringsverktyg rekommenderar jag att anvÀnda Selenium WebDriver för webplattformar och Appium för Android-plattformen, eftersom vi i nÀsta steg kommer att anvÀnda Docker-bilder som Àr anpassade för att arbeta specifikt med dessa verktyg. Dessutom, med hÀnvisning till kraven i jobbannonserna, Àr dessa verktyg de mest efterfrÄgade pÄ marknaden.
Som du kanske har mÀrkt, fokuserar vi endast pÄ web och Android-tester. TyvÀrr Àr IOS en helt annan historia (tack Apple). Jag planerar att demonstrera lösningar och metoder kopplade till IOS i kommande delar.
VÀrde för automatiseringsinfrastruktur
Sett ur infrastrukturens perspektiv ger lokal körning inget vÀrde. Du kontrollerar bara att tester fungerar pÄ en lokal maskin i lokala webblÀsare och simuleringar. Men oavsett Àr det en nödvÀndig utgÄngspunkt.
Illustration av det nuvarande tillstÄndet för infrastrukturen

LÀnkar för studier
Liknande verktyg
- valfri programmeringssprÄk du gillar, i kombination med Selenium/Appium-tester;
- valfria tester;
- valfri test-runner.
2. Versionshanteringssystem (Git)
Kort beskrivning av tekniken
Ingen kommer att bli förvÄnad om jag sÀger att versionshanteringssystem Àr en extremt viktig del av utveckling bÄde i team och individuellt. Med stöd av olika kÀllor kan man med sÀkerhet sÀga att Git Àr den mest populÀra representanterna. Versionshanteringssystemet erbjuder mÄnga fördelar, sÄsom koddelning, versionslagring, ÄterstÀllning till tidigare grenar, övervakning av projektets historia och backup. Vi kommer inte att diskutera varje punkt i detalj, eftersom jag Àr sÀker pÄ att ni Àr vÀl bekanta med detta och anvÀnder det i ert dagliga arbete. Men om ni mot förmodan inte Àr det, rekommenderar jag att ni pausar lÀsningen av denna artikel och snabbt ÄtgÀrdar denna brist.
VÀrde för automatiseringsinfrastruktur
HÀr kan ni stÀlla en rimlig frÄga: "Varför berÀttar han för oss om Git? Alla vet och anvÀnder detta för bÄde kodutveckling och autotestning." Ni har helt rÀtt, men i denna artikel pratar vi om infrastruktur och denna sektion fungerar som en förhandsvisning för sektion 7: "Infrastruktur som kod (IaC)". För oss innebÀr detta att hela infrastrukturen, inklusive testinfrastrukturen, beskrivs i form av kod, och vi kan alltsÄ ocksÄ tillÀmpa versionshanteringssystem och fÄ liknande fördelar som för kodutveckling och automatisering.
Vi kommer att titta nÀrmare pÄ IaC i steg 7, men Àven nu kan du börja anvÀnda Git lokalt genom att skapa ett lokalt förrÄd. Den övergripande bilden kommer att utvidgas nÀr vi lÀgger till ett fjÀrrförrÄd till infrastrukturen.
Illustration av det nuvarande tillstÄndet för infrastrukturen

LÀnkar för studier
Liknande verktyg
- Â
3. Containerisering (Docker)
Kort beskrivning av tekniken
För att demonstrera hur containerisering har förÀndrat spelreglerna, lÄt oss resa flera decennier tillbaka i tiden. PÄ den tiden köpte och anvÀnde mÀnniskor servermaskiner för att köra applikationer. Men i de flesta fall var de nödvÀndiga resurserna för driften inte kÀnda i förvÀg. DÀrför spenderade företag pengar pÄ att köpa dyra kraftfulla servrar, men en del av denna kapacitet utnyttjades inte helt.
Den nÀsta fasen i evolutionen var virtuella maskiner (VM), som löste problemet med onödiga kostnader för outnyttjade resurser. Denna teknologi gjorde det möjligt att köra applikationer oberoende av varandra inom en och samma server, och att tilldela helt isolerat utrymme. Men tyvÀrr har varje teknologi sina nackdelar. Att köra VM krÀver ett fullt operativsystem, som förbrukar CPU, RAM, lagring, och beroende pÄ OS bör man Àven ta hÀnsyn till licenskostnader. Dessa faktorer pÄverkar laddningstiden och komplicerar portabiliteten.
Och hÀr har vi kommit till containerisering. à terigen har denna teknologi löst det tidigare problemet, eftersom containrar inte anvÀnder ett fullt operativsystem, vilket frigör mycket resurser och erbjuder en snabb och flexibel lösning för portabilitet.
SjÀlvklart Àr containerteknologi inget nytt och introducerades först i slutet av 70-talet. Under den tiden gjordes mÄnga studier, utvecklingar och försök. Men det var just Docker som anpassade denna teknologi och gjorde den lÀttillgÀnglig för massorna. I vÄr tid, nÀr vi talar om containrar, menar vi oftast Docker. NÀr vi pratar om Docker-containrar syftar vi pÄ Linux-containrar. Vi kan anvÀnda Windows och macOS-system för att köra containrar, men det Àr viktigt att förstÄ att det dÄ uppstÄr ett extra lager. Till exempel kör Docker pÄ Mac osynligt containrar inuti en lÀttvikts Linux VM. Vi kommer att Äterkomma till detta Àmne nÀr vi diskuterar körning av Android-emulatorer inuti containrar, eftersom det hÀr finns en mycket viktig detalj som vi behöver gÄ igenom mer ingÄende.
VÀrde för automatiseringsinfrastruktur
Vi har kommit fram till att containerisering och Docker Àr fantastiskt. LÄt oss se pÄ detta i kontexten av automatisering, eftersom varje verktyg eller teknologi mÄste lösa nÄgot problem. LÄt oss identifiera de uppenbara problemen med automatisering av tester i kontexten av UI-tester:
- ett enormt antal beroenden vid installation av Selenium och sÀrskilt Appium;
- kompatibilitetsproblem mellan webblÀsarversioner, simulatorer och drivrutiner;
- brist pÄ isolerat utrymme för webblÀsare/simulatorer, vilket Àr sÀrskilt kritiskt för parallell körning;
- svÄrt att hantera och underhÄlla om man behöver köra 10, 50, 100 eller till och med 1000 webblÀsare samtidigt.
Men eftersom Selenium Ă€r det mest populĂ€ra verktyget för automatisering och Docker Ă€r det mest populĂ€ra verktyget för containerisering, borde det inte förvĂ„na nĂ„gon att nĂ„gon har försökt att kombinera dem för att fĂ„ ett kraftfullt verktyg för att lösa de ovan nĂ€mnda problemen. LĂ„t oss titta pĂ„ sĂ„dana lösningar mer i detalj.Â
Selenium grid in docker
Det hÀr verktyget Àr det mest populÀra i vÀrlden för att köra flera webblÀsare pÄ flera maskiner och hantera dem frÄn en central nod. För att köra det mÄste minst tvÄ delar registreras: Hub och Node(s). Hub Àr den centrala noden som tar emot alla förfrÄgningar frÄn tester och fördelar dem till de aktuella noderna. För varje nod kan vi konfigurera specifika instÀllningar, till exempel genom att ange vilken webblÀsare och vilken version som behövs. Men vi mÄste fortfarande se till att de kompatibla drivrutinerna för webblÀsarna finns och installeras pÄ de aktuella noderna. Av denna anledning anvÀnds Selenium grid sÀllan i sin rena form, utom nÀr vi behöver arbeta med webblÀsare som inte kan installeras pÄ Linux OS. För alla andra situationer Àr anvÀndningen av Docker-bilder för att köra Selenium grid Hub och Noder en mycket flexibel och korrekt lösning. Detta tillvÀgagÄngssÀtt förenklar hanteringen av noderna avsevÀrt, eftersom vi kan vÀlja den bild som passar oss med redan installerade kompatibla versioner av webblÀsare och drivrutiner.
Trots negativa omdömen om stabiliteten vid körning av ett stort antal noder parallellt, förblir Selenium grid fortfarande det mest populÀra verktyget för parallell körning av Selenium-tester. Det Àr viktigt att notera att det stÀndigt görs olika förbÀttringar och modifieringar av detta verktyg inom open-source som ÄtgÀrdar olika flaskhalsar.
Selenoid för Web
Det hÀr verktyget Àr ett genombrott inom Selenium, eftersom det fungerar direkt ur boxen och har gjort livet betydligt enklare för mÄnga automatiseringsingenjörer. Först och frÀmst Àr det inte en ny version av Selenium Grid. IstÀllet har utvecklarna skapat en helt ny version av Selenium Hub i Golang, vilket i kombination med lÀtta Docker-bilder för olika webblÀsare har gett ett viktigt lyft för testautomatisering. Dessutom, nÀr det gÀller Selenium Grid mÄste vi pÄ förhand definiera alla nödvÀndiga webblÀsare och deras versioner, vilket inte Àr ett problem nÀr vi endast arbetar med en viss webblÀsare. Men nÀr det handlar om flera stödjande webblÀsare Àr Selenoid den bÀsta lösningen, tack vare funktionen 'webblÀsare pÄ begÀran'. Allt vi behöver göra Àr att pÄ förhand ladda ner de nödvÀndiga bilderna med webblÀsare och uppdatera konfigurationsfilen som Selenoid interagerar med. NÀr Selenoid fÄr en begÀran frÄn testerna startar den automatiskt rÀtt container med rÀtt webblÀsare. NÀr testen Àr avslutade stÀnger Selenoid ner containern, vilket frigör resurser för nÀsta begÀran. Denna metod eliminerar helt den kÀnda problemet med 'noddegradering', som vi ofta stöter pÄ i Selenium Grid.
Men tyvÀrr Àr Selenoid fortfarande ingen lösning pÄ alla problem. Vi har fÄtt funktionen 'webblÀsare pÄ begÀran', men funktionen 'resurser pÄ begÀran' Àr fortfarande inte tillgÀnglig. För att anvÀnda Selenoid mÄste vi distribuera det pÄ fysisk hÄrdvara eller pÄ en virtuell maskin, vilket innebÀr att vi pÄ förhand mÄste veta hur mycket resurser vi behöver tilldela. Jag tror inte att detta Àr ett problem för smÄ projekt som kör 10, 20 eller till och med 30 webblÀsare parallellt. Men vad hÀnder om vi behöver 100, 500, 1000 och mer? Det Àr meningslöst att stÀndigt stötta och betala för ett sÄdant antal resurser. I avsnitt 5 och 6 av denna artikel kommer vi att diskutera lösningar som möjliggör skalning, vilket avsevÀrt minskar företagets kostnader.
Selenoid för Android
Efter framgĂ„ngen med Selenoid som verktyg för webbautomatisering ville folk ha nĂ„got liknande för Android. Och detta har nu blivit verklighet â Selenoid har slĂ€ppts med stöd för Android. Ur ett högre anvĂ€ndarperspektiv fungerar den pĂ„ samma sĂ€tt som webbautomatisering. Den enda skillnaden Ă€r att istĂ€llet för behĂ„llare med webblĂ€sare kör Selenoid behĂ„llare med Android-emulatorer. Enligt min mening Ă€r detta just nu det mest kraftfulla gratisverktyget för att köra Android-tester parallellt.
Jag skulle verkligen inte vilja talk om de negativa aspekterna av detta verktyg, eftersom jag faktiskt gillar det mycket. Men det finns ÀndÄ nÄgra nackdelar som ocksÄ gÀller webbautomatisering, relaterat till skalbarhet. Dessutom mÄste jag nÀmna en annan begrÀnsning som kan komma som en överraskning om vi konfigurerar verktyget för första gÄngen. För att köra Android-bilder behöver vi en fysisk maskin eller en VM med stöd för nested virtualisation. I den praktiska guiden visar jag hur man aktiverar detta pÄ Linux VM. Men om du Àr en macOS-anvÀndare och vill köra Selenoid lokalt, kommer det att vara omöjligt att köra Android-tester. Men du kan alltid köra en Linux VM lokalt med konfigurerad 'nested virtualisation' och köra Selenoid inuti.
Illustration av det nuvarande tillstÄndet för infrastrukturen
I denna artikel kommer vi att lĂ€gga till tvĂ„ verktyg för att illustrera infrastrukturen. Detta Ă€r Selenium grid för webbtester och Selenoid för Android-tester. I guiden pĂ„ GitHub visar jag ocksĂ„ hur man anvĂ€nder Selenoid för att köra webbtester.Â

LÀnkar för studier
Liknande verktyg
- Det finns andra containeriseringsverktyg, men Docker Ă€r det mest populĂ€ra. Om du vill prova nĂ„got annat, kom ihĂ„g att de verktyg vi har granskat för parallell körning av Selenium-tester inte kommer att fungera direkt. Â
- Som redan nÀmnts finns det mÄnga modifikationer av Selenium grid, till exempel.
4. CI / CD
Kort beskrivning av tekniken
Praktiken för kontinuerlig integration Àr ganska populÀra inom utveckling och stÄr pÄ samma nivÄ som versionshanteringssystem. Trots detta kÀnner jag att det finns förvirring kring terminologin. I detta stycke skulle jag vilja beskriva tre modifieringar av denna teknik utifrÄn mitt perspektiv. PÄ internet kan du hitta mÄnga artiklar med olika tolkningar, och det Àr helt okej om din Äsikt avviker. Det viktigaste Àr att ni Àr pÄ samma sida som era kollegor.
SĂ„ledes finns det tre termer: CI â Continuous Integration (kontinuerlig integration), CD â Continuous Delivery (kontinuerlig leverans) och Ă„terigen CD â Continuous Deployment (kontinuerlig driftsĂ€ttning). (Vidare kommer jag att anvĂ€nda dessa termer pĂ„ engelska). Varje modifiering lĂ€gger till nĂ„gra extra steg till din utvecklingspipeline. Men ordet continuous (kontinuerlig) Ă€r det mest centrala. I detta sammanhang avser vi nĂ„got som sker frĂ„n början till slut, utan avbrott eller manuell inblandning. LĂ„t oss titta pĂ„ CI & CD och CD i detta sammanhang.
- Continuous Integration â Ă€r det inledande steget i evolutionen. Efter att ny kod har skickats till servern förvĂ€ntar vi oss att fĂ„ snabb feedback, att allt Ă€r okej med vĂ„ra Ă€ndringar. Vanligtvis inkluderar CI körning av verktyg för statisk kodanalys och modulĂ€ra/interna API-tester. Detta gör det möjligt att fĂ„ information om vĂ„r kod nĂ„gra sekunder/minuter senare.
- Kontinuerlig leverans Àr ett mer avancerat steg, dÀr vi kör integrations/UI-tester. Men i detta skede fÄr vi inte resultat lika snabbt som i fallet med CI. För det första tar dessa typer av tester lÀngre tid att genomföra. För det andra mÄste vi före körningen distribuera vÄra Àndringar pÄ test/staging-miljö. Dessutom, om vi pratar om mobilutveckling, tillkommer ett extra steg för att skapa en byggnad av vÄr applikation.
- Continuous Deployment innebÀr att vi automatiskt slÀpper (release) vÄra Àndringar till produktion om alla acceptanstester har passerats i de tidigare stegen. Dessutom kan olika steg, sÄsom att köra smoke-tester pÄ produktionen och samla intressanta mÀtvÀrden, konfigureras efter release-steget. Continuous Deployment Àr möjligt endast med bra tÀckning av automatiserade tester. Om nÄgra manuella ingrepp krÀvs, inklusive testning, sÄ Àr det inte lÀngre Continuous (kontinuerlig). DÄ kan vi sÀga att vÄr pipeline endast uppfyller praktiken för Continuous Delivery.
VÀrde för automatiseringsinfrastruktur
I detta avsnitt mÄste jag klargöra att nÀr vi pratar om end-to-end UI-tester, innebÀr det att vi mÄste distribuera vÄra Àndringar och relaterade tjÀnster till testmiljöer. Continuous Integration-processen Àr inte tillÀmplig pÄ denna uppgift och vi mÄste ta hand om att implementera minst Continuous Delivery-praktiker. Continuous Deployment har ocksÄ betydelse i samband med UI-tester om vi planerar att köra dem pÄ produktionen.
Och innan vi tittar pÄ illustrationen av förÀndringen i arkitekturen, vill jag sÀga nÄgra ord om GitLab CI. Till skillnad frÄn andra CI/CD-verktyg erbjuder GitLab ett fjÀrrarkiv och mÄnga andra ytterligare funktioner. SÄledes Àr GitLab mer Àn bara CI. Det inkluderar inbyggd kÀllkodshantering, Agile-hantering, CI/CD-pipelines, loggningsverktyg och insamling av mÀtvÀrden. Arkitekturen för GitLab bestÄr av GitLab CI/CD och GitLab Runner. HÀr Àr en kort beskrivning frÄn den officiella webbplatsen:
Gitlab CI/CD Àr en webbapplikation med ett API som lagrar sitt tillstÄnd i en databas, hanterar projekt/byggen och tillhandahÄller ett anvÀndargrÀnssnitt. GitLab Runner Àr en applikation som bearbetar byggen. Den kan distribueras separat och arbetar med GitLab CI/CD genom ett API. För att köra tester behöver du bÄde GitLab-instansen och Runnern.
Illustration av det nuvarande tillstÄndet för infrastrukturen

LÀnkar för studier
Liknande verktyg
- Â
- Och mÄnga andra
5. Molnplattformar
Kort beskrivning av tekniken
I det hÀr avsnittet kommer vi att diskutera en populÀr trend som kallas 'publika moln'. Trots den stora nytta som de ovan beskrivna teknologierna för virtualisering och containerisering ger, behöver vi fortfarande datorkapacitet. Företag köper dyra servrar eller hyr datacenter, men i sÄdana fall mÄste man göra berÀkningar (ibland orealistiska) om hur mycket resurser vi kommer att behöva, om vi kommer att anvÀnda dem 24/7 och för vilka ÀndamÄl. Till exempel, för produktion krÀvs det att servern Àr aktiv dygnet runt, men behöver vi liknande resurser för testning under outnyttjad tid? Detta beror ocksÄ pÄ typen av test som genomförs. Ett exempel kan vara belastnings-/stress-tester som vi planerar att köra under outnyttjad tid för att fÄ resultat nÀsta dag. Men, definitivt, dygnet runt tillgÄng pÄ servrar Àr inte nödvÀndig för end-to-end automatiserade tester och speciellt för miljöer för manuell testning. För sÄdana situationer skulle det vara bra att fÄ precis sÄ mycket resurser som behövs pÄ begÀran, anvÀnda dem och sluta betala nÀr de inte lÀngre behövs. Dessutom skulle det vara fantastiskt att fÄ dem omedelbart, efter att ha gjort nÄgra musklick eller kört ett par skript. Det Àr dÀrför publika moln anvÀnds. LÄt oss titta pÄ definitionen:
âDet publika molnet definieras som datortjĂ€nster som erbjuds av tredjepartsleverantörer över det offentliga internet, vilket gör dem tillgĂ€ngliga för alla som vill anvĂ€nda eller köpa dem. De kan vara gratis eller sĂ€ljas pĂ„ begĂ€ran, vilket gör att kunder endast betalar för den anvĂ€ndning av CPU-cykler, lagring eller bandbredd de konsumera.â
Det rĂ„der en uppfattning om att publika moln Ă€r dyra. Men deras centrala idĂ© Ă€r att minska företagets kostnader. Som nĂ€mnts tidigare möjliggör publika moln att fĂ„ resurser pĂ„ begĂ€ran och betala endast för den tid de anvĂ€nds. Dessutom glömmer vi ibland att anstĂ€llda fĂ„r lön och specialister Ă€r ocksĂ„ en dyr resurs. Det Ă€r viktigt att beakta att publika moln avsevĂ€rt förenklar supporten av infrastrukturen, vilket gör att ingenjörerna kan fokusera pĂ„ viktigare uppgifter.Â
VÀrde för automatiseringsinfrastruktur
Vilka specifika resurser behöver vi för end-to-end UI-tester? I huvudsak handlar det om virtuella maskiner eller kluster (vi kommer att prata om Kubernetes i nĂ€sta avsnitt) för att köra webblĂ€sare och emulatorer. Ju fler webblĂ€sare och emulatorer vi vill köra samtidigt, desto mer CPU och minne behövs, och desto mer pengar mĂ„ste vi betala för detta. PĂ„ sĂ„ sĂ€tt möjliggör offentliga moln i samband med testautomatisering att vi kan köra ett stort antal (100, 200, 1000âŠ) webblĂ€sare/emulatorer pĂ„ begĂ€ran, fĂ„ testresultat sĂ„ snabbt som möjligt och sluta betala för dessa galet resurskrĂ€vande resurser.Â
De mest populĂ€ra molnleverantörerna Ă€r Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP). I den praktiska guiden presenteras exempel pĂ„ anvĂ€ndning av GCP, men generellt spelar det ingen roll vad du faktiskt anvĂ€nder för automatiseringsuppgifter. De erbjuder alla ungefĂ€r samma funktionalitet. Vanligtvis fokuserar guiden pĂ„ hela företagets infrastruktur och affĂ€rskrav, vilket ligger utanför denna artikel. För automatiseringsingenjörer skulle det vara mer intressant att jĂ€mföra anvĂ€ndningen av molnleverantörer med anvĂ€ndning av molnplattformar specifikt för testningsĂ€ndamĂ„l, som Sauce Labs, BrowserStack, BitBar och sĂ„ vidare. SĂ„ lĂ„t oss göra det! Enligt min Ă„sikt Ă€r Sauce Labs den mest kĂ€nda molntestningsplattformen, dĂ€rför valde jag den för jĂ€mförelse.Â
GCP mot Sauce Labs för automatiseringsÀndamÄl:
LĂ„t oss anta att vi behöver köra 8 web-tester och 8 Android-tester samtidigt. För detta kommer vi att anvĂ€nda GCP och starta 2 virtuella maskiner med Selenoid. PĂ„ den första ska vi köra 8 containrar med webblĂ€sare. PĂ„ den andra â 8 containrar med emulatorer. LĂ„t oss titta pĂ„ priserna: Â

För att starta en container med Chrome behöver vi n1-standard-1 maskin. I fallet med Android blir det n1-standard-4 för en emulator. Egentligen Àr ett mer flexibelt och billigare sÀtt att ange specifika anvÀndarvÀrden för CPU/Minne, men för tillfÀllet Àr detta inte avgörande för jÀmförelsen med Sauce Labs.
HÀr Àr priserna för att anvÀnda Sauce Labs:

Jag antar att du redan har mÀrkt skillnaden, men jag ger fortfarande en tabell med berÀkningar för vÄr uppgift:
NödvÀndiga resurser
MÄnadsvis
Arbetstimmar(8 a.m â 8 p.m)
Arbetstimmar+ Preemptible
GCP för Web
n1-standard-1 x 8 = n1-standard-8
$194.18
23 dagar * 12h * 0.38 = 104.88$Â
23 dagar * 12h * 0.08 = 22.08$
Sauce Labs för Web
Virtuell Cloud8 parallella tester
$1.559
â
â
GCP för Android
n1-standard-4 x 8: n1-standard-16
$776.72
23 dagar * 12h * 1.52 = 419.52$Â
23 dagar * 12h * 0.32 = 88.32$
Sauce Labs för Android
Real Device Cloud 8 parallella tester
$1.999
â
â
Som du kan se, Àr kostnadsskillnaden enorm, sÀrskilt om testerna körs endast under den arbetsmÀssiga tolv timmars perioden. Men kostnaderna kan ytterligare minskas om preemptible maskiner anvÀnds. Vad innebÀr det?
En preemptible VM Àr en instans som du kan skapa och köra till ett mycket lÀgre pris Àn vanliga instanser. Men Compute Engine kan avbryta (preempt) dessa instanser om den behöver tillgÄng till dessa resurser för andra uppgifter. Preemptible instanser Àr överskottskapacitet frÄn Compute Engine, sÄ deras tillgÀnglighet varierar med anvÀndning.
Om dina appar Àr fel-tÄliga och kan stÄ emot möjliga instans-avbrott, kan preemptible instanser minska dina Compute Engine-kostnader avsevÀrt. Till exempel kan batchbearbetningsjobb köras pÄ preemptible instanser. Om nÄgra av dessa instanser avslutas under bearbetningen saktas jobbet ned men stoppas inte helt. Preemptible instanser slutför dina batchbearbetningsuppgifter utan att öka arbetsbelastningen pÄ dina befintliga instanser och utan att du behöver betala fullt pris för ytterligare normala instanser.
Och det Ă€r fortfarande inte slut! I verkligheten Ă€r jag sĂ€ker pĂ„ att ingen kör tester i 12 timmar utan avbrott. Och om sĂ„ Ă€r fallet, kan du automatiskt starta och stoppa virtuella maskiner nĂ€r de inte behövs. Den verkliga anvĂ€ndningen kan minskas till 6 timmar per dag. DĂ„ skulle kostnaden i vĂ„r situation sjunka till sĂ„ lĂ„gt som 11$ i mĂ„naden för 8 webblĂ€sare. Ăr inte det fantastiskt? Men med preemptible maskiner mĂ„ste vi vara försiktiga och förberedda pĂ„ avbrott och instabilitet, Ă€ven om dessa situationer kan förutses och hanteras programmĂ€ssigt. Det Ă€r vĂ€rt det!
Men jag sÀger absolut inte 'anvÀnd aldrig molntestfarmar'. De har flera fördelar. För det första Àr det inte bara en virtuell maskin, utan en fullstÀndig lösning för automatisering av tester med ett paket funktioner direkt ur lÄdan: fjÀrrÄtkomst, loggar, skÀrmdumpar, videoinspelningar, olika webblÀsare och fysiska mobila enheter. I mÄnga situationer kan detta vara en ovÀrderlig och lyxig alternativ. SÀrskilt testplattformar Àr anvÀndbara för IOS-automatisering, dÀr offentliga moln endast kan erbjuda Linux-/Windows-system. Men samtalet om IOS kommer att vara i kommande artiklar. Jag rekommenderar alltid att man bedömer situationen och utgÄr frÄn uppgifterna: i vissa fall Àr det billigare och mer effektivt att anvÀnda offentliga moln, medan det i andra fall Àr testplattformar som definitivt Àr vÀrda pengarna.
Illustration av det nuvarande tillstÄndet för infrastrukturen

LÀnkar för studier
Liknande verktyg:
- Â
6. Orkestrering
Kort beskrivning av tekniken
Jag har goda nyheter â vi har nĂ€stan nĂ„tt slutet av artikeln! För nĂ€rvarande bestĂ„r vĂ„r automatiseringsinfrastruktur av web och Android-tester som vi kör parallellt via GitLab CI, med hjĂ€lp av verktyg som stöder Docker: Selenium grid och Selenoid. Dessutom anvĂ€nder vi virtuella maskiner skapade via GCP för att köra containrar med webblĂ€sare och emulatorer. För att minska kostnaderna kör vi dessa virtuella maskiner endast pĂ„ begĂ€ran och stĂ€nger av dem nĂ€r testerna inte utförs. Finns det nĂ„got mer som kan förbĂ€ttra vĂ„r infrastruktur? Svaret Ă€r ja! HĂ€r Ă€r Kubernetes (K8s)!
För att börja, lÄt oss se hur orden orkestrering, kluster och Kubernetes Àr relaterade. PÄ en hög nivÄ Àr orkestrering ett system som distribuerar och hanterar applikationer. För automatisering av tester Àr sÄdana containeriserade applikationer Selenium grid och Selenoid. Docker och K8s kompletterar varandra. Den första anvÀnds för att distribuera applikationer, den andra för orkestrering. à sin sida Àr K8s ett kluster. Klusterets uppgift Àr att anvÀnda VMs som noder, vilket gör att olika funktionaliteter, program och tjÀnster kan installeras inom en server (kluster). Om nÄgon av noderna faller, sÄ tar andra noder över, vilket sÀkerstÀller att vÄr applikation fungerar oavbrutet. Utöver detta har K8s viktig funktionalitet relaterad till skalning, vilket gör att vi automatiskt fÄr optimalt antal resurser baserat pÄ belastning och angivna begrÀnsningar.
Ărligt talat Ă€r manuell driftsĂ€ttning av Kubernetes frĂ„n grunden en ganska komplicerad uppgift. Jag kommer att lĂ€mna en lĂ€nk till den kĂ€nda praktiska guiden "Kubernetes The Hard Way", och om du Ă€r intresserad kan du öva pĂ„ det. Men lyckligtvis finns det alternativ och verktyg. Det enklaste av dem Ă€r att anvĂ€nda Google Kubernetes Engine (GKE) i GCP, vilket ger en fĂ€rdig kluster efter nĂ„gra klick. För att börja rekommenderar jag verkligen att anvĂ€nda denna metod, eftersom den lĂ„ter dig fokusera pĂ„ hur du kan anvĂ€nda K8s för dina uppgifter istĂ€llet för att undersöka hur de interna komponenterna bör integreras med varandra.Â
VÀrde för automatiseringsinfrastruktur
LÄt oss titta pÄ nÄgra viktiga funktioner som K8s erbjuder:
- applikationsdistribuering: anvÀndning av multi-nodes kluster istÀllet för VMs;
- dynamisk skalning: minskar kostnader för resurser som anvÀnds endast vid behov;
- sjÀlvÄterstÀllning (Self-healing): automatisk ÄterstÀllning av pods (vilket i sin tur ÄterstÀller containrar);
- utrullning av uppdateringar och ÄtergÄr till Àndringar utan driftstopp: uppdatering av verktyg, webblÀsare och emulatorer avbryter inte nuvarande anvÀndare
Men K8s Àr fortfarande inte en silverkula. För att förstÄ alla fördelar och begrÀnsningar i sammanhanget av de verktyg vi diskuterar (Selenium grid, Selenoid) ska vi kort diskutera strukturen av K8s. Kluster innehÄller tvÄ typer av noder: Master Nodes och Worker Nodes. Master Nodes ansvarar för hantering, distribuerande och schemalÀggningsbeslut. Worker nodes Àr dÀr applikationerna körs. Noder innehÄller ocksÄ en körmiljö för containrar. I vÄrt fall Àr det Docker, som ansvarar för operationer relaterade till containrar. Men det finns ocksÄ alternativa lösningar, till exempel. Det Àr viktigt att förstÄ att skalning eller sjÀlvÄterstÀllning inte hÀnför sig direkt till containrar. Detta realiseras genom att lÀgga till/minska antalet pods, som i sin tur innehÄller containrar (vanligtvis en container per pod, men beroende pÄ uppgiften kan det vara fler). Den högre hierarkin representerar worker nodes, inom vilka pods finns, inuti vilka containrar körs.
Skalningsfunktionen Àr avgörande och kan tillÀmpas bÄde pÄ noder inom klustrets nodpool och pÄ pods inom noden. Det finns tvÄ typer av skalning som gÀller bÄde noder och pods. Den första typen - horisontell - innebÀr att antalet noder/pods ökas. Denna typ Àr mer föredragen. Den andra typen, motsvarande, Àr vertikal. Skalningen genomförs genom att öka storleken pÄ noder/pods snarare Àn deras antal.
Nu ska vi titta pÄ vÄra verktyg i samband med de ovan nÀmnda termerna.
Selenium grid
Som nÀmnts tidigare Àr Selenium grid ett mycket populÀrt verktyg, och det Àr ingen överraskning att det har containeriserats. DÀrför Àr det inte förvÄnande att Selenium grid kan distribueras i K8s. Ett exempel pÄ hur detta görs kan hittas i det officiella K8s-repositoriet. Som vanligt bifogar jag lÀnkar i slutet av avsnittet. Utöver detta visar en praktisk guide hur man gör det med Terraform. Det finns ocksÄ en instruktion för hur man skalar antalet pods som innehÄller containrar med webblÀsare. Men automatisk skalning i kontexten av K8s Àr fortfarande en uppgift som inte Àr helt uppenbar. NÀr jag började studera hittade jag ingen praktisk guide eller rekommendationer. Efter flera undersökningar och experiment med stöd frÄn vÄrt DevOps-team valde vi metoden att lyfta containrar med de önskade webblÀsarna inom en pod som ligger inom en arbetsnod. Denna metod gör det möjligt för oss att tillÀmpa en strategi för horisontell skalning av noder genom att öka deras antal. Jag hoppas att situationen förÀndras i framtiden, och att vi ser fler och fler beskrivningar av de bÀsta metoderna och fÀrdiga lösningarna, sÀrskilt efter lanseringen av Selenium grid 4 med en Àndrad intern arkitektur.
Selenoid:
För nÀrvarande Àr distribuerar Selenoid i K8s den största besvikelsen. De Àr inte kompatibla. Teoretiskt kan vi lyfta Selenoid-containern inom en pod, men nÀr Selenoid börjar köra containrar med webblÀsare kommer de fortfarande att vara inom samma pod. Detta gör skalning omöjlig och som ett resultat kommer driften av Selenoid inom klustret inte att skilja sig frÄn driften inom en virtuell maskin. Slutet pÄ historien.
Moon:
Med vetskap om denna flaskhals nĂ€r man arbetar med Selenoid har utvecklarna slĂ€ppt ett kraftfullare verktyg som de kallat Moon. Detta verktyg var ursprungligen avsett för anvĂ€ndning med Kubernetes och som ett resultat kan och bör man anvĂ€nda automatiseringsfunktionen. Dessutom skulle jag sĂ€ga att just nu Ă€r detta den enda verktyget i vĂ€rlden av Selenium som har native K8s-klusterstöd direkt ur lĂ„dan (inte lĂ€ngre, se nĂ€sta verktyg ). En nyckelfunktion hos Moon som möjliggör detta stöd Ă€r:Â
Helt stateless. Selenoid lagrar i minnet information om för nÀrvarande aktiva webblÀsarsessioner. Om dess process av nÄgon anledning kraschar förloras alla aktiva sessioner. Moon dÀremot har inget internt tillstÄnd och kan replikeras över datacentren. WebblÀsarsessioner förblir aktiva Àven om en eller flera repliker gÄr ner.
SÄ, Moon Àr en fantastisk lösning, men med ett problem, det Àr inte gratis. Priset beror pÄ antalet sessioner. Gratis kan man endast köra 0-4 sessioner, vilket inte Àr sÀrskilt anvÀndbart. Men frÄn och med den femte sessionen mÄste man betala 5 $ för varje. Situationen kan variera mellan företag, men i vÄrt fall Àr anvÀndningen av Moon meningslös. Som jag beskrev ovan kan vi starta VMs med Selenium Grid pÄ begÀran eller öka antalet noder i klustret. För varje pipeline kör vi cirka 500 webblÀsare och stoppar alla resurser efter att testerna Àr utförda. Om vi skulle anvÀnda Moon skulle vi behöva betala ytterligare 500 x 5 = 2500 $ i mÄnaden, oavsett hur ofta vi kör tester. Och Äterigen, jag sÀger inte "anvÀnd inte Moon". För dina behov kan det vara en ovÀrderlig lösning, sÀrskilt om du har mÄnga projekt/team inom organisationen och behöver ett stort gemensamt kluster för alla. Som alltid lÀmnar jag en lÀnk i slutet och rekommenderar att göra alla nödvÀndiga berÀkningar i förhÄllande till din uppgift.
Callisto: (Observera! Detta finns inte i den ursprungliga artikeln och finns endast i den ryska översÀttningen.)
Som jag sa tidigare Ă€r Selenium ett mycket populĂ€rt verktyg och IT-omrĂ„det utvecklas snabbt. Medan jag arbetade med översĂ€ttningen dök ett nytt lovande verktyg upp, Callisto (hej Cypress och andra Selenium-konkurrenter). Det fungerar nativt med K8s och gör det möjligt att köra Selenoid-containrar i pods, fördelat pĂ„ Nodes. Allt fungerar direkt ur lĂ„dan, inklusive automatisk skalning. Fantastiskt, men det mĂ„ste testas. Jag har redan lyckats implementera detta verktyg och köra nĂ„gra experiment. Men det Ă€r för tidigt att dra slutsatser, efter att jag fĂ„tt resultaten pĂ„ lĂ„ng sikt kanske jag gör en översikt i kommande artiklar. Tills vidare lĂ€mnar jag bara lĂ€nkar för sjĂ€lvstĂ€ndiga studier. Â
Illustration av det nuvarande tillstÄndet för infrastrukturen
LÀnkar för studier

LÀnkar för studier
Liknande verktyg
- Â
- Â
7. Infrastruktur som kod (IaC)
Kort beskrivning av tekniken
Och hÀr har vi kommit till den sista delen. Vanligtvis faller denna teknik och relaterade uppgifter utanför ansvarsomrÄdet för automatiseringsingenjörer. Och det finns anledning till det. För det första ligger infrastrukturella frÄgor under DevOps-avdelningens kontroll i mÄnga organisationer, och utvecklingsteamet bryr sig inte sÄ mycket om vad som driver pipeline eller hur man ska underhÄlla allt som hör till den. För det andra, lÄt oss vara Àrliga, praktiken "Infrastruktur som kod (IaC)" tillÀmpas fortfarande inte i mÄnga företag. Men det har definitivt blivit en populÀr trend och det Àr viktigt att försöka vara involverad i de relaterade processerna, metoderna och verktygen. Eller Ätminstone hÄlla sig informerad om vad som hÀnder.
LÄt oss börja med motivationen för att anvÀnda detta tillvÀgagÄngssÀtt. Vi har redan diskuterat att för att köra tester i GitlabCI behöver vi minst resurser för att köra Gitlab Runner. Och för att starta containrar med webblÀsare/emulatorer mÄste vi reservera en VM eller en kluster. Förutom resurserna för testning behöver vi Àven betydande kapacitet för att upprÀtthÄlla utvecklings-, staging- och produktionsmiljöer, vilket Àven inkluderar databaser, automatiska scheman, nÀtverkskonfigurationer, lastbalanserare, anvÀndarrÀttigheter och sÄ vidare. Det centrala problemet Àr de nödvÀndiga insatserna för att stödja allt detta. Det finns flera sÀtt att göra Àndringar och implementera uppdateringar. Till exempel, i kontexten av GCP kan vi anvÀnda UI-konsolen i webblÀsaren och utföra alla ÄtgÀrder genom att klicka pÄ knappar. Ett alternativ kan vara att anvÀnda API-anrop för att interagera med molnentiteter eller att anvÀnda kommandoradsverktyget gcloud för att utföra nödvÀndiga manipulationer. Men med en verkligt stor mÀngd olika entiteter och infrastrukturkomponenter blir det svÄrt eller till och med omöjligt att utföra alla operationer manuellt. Dessutom Àr alla dessa manuella ÄtgÀrder okontrollerade. Vi kan inte skicka dem pÄ granskning innan de genomförs, anvÀnda versionskontrollsystem och snabbt ÄterstÀlla Àndringar som ledde till en incident. För att lösa sÄdana problem har ingenjörer skapat och fortsÀtter att skapa automatiska bash/shell-skript, vilket inte Àr mycket bÀttre Àn de tidigare metoderna, eftersom de inte Àr lÀtta att snabbt lÀsa, förstÄ, underhÄlla och modifiera i procedurstil.
I den hÀr artikeln och den praktiska guiden anvÀnder jag 2 verktyg som relaterar till praktiken IaC. Dessa Àr Terraform och Ansible. Vissa anser att det inte Àr meningsfullt att anvÀnda dem samtidigt, eftersom deras funktionalitet Àr liknande och de Àr utbytbara. Men saken Àr den att de ursprungligen stÀlls inför helt olika uppgifter. Faktumet att dessa verktyg ska komplettera varandra har bekrÀftats vid en gemensam presentation av utvecklare frÄn företagen HashiCorp och RedHat. Den konceptuella skillnaden Àr att Terraform Àr ett provisioning-verktyg för att hantera sjÀlva servrarna. Medan Ansible Àr ett verktyg för hantering av konfigurationer, vars uppgift Àr att installera, konfigurera och hantera mjukvara pÄ dessa servrar.
En annan nyckelskillnad mellan dessa verktyg Ă€r kodskrivningsstilen. Till skillnad frĂ„n bash och Ansible, anvĂ€nder Terraform en deklarativ stil, baserad pĂ„ beskrivningen av det önskade slutgiltiga tillstĂ„ndet som mĂ„ste uppnĂ„s som resultat av utförandet. Till exempel, om vi kĂ€nner för att skapa 10 VMs och tillĂ€mpa förĂ€ndringar genom Terraform, sĂ„ fĂ„r vi 10 VMs. Om vi kör skriptet igen, hĂ€nder ingenting, eftersom vi redan har 10 VMs, och Terraform vet detta, eftersom det lagrar det aktuella tillstĂ„ndet av infrastrukturen i en state-fil. Men Ansible anvĂ€nder ett proceduralt tillvĂ€gagĂ„ngssĂ€tt och, om vi ber det att skapa 10 VMs, sĂ„ fĂ„r vi 10 VMs vid första körningen, pĂ„ samma sĂ€tt som med Terraform. Men efter att ha kört det igen, kommer vi att ha 20 VMs. Detta utgör den viktiga skillnaden. I den procedurala stilen lagrar vi inte det aktuella tillstĂ„ndet utan beskriver helt enkelt sekvensen av steg som mĂ„ste utföras. Naturligtvis kan vi hantera olika situationer, lĂ€gga till nĂ„gra kontroller för att kontrollera resurser och aktuellt tillstĂ„nd, men det Ă€r meningslöst att slösa vĂ„r tid och energi pĂ„ att kontrollera denna logik. Dessutom ökar det risken för att göra misstag.Â
Sammanfattningsvis kan vi dra slutsatsen att det mer lÀmpliga verktyget för provisioning av servrar Àr Terraform och deklarativ notation. à andra sidan Àr det bÀttre att delegera konfigureringens hantering till Ansible. NÀr vi har förstÄtt detta, lÄt oss ta en titt pÄ exempel pÄ anvÀndning i kontexten av automatisering.
VÀrde för automatiseringsinfrastruktur
HĂ€r Ă€r det viktigt att förstĂ„ att testautomatiseringsinfrastrukturen bör ses som en del av hela företagets infrastruktur. Det betyder att alla IaC-praktiker bör tillĂ€mpas globalt pĂ„ resurserna i hela organisationen. Vem som Ă€r ansvarig för detta beror pĂ„ era processer. DevOps-teamet har mer erfarenhet inom dessa frĂ„gor, de ser hela bilden av vad som pĂ„gĂ„r. Men QA-ingenjörer Ă€r starkare involverade i processen för att bygga automatisering och strukturen för pipeline, vilket gör att de bĂ€ttre kan se alla nödvĂ€ndiga förĂ€ndringar och möjligheter till förbĂ€ttring. Den bĂ€sta lösningen Ă€r att arbeta tillsammans, dela kunskap och idĂ©er för att nĂ„ det förvĂ€ntade resultatet.Â
Jag ger nÄgra exempel pÄ anvÀndning av Terraform och Ansible i sammanhanget av testautomatisering och verktyg som vi diskuterat tidigare:
1. Beskriv de nödvÀndiga egenskaperna och parametrarna för VMs och kluster via Terraform.
2. Installera nödvÀndiga testverktyg med hjÀlp av Ansible: docker, Selenoid, Selenium Grid och ladda ner de nödvÀndiga versionerna av webblÀsare/emulatorer.
3. Beskriv via Terraform egenskaperna hos VM:n dÀr GitLab Runner kommer att köras.
4. Installera GitLab Runner och nödvÀndiga tillhörande verktyg med hjÀlp av Ansible, ange instÀllningar och konfigurationer.
Illustration av det nuvarande tillstÄndet för infrastrukturen

Resurser för studier:
Liknande verktyg
LÄt oss sammanfatta!
Steg
Teknik
Verktyg
VÀrde för automatiseringsinfrastruktur
1
Lokal körning
Node.js, Selenium, Appium
- De mest populÀra verktygen för web och mobil
- Stöd för mÄnga sprÄk och plattformar (inklusive Node.js)
2
VersionshanteringssystemÂ
Git
- Liknande fördelar med utvecklingskoden
3
Containerisering
Docker, Selenium grid, Selenoid (Web, Android)
- Parallell körning av tester
- Isolerade miljöer
- Enkel, flexibel uppdatering av versioner
- Dynamisk stopp av oanvÀnda resurser
- LĂ€tt att konfigurera
4
CI / CD
Gitlab CI
- Tester Àr en del av pipeline
- Snabb feedback
- Synlighet för hela företaget/teamet
5
Molnplattformar
Google Cloud Platform
- Resurser pÄ begÀran (betala bara nÀr de behövs)
- LĂ€tt att hantera och uppdatera
- Synlighet och kontroll över alla resurser
6
Orkestrering
Kubernetes
I kontexten av containrar med webblÀsare/emulatorer inuti pods:
- Skalning / automatisk skalning
- SjÀlvÄterstÀllning
- Uppdateringar och ÄterstÀllningar utan avbrott
7
Infrastruktur som kod (IaC)
Terraform, Ansible
- Liknande fördelar med utvecklingsinfrastrukturen
- Alla fördelar med versionshantering av koden
- LÀtt att göra förÀndringar och underhÄlla
- Helt automatiserat
Mind map-diagrammer: evolutionen av infrastrukturen
steg1: Lokal

steg2: VCS

steg3: ContaineriseringÂ

steg4: CI/CDÂ

steg5: Molnplattformar

steg6: Orkestrering

steg7: IaC

Vad hÀnder hÀrnÀst?
SÄ, det hÀr Àr slutet pÄ artikeln. Men som avslutning skulle jag vilja faststÀlla nÄgra överenskommelser med er.
FrÄn er sida
Som jag nÀmnde tidigare, skulle jag vilja att artikeln bÀr praktiskt vÀrde och hjÀlper er att applicera de kunskaper ni fÄtt i verkligt arbete. Jag lÀgger till lÀnken till den praktiska guiden Ànnu en gÄng.
Men Àven efter detta, tveka inte att öva, studera relevanta lÀnkar och böcker, ta reda pÄ hur det fungerar i ert företag, identifiera omrÄden som kan förbÀttras och delta i detta. Lycka till!
FrÄn min sida
Av rubriken framgÄr det att detta bara var den första delen. Trots att den blev ganska lÄng, kvarstÄr fortfarande viktiga Àmnen. I den andra delen planerar jag att diskutera automatiseringsinfrastruktur i sammanhanget av iOS. PÄ grund av Apples begrÀnsningar kring körning av iOS-simulatorer endast pÄ macOS-system, Àr vÄrt urval av lösningar begrÀnsat. Till exempel, vi har inte möjlighet att anvÀnda Docker för att köra simulatorn eller offentliga moln för att köra virtuella maskiner. Men det betyder inte att det inte finns andra alternativ. Jag kommer att försöka hÄlla er uppdaterade om de senaste lösningarna och moderna verktygen!
Jag nÀmnde ocksÄ inte de ganska stora Àmnena relaterade till övervakning. I del 3 avser jag att diskutera de mest populÀra verktygen för övervakning av infrastruktur, samt vilka data och metrik man bör ta hÀnsyn till.
Och till sist. I framtiden planerar jag att slÀppa en videokurs om att bygga testinfrastruktur och populÀra verktyg. För nÀrvarande finns det ganska mÄnga kurser och förelÀsningar om DevOps pÄ internet, men allt material presenteras i samband med utveckling, men inte automatisering av tester. I den hÀr frÄgan behöver jag verkligen feedback, om en sÄdan kurs skulle vara intressant och vÀrdefull för testare och automatiserare. Tack pÄ förhand!
KĂ€lla: habr.com
