{"id":78676,"date":"2020-04-21T07:42:22","date_gmt":"2020-04-21T05:42:22","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya"},"modified":"2020-04-21T07:42:22","modified_gmt":"2020-04-21T05:42:22","slug":"devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","title":{"rendered":"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Del 1: Web \/ Android<\/h1>\n<p>\n <u>Anm\u00e4rkning<\/u>: <i>denna artikel \u00e4r en \u00f6vers\u00e4ttning till ryska av den ursprungliga artikeln\u00a0<\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@altunin.alexey.a\/devops-tools-are-not-only-for-devops-building-test-automation-infrastructure-from-scratch-18e351dde938?source=friends_link&amp;sk=54dcbf6ab96c5592d093b50e441f942e\"><i>\u00abDevOps-verktyg \u00e4r inte bara f\u00f6r DevOps. Att bygga testautomationsinfrastruktur fr\u00e5n grunden\u00bb.<\/i><\/a><\/noindex><i> Alla illustrationer, l\u00e4nkar, citat och termer har dock beh\u00e5llits p\u00e5 originalspr\u00e5ket f\u00f6r att undvika att betydelsen f\u00f6rvr\u00e4ngs vid \u00f6vers\u00e4ttningen till ryska. Jag \u00f6nskar er en trevlig studie!<\/i><\/p>\n<p><img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/3d2ffb8331713a18755213cafac02144.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n F\u00f6r n\u00e4rvarande \u00e4r DevOps en av de mest efterfr\u00e5gade yrkena inom IT-branschen. Om du \u00f6ppnar popul\u00e4ra jobb-s\u00f6kningssajter och st\u00e4ller in din s\u00f6kfilter f\u00f6r l\u00f6ner, s\u00e5 ser du att DevOps-relaterade jobb ligger h\u00f6gst p\u00e5 listan. Men det \u00e4r viktigt att f\u00f6rst\u00e5 att detta fr\u00e4mst g\u00e4ller \u2018Senior\u2019-positioner, vilket inneb\u00e4r att kandidaten har en h\u00f6g kompetensniv\u00e5, kunskaper om teknologier och verktyg. Detta medf\u00f6r \u00e4ven ett stort ansvar relaterat till att uppr\u00e4tth\u00e5lla produktionens stabilitet. Men vi har b\u00f6rjat gl\u00f6mma vad DevOps egentligen \u00e4r. Ursprungligen var det inte en specifik person eller avdelning. Om vi s\u00f6ker definitioner av detta begrepp, kommer vi att hitta m\u00e5nga vackra och korrekta substantiv som metodik, praktiker, kulturell filosofi, en grupp koncept m.m.<\/p>\n<p>Min specialisering \u00e4r testeringsautomatiseringsingenj\u00f6r (QA automation engineer), men jag anser att det inte bara b\u00f6r handla om att skriva automatiserade tester eller utveckla arkitekturen f\u00f6r testframework. \u00c5r 2020 \u00e4r kunskap om automatiseringsinfrastruktur ocks\u00e5 n\u00f6dv\u00e4ndigt. Det m\u00f6jligg\u00f6r att organisera automatiseringsprocessen p\u00e5 egen hand, fr\u00e5n att k\u00f6ra tester till att tillhandah\u00e5lla resultat till alla intresserade parter i linje med uppsatta m\u00e5l. Som resultat \u00e4r DevOps-f\u00e4rdigheter en obligatorisk faktor f\u00f6r att utf\u00f6ra detta arbete. Och allt detta \u00e4r bra, men tyv\u00e4rr finns det ett problem (<i>spoiler: denna artikel g\u00f6r f\u00f6rs\u00f6k att f\u00f6renkla detta problem<\/i>). Den best\u00e5r i att DevOps \u00e4r komplext. Och det \u00e4r uppenbart, f\u00f6r f\u00f6retag kommer inte att betala mycket f\u00f6r n\u00e5got som \u00e4r l\u00e4tt att g\u00f6ra... Inom DevOps finns det en m\u00e4ngd verktyg, termer och praktiker som m\u00e5ste beh\u00e4rskas. S\u00e4rskilt \u00e4r det sv\u00e5rt i b\u00f6rjan av karri\u00e4ren och beror p\u00e5 den m\u00e4ngd teknisk erfarenhet som samlats.<\/p>\n<p><img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/20712bd4acf881d5346b87f5a2b359d2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nK\u00e4lla: <noindex><a rel=\"nofollow\" href=\"http:\/\/maximelanciauxbi.blogspot.com\/2017\/04\/devops-tools.html\"> http:\/\/maximelanciauxbi.blogspot.com\/2017\/04\/devops-tools.html<\/a><\/noindex><\/p>\n<p>H\u00e4r avslutar vi nog med introduktionen och fokuserar p\u00e5 syftet med denna artikel.\u00a0<\/p>\n<h3>Vad handlar denna artikel om<\/h3>\n<p>\nI den h\u00e4r artikeln kommer jag att dela med mig av min erfarenhet av att bygga infrastruktur f\u00f6r testautomatisering. Det finns m\u00e5nga k\u00e4llor p\u00e5 internet om olika verktyg och hur man anv\u00e4nder dem, men jag skulle vilja diskutera dem uteslutande i kontexten av automatisering. Jag tror att m\u00e5nga automatiseringsingenj\u00f6rer k\u00e4nner igen situationen d\u00e4r de utvecklade testerna, f\u00f6rutom av er sj\u00e4lva, ingen k\u00f6r eller tar hand om dem. Som ett resultat blir testerna f\u00f6r\u00e5ldrade och man m\u00e5ste l\u00e4gga tid p\u00e5 att uppdatera dem. \u00c5terigen kan detta vara en ganska komplex uppgift i b\u00f6rjan av karri\u00e4ren: att smart besluta vilka verktyg som ska hj\u00e4lpa till att l\u00f6sa detta problem, hur man v\u00e4ljer dem, konfigurerar och underh\u00e5ller dem. Vissa testare s\u00f6ker hj\u00e4lp fr\u00e5n DevOps (personer) och, \u00e4rligt talat, s\u00e5 fungerar den metoden. I m\u00e5nga fall kan detta vara det enda alternativet, eftersom vi saknar insyn i alla beroenden. Men som vi vet, \u00e4r DevOps mycket upptagna m\u00e4nniskor, eftersom de m\u00e5ste t\u00e4nka p\u00e5 infrastrukturen f\u00f6r hela f\u00f6retaget, deployment, \u00f6vervakning, mikrotj\u00e4nster och andra liknande uppgifter beroende p\u00e5 organisationen\/teamet. Som det ofta \u00e4r, \u00e4r automatisering inte en prioritet. I s\u00e5dana fall m\u00e5ste vi f\u00f6rs\u00f6ka g\u00f6ra allt vi kan fr\u00e5n b\u00f6rjan till slut. Detta minskar beroenden, p\u00e5skyndar arbetsfl\u00f6det, f\u00f6rb\u00e4ttrar v\u00e5ra f\u00e4rdigheter och g\u00f6r att vi kan se en st\u00f6rre bild av vad som h\u00e4nder.<\/p>\n<p>Artikeln presenterar de mest efterfr\u00e5gade och popul\u00e4ra verktygen och visar hur man anv\u00e4nder dem f\u00f6r en steg-f\u00f6r-steg-byggnad av automatiseringsinfrastruktur. Varje grupp presenteras med verktyg som har pr\u00f6vats i personlig erfarenhet. Men det betyder inte att du m\u00e5ste anv\u00e4nda samma. Sj\u00e4lva verktygen \u00e4r inte viktiga, de kommer och g\u00e5r. V\u00e5r ingenj\u00f6rs uppgift \u00e4r att f\u00f6rst\u00e5 de grundl\u00e4ggande principerna: varf\u00f6r vi beh\u00f6ver denna grupp verktyg och vilka arbetsuppgifter vi kan l\u00f6sa med hj\u00e4lp av dem. D\u00e4rf\u00f6r l\u00e4mnar jag i slutet av varje avsnitt l\u00e4nkar till liknande verktyg som m\u00f6jligen anv\u00e4nds i din organisation.<\/p>\n<h3>Vad som saknas i denna artikel<\/h3>\n<p>\nJag upprepar \u00e4nnu en g\u00e5ng att artikeln inte handlar om specifika verktyg, s\u00e5 h\u00e4r kommer det inte att finnas n\u00e5gra kodexempel fr\u00e5n dokumentationen eller beskrivningar av specifika kommandon. Men i slutet av varje avsnitt l\u00e4mnar jag l\u00e4nkar f\u00f6r en mer detaljerad studie.<\/p>\n<p>Detta har gjorts av f\u00f6ljande sk\u00e4l:\u00a0<\/p>\n<ul>\n<li>detta material \u00e4r mycket l\u00e4tt att hitta i olika k\u00e4llor (dokumentation, b\u00f6cker, videokurser);<\/li>\n<li>om vi b\u00f6rjar f\u00f6rdjupa oss, kommer vi att beh\u00f6va skriva 10, 20, 30 delar av denna artikel (n\u00e4r vi planerar 2-3);<\/li>\n<li>jag vill helt enkelt inte sl\u00f6sa din tid, eftersom du m\u00f6jligen vill anv\u00e4nda andra verktyg f\u00f6r att uppn\u00e5 samma m\u00e5l.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Praxis<\/h3>\n<p>\nJag skulle verkligen vilja att detta material \u00e4r anv\u00e4ndbart f\u00f6r varje l\u00e4sare, och inte bara l\u00e4ses och gl\u00f6ms bort. I varje inl\u00e4rning \u00e4r praxis en mycket viktig komponent. F\u00f6r detta har jag f\u00f6rberett<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> ett GitHub-repo med en steg-f\u00f6r-steg-guide om hur man g\u00f6r allt fr\u00e5n grunden<\/a><\/noindex>. Du f\u00e5r ocks\u00e5 en hemuppgift f\u00f6r att vara s\u00e4ker p\u00e5 att du inte slentrianm\u00e4ssigt kopierar utf\u00f6rande kommandon. <\/p>\n<h3>Plan<\/h3>\n<p><\/p>\n<p><strong>Steg<\/strong><br \/>\n<strong>Teknik<\/strong><br \/>\n<strong>Verktyg<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nLokal k\u00f6rning (f\u00f6rbereda webben \/ android demotester och k\u00f6ra det lokalt)\u00a0<br \/>\nNode.js, Selenium, Appium<\/p>\n<p><strong>2<\/strong><br \/>\nVersionshanteringssystem\u00a0<br \/>\nGit<\/p>\n<p><strong>3<\/strong><br \/>\nContainerisering<br \/>\nDocker, Selenium grid, Selenoid (Web, Android)<\/p>\n<p><strong>4<\/strong><br \/>\nCI \/ CD<br \/>\nGitlab CI<\/p>\n<p><strong>5<\/strong><br \/>\nMolnplattformar<br \/>\nGoogle Cloud Platform<\/p>\n<p><strong>6<\/strong><br \/>\nOrkestrering<br \/>\nKubernetes<\/p>\n<p><strong>7<\/strong><br \/>\nInfrastruktur som kod (IaC)<br \/>\nTerraform, Ansible<\/p>\n<p><\/p>\n<h3>Strukturen f\u00f6r varje avsnitt<\/h3>\n<p>\nF\u00f6r att h\u00e5lla ber\u00e4ttelsen visuellt klar, beskrivs varje avsnitt enligt f\u00f6ljande plan:<\/p>\n<ul>\n<li>kort beskrivning av tekniken,<\/li>\n<li>v\u00e4rdet f\u00f6r automatiseringsinfrastruktur,<\/li>\n<li>illustration av det aktuella tillst\u00e5ndet f\u00f6r infrastrukturen,<\/li>\n<li>l\u00e4nkar f\u00f6r studier,<\/li>\n<li>liknande verktyg.<\/li>\n<\/ul>\n<p><\/p>\n<h2>1. Lokal k\u00f6rning av tester<\/h2>\n<p><\/p>\n<h3>Kort beskrivning av tekniken<\/h3>\n<p>\nDetta \u00e4r bara ett f\u00f6rberedande steg f\u00f6r att k\u00f6ra demonstrativa tester lokalt och f\u00f6r att kontrollera att de lyckas. I den praktiska delen anv\u00e4nds Node.js, men programmeringsspr\u00e5ket och plattformen \u00e4r inte s\u00e5 viktiga och man kan anv\u00e4nda de som anv\u00e4nds i ditt f\u00f6retag.\u00a0<\/p>\n<p>Men som automatiseringsverktyg rekommenderar jag att anv\u00e4nda Selenium WebDriver f\u00f6r webplattformar och Appium f\u00f6r Android-plattformen, eftersom vi i n\u00e4sta steg kommer att anv\u00e4nda Docker-bilder som \u00e4r anpassade f\u00f6r att arbeta specifikt med dessa verktyg. Dessutom, med h\u00e4nvisning till kraven i jobbannonserna, \u00e4r dessa verktyg de mest efterfr\u00e5gade p\u00e5 marknaden.<\/p>\n<p>Som du kanske har m\u00e4rkt, fokuserar vi endast p\u00e5 web och Android-tester. Tyv\u00e4rr \u00e4r IOS en helt annan historia (tack Apple). Jag planerar att demonstrera l\u00f6sningar och metoder kopplade till IOS i kommande delar.<\/p>\n<h3>V\u00e4rde f\u00f6r automatiseringsinfrastruktur<\/h3>\n<p>\nSett ur infrastrukturens perspektiv ger lokal k\u00f6rning inget v\u00e4rde. Du kontrollerar bara att tester fungerar p\u00e5 en lokal maskin i lokala webbl\u00e4sare och simuleringar. Men oavsett \u00e4r det en n\u00f6dv\u00e4ndig utg\u00e5ngspunkt.<\/p>\n<h3>Illustration av det nuvarande tillst\u00e5ndet f\u00f6r infrastrukturen<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/504f28744e29938f66be41c32d9a7dc6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>L\u00e4nkar f\u00f6r studier<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/selenium.dev\/\">Selenium<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/appium.io\/docs\/en\/about-appium\/getting-started\/\">Appium<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developer.android.com\/studio\/run\/emulator\">Android Emulator<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/tree\/master\/javascript\/node\/selenium-webdriver\/example\">Selenium JS GitHub-exempel<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/appium\/appium\/tree\/master\/sample-code\/javascript-wd\">Appium JS GitHub-exempel<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Liknande verktyg<\/h3>\n<p><\/p>\n<ul>\n<li>valfri programmeringsspr\u00e5k du gillar, i kombination med Selenium\/Appium-tester;<\/li>\n<li>valfria tester;<\/li>\n<li>valfri test-runner.<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Versionshanteringssystem (Git)<\/h2>\n<p><\/p>\n<h3>Kort beskrivning av tekniken<\/h3>\n<p>\n Ingen kommer att bli f\u00f6rv\u00e5nad om jag s\u00e4ger att versionshanteringssystem \u00e4r en extremt viktig del av utveckling b\u00e5de i team och individuellt. Med st\u00f6d av olika k\u00e4llor kan man med s\u00e4kerhet s\u00e4ga att Git \u00e4r den mest popul\u00e4ra representanterna. Versionshanteringssystemet erbjuder m\u00e5nga f\u00f6rdelar, s\u00e5som koddelning, versionslagring, \u00e5terst\u00e4llning till tidigare grenar, \u00f6vervakning av projektets historia och backup. Vi kommer inte att diskutera varje punkt i detalj, eftersom jag \u00e4r s\u00e4ker p\u00e5 att ni \u00e4r v\u00e4l bekanta med detta och anv\u00e4nder det i ert dagliga arbete. Men om ni mot f\u00f6rmodan inte \u00e4r det, rekommenderar jag att ni pausar l\u00e4sningen av denna artikel och snabbt \u00e5tg\u00e4rdar denna brist.<\/p>\n<h3>V\u00e4rde f\u00f6r automatiseringsinfrastruktur<\/h3>\n<p>\n H\u00e4r kan ni st\u00e4lla en rimlig fr\u00e5ga: \"Varf\u00f6r ber\u00e4ttar han f\u00f6r oss om Git? Alla vet och anv\u00e4nder detta f\u00f6r b\u00e5de kodutveckling och autotestning.\" Ni har helt r\u00e4tt, men i denna artikel pratar vi om infrastruktur och denna sektion fungerar som en f\u00f6rhandsvisning f\u00f6r sektion 7: \"Infrastruktur som kod (IaC)\". F\u00f6r oss inneb\u00e4r detta att hela infrastrukturen, inklusive testinfrastrukturen, beskrivs i form av kod, och vi kan allts\u00e5 ocks\u00e5 till\u00e4mpa versionshanteringssystem och f\u00e5 liknande f\u00f6rdelar som f\u00f6r kodutveckling och automatisering.<\/p>\n<p>Vi kommer att titta n\u00e4rmare p\u00e5 IaC i steg 7, men \u00e4ven nu kan du b\u00f6rja anv\u00e4nda Git lokalt genom att skapa ett lokalt f\u00f6rr\u00e5d. Den \u00f6vergripande bilden kommer att utvidgas n\u00e4r vi l\u00e4gger till ett fj\u00e4rrf\u00f6rr\u00e5d till infrastrukturen.<\/p>\n<h3>Illustration av det nuvarande tillst\u00e5ndet f\u00f6r infrastrukturen<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/f17c1d2b2f18aa814c44f7c443e49416.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>L\u00e4nkar f\u00f6r studier<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.atlassian.com\/git\/tutorials\/what-is-version-control\">Vad \u00e4r versionskontroll<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/git-scm.com\/\">Git<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/git-scm.com\/book\/en\/v2\/Getting-Started-About-Version-Control\">Kom ig\u00e5ng \u2013 Om versionskontroll<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Liknande verktyg<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/subversion.apache.org\/\">SVN<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.mercurial-scm.org\/guide\">Mercurial<\/a><\/noindex>\u00a0<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/azure.microsoft.com\/en-us\/services\/devops\/server\/\">Microsoft TFS (nu en del av Azure DevOps Services)<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2>3. Containerisering (Docker)<\/h2>\n<p><\/p>\n<h3>Kort beskrivning av tekniken<\/h3>\n<p>\n F\u00f6r att demonstrera hur containerisering har f\u00f6r\u00e4ndrat spelreglerna, l\u00e5t oss resa flera decennier tillbaka i tiden. P\u00e5 den tiden k\u00f6pte och anv\u00e4nde m\u00e4nniskor servermaskiner f\u00f6r att k\u00f6ra applikationer. Men i de flesta fall var de n\u00f6dv\u00e4ndiga resurserna f\u00f6r driften inte k\u00e4nda i f\u00f6rv\u00e4g. D\u00e4rf\u00f6r spenderade f\u00f6retag pengar p\u00e5 att k\u00f6pa dyra kraftfulla servrar, men en del av denna kapacitet utnyttjades inte helt.<\/p>\n<p>Den n\u00e4sta fasen i evolutionen var virtuella maskiner (VM), som l\u00f6ste problemet med on\u00f6diga kostnader f\u00f6r outnyttjade resurser. Denna teknologi gjorde det m\u00f6jligt att k\u00f6ra applikationer oberoende av varandra inom en och samma server, och att tilldela helt isolerat utrymme. Men tyv\u00e4rr har varje teknologi sina nackdelar. Att k\u00f6ra VM kr\u00e4ver ett fullt operativsystem, som f\u00f6rbrukar CPU, RAM, lagring, och beroende p\u00e5 OS b\u00f6r man \u00e4ven ta h\u00e4nsyn till licenskostnader. Dessa faktorer p\u00e5verkar laddningstiden och komplicerar portabiliteten.<\/p>\n<p>Och h\u00e4r har vi kommit till containerisering. \u00c5terigen har denna teknologi l\u00f6st det tidigare problemet, eftersom containrar inte anv\u00e4nder ett fullt operativsystem, vilket frig\u00f6r mycket resurser och erbjuder en snabb och flexibel l\u00f6sning f\u00f6r portabilitet.<\/p>\n<p>Sj\u00e4lvklart \u00e4r containerteknologi inget nytt och introducerades f\u00f6rst i slutet av 70-talet. Under den tiden gjordes m\u00e5nga studier, utvecklingar och f\u00f6rs\u00f6k. Men det var just Docker som anpassade denna teknologi och gjorde den l\u00e4ttillg\u00e4nglig f\u00f6r massorna. I v\u00e5r tid, n\u00e4r vi talar om containrar, menar vi oftast Docker. N\u00e4r vi pratar om Docker-containrar syftar vi p\u00e5 Linux-containrar. Vi kan anv\u00e4nda Windows och macOS-system f\u00f6r att k\u00f6ra containrar, men det \u00e4r viktigt att f\u00f6rst\u00e5 att det d\u00e5 uppst\u00e5r ett extra lager. Till exempel k\u00f6r Docker p\u00e5 Mac osynligt containrar inuti en l\u00e4ttvikts Linux VM. Vi kommer att \u00e5terkomma till detta \u00e4mne n\u00e4r vi diskuterar k\u00f6rning av Android-emulatorer inuti containrar, eftersom det h\u00e4r finns en mycket viktig detalj som vi beh\u00f6ver g\u00e5 igenom mer ing\u00e5ende.<\/p>\n<h3>V\u00e4rde f\u00f6r automatiseringsinfrastruktur<\/h3>\n<p>\n Vi har kommit fram till att containerisering och Docker \u00e4r fantastiskt. L\u00e5t oss se p\u00e5 detta i kontexten av automatisering, eftersom varje verktyg eller teknologi m\u00e5ste l\u00f6sa n\u00e5got problem. L\u00e5t oss identifiera de uppenbara problemen med automatisering av tester i kontexten av UI-tester:<\/p>\n<ul>\n<li>ett enormt antal beroenden vid installation av Selenium och s\u00e4rskilt Appium;<\/li>\n<li>kompatibilitetsproblem mellan webbl\u00e4sarversioner, simulatorer och drivrutiner;<\/li>\n<li>brist p\u00e5 isolerat utrymme f\u00f6r webbl\u00e4sare\/simulatorer, vilket \u00e4r s\u00e4rskilt kritiskt f\u00f6r parallell k\u00f6rning;<\/li>\n<li>sv\u00e5rt att hantera och underh\u00e5lla om man beh\u00f6ver k\u00f6ra 10, 50, 100 eller till och med 1000 webbl\u00e4sare samtidigt.<\/li>\n<\/ul>\n<p>\nMen eftersom Selenium \u00e4r det mest popul\u00e4ra verktyget f\u00f6r automatisering och Docker \u00e4r det mest popul\u00e4ra verktyget f\u00f6r containerisering, borde det inte f\u00f6rv\u00e5na n\u00e5gon att n\u00e5gon har f\u00f6rs\u00f6kt att kombinera dem f\u00f6r att f\u00e5 ett kraftfullt verktyg f\u00f6r att l\u00f6sa de ovan n\u00e4mnda problemen. L\u00e5t oss titta p\u00e5 s\u00e5dana l\u00f6sningar mer i detalj.\u00a0<\/p>\n<p><u>Selenium grid in docker<\/u><\/p>\n<p>Det h\u00e4r verktyget \u00e4r det mest popul\u00e4ra i v\u00e4rlden f\u00f6r att k\u00f6ra flera webbl\u00e4sare p\u00e5 flera maskiner och hantera dem fr\u00e5n en central nod. F\u00f6r att k\u00f6ra det m\u00e5ste minst tv\u00e5 delar registreras: Hub och Node(s). Hub \u00e4r den centrala noden som tar emot alla f\u00f6rfr\u00e5gningar fr\u00e5n tester och f\u00f6rdelar dem till de aktuella noderna. F\u00f6r varje nod kan vi konfigurera specifika inst\u00e4llningar, till exempel genom att ange vilken webbl\u00e4sare och vilken version som beh\u00f6vs. Men vi m\u00e5ste fortfarande se till att de kompatibla drivrutinerna f\u00f6r webbl\u00e4sarna finns och installeras p\u00e5 de aktuella noderna. Av denna anledning anv\u00e4nds Selenium grid s\u00e4llan i sin rena form, utom n\u00e4r vi beh\u00f6ver arbeta med webbl\u00e4sare som inte kan installeras p\u00e5 Linux OS. F\u00f6r alla andra situationer \u00e4r anv\u00e4ndningen av Docker-bilder f\u00f6r att k\u00f6ra Selenium grid Hub och Noder en mycket flexibel och korrekt l\u00f6sning. Detta tillv\u00e4gag\u00e5ngss\u00e4tt f\u00f6renklar hanteringen av noderna avsev\u00e4rt, eftersom vi kan v\u00e4lja den bild som passar oss med redan installerade kompatibla versioner av webbl\u00e4sare och drivrutiner.<\/p>\n<p>Trots negativa omd\u00f6men om stabiliteten vid k\u00f6rning av ett stort antal noder parallellt, f\u00f6rblir Selenium grid fortfarande det mest popul\u00e4ra verktyget f\u00f6r parallell k\u00f6rning av Selenium-tester. Det \u00e4r viktigt att notera att det st\u00e4ndigt g\u00f6rs olika f\u00f6rb\u00e4ttringar och modifieringar av detta verktyg inom open-source som \u00e5tg\u00e4rdar olika flaskhalsar.<\/p>\n<p><u>Selenoid f\u00f6r Web<\/u><\/p>\n<p>Det h\u00e4r verktyget \u00e4r ett genombrott inom Selenium, eftersom det fungerar direkt ur boxen och har gjort livet betydligt enklare f\u00f6r m\u00e5nga automatiseringsingenj\u00f6rer. F\u00f6rst och fr\u00e4mst \u00e4r det inte en ny version av Selenium Grid. Ist\u00e4llet har utvecklarna skapat en helt ny version av Selenium Hub i Golang, vilket i kombination med l\u00e4tta Docker-bilder f\u00f6r olika webbl\u00e4sare har gett ett viktigt lyft f\u00f6r testautomatisering. Dessutom, n\u00e4r det g\u00e4ller Selenium Grid m\u00e5ste vi p\u00e5 f\u00f6rhand definiera alla n\u00f6dv\u00e4ndiga webbl\u00e4sare och deras versioner, vilket inte \u00e4r ett problem n\u00e4r vi endast arbetar med en viss webbl\u00e4sare. Men n\u00e4r det handlar om flera st\u00f6djande webbl\u00e4sare \u00e4r Selenoid den b\u00e4sta l\u00f6sningen, tack vare funktionen 'webbl\u00e4sare p\u00e5 beg\u00e4ran'. Allt vi beh\u00f6ver g\u00f6ra \u00e4r att p\u00e5 f\u00f6rhand ladda ner de n\u00f6dv\u00e4ndiga bilderna med webbl\u00e4sare och uppdatera konfigurationsfilen som Selenoid interagerar med. N\u00e4r Selenoid f\u00e5r en beg\u00e4ran fr\u00e5n testerna startar den automatiskt r\u00e4tt container med r\u00e4tt webbl\u00e4sare. N\u00e4r testen \u00e4r avslutade st\u00e4nger Selenoid ner containern, vilket frig\u00f6r resurser f\u00f6r n\u00e4sta beg\u00e4ran. Denna metod eliminerar helt den k\u00e4nda problemet med 'noddegradering', som vi ofta st\u00f6ter p\u00e5 i Selenium Grid.<\/p>\n<p>Men tyv\u00e4rr \u00e4r Selenoid fortfarande ingen l\u00f6sning p\u00e5 alla problem. Vi har f\u00e5tt funktionen 'webbl\u00e4sare p\u00e5 beg\u00e4ran', men funktionen 'resurser p\u00e5 beg\u00e4ran' \u00e4r fortfarande inte tillg\u00e4nglig. F\u00f6r att anv\u00e4nda Selenoid m\u00e5ste vi distribuera det p\u00e5 fysisk h\u00e5rdvara eller p\u00e5 en virtuell maskin, vilket inneb\u00e4r att vi p\u00e5 f\u00f6rhand m\u00e5ste veta hur mycket resurser vi beh\u00f6ver tilldela. Jag tror inte att detta \u00e4r ett problem f\u00f6r sm\u00e5 projekt som k\u00f6r 10, 20 eller till och med 30 webbl\u00e4sare parallellt. Men vad h\u00e4nder om vi beh\u00f6ver 100, 500, 1000 och mer? Det \u00e4r meningsl\u00f6st att st\u00e4ndigt st\u00f6tta och betala f\u00f6r ett s\u00e5dant antal resurser. I avsnitt 5 och 6 av denna artikel kommer vi att diskutera l\u00f6sningar som m\u00f6jligg\u00f6r skalning, vilket avsev\u00e4rt minskar f\u00f6retagets kostnader.<\/p>\n<p><u>Selenoid f\u00f6r Android<\/u><\/p>\n<p>Efter framg\u00e5ngen med Selenoid som verktyg f\u00f6r webbautomatisering ville folk ha n\u00e5got liknande f\u00f6r Android. Och detta har nu blivit verklighet \u2013 Selenoid har sl\u00e4ppts med st\u00f6d f\u00f6r Android. Ur ett h\u00f6gre anv\u00e4ndarperspektiv fungerar den p\u00e5 samma s\u00e4tt som webbautomatisering. Den enda skillnaden \u00e4r att ist\u00e4llet f\u00f6r beh\u00e5llare med webbl\u00e4sare k\u00f6r Selenoid beh\u00e5llare med Android-emulatorer. Enligt min mening \u00e4r detta just nu det mest kraftfulla gratisverktyget f\u00f6r att k\u00f6ra Android-tester parallellt.<\/p>\n<p>Jag skulle verkligen inte vilja talk om de negativa aspekterna av detta verktyg, eftersom jag faktiskt gillar det mycket. Men det finns \u00e4nd\u00e5 n\u00e5gra nackdelar som ocks\u00e5 g\u00e4ller webbautomatisering, relaterat till skalbarhet. Dessutom m\u00e5ste jag n\u00e4mna en annan begr\u00e4nsning som kan komma som en \u00f6verraskning om vi konfigurerar verktyget f\u00f6r f\u00f6rsta g\u00e5ngen. F\u00f6r att k\u00f6ra Android-bilder beh\u00f6ver vi en fysisk maskin eller en VM med st\u00f6d f\u00f6r nested virtualisation. I den praktiska guiden visar jag hur man aktiverar detta p\u00e5 Linux VM. Men om du \u00e4r en macOS-anv\u00e4ndare och vill k\u00f6ra Selenoid lokalt, kommer det att vara om\u00f6jligt att k\u00f6ra Android-tester. Men du kan alltid k\u00f6ra en Linux VM lokalt med konfigurerad 'nested virtualisation' och k\u00f6ra Selenoid inuti.<\/p>\n<h3>Illustration av det nuvarande tillst\u00e5ndet f\u00f6r infrastrukturen<\/h3>\n<p>\n I denna artikel kommer vi att l\u00e4gga till tv\u00e5 verktyg f\u00f6r att illustrera infrastrukturen. Detta \u00e4r Selenium grid f\u00f6r webbtester och Selenoid f\u00f6r Android-tester. I guiden p\u00e5 GitHub visar jag ocks\u00e5 hur man anv\u00e4nder Selenoid f\u00f6r att k\u00f6ra webbtester.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/1202ae79eba9cffc965f3a5b2648c755.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>L\u00e4nkar f\u00f6r studier<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/resources\/what-container\">Docker: vilken beh\u00e5llare \u00e4r<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/get-started\">Docker: kom ig\u00e5ng<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/containerjournal.com\/topics\/container-ecosystems\/5-container-alternatives-to-docker\/\">5 containeralternativ till Docker<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/wiki\/Grid2\">Selenium Grid<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/docker-selenium\">Selenium docker<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aerokube.com\/selenoid\/latest\/\">Selenoid<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aerokube\/selenoid\">Selenoid Github<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developer.android.com\/studio\/run\/emulator-acceleration#vm-linux\">KVM-inst\u00e4llning f\u00f6r Android-emulatorer<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Docker-Deep-Dive-Nigel-Poulton-ebook\/dp\/B01LXWQUFF\/ref=pd_sim_351_1\/147-1129855-1615632?_encoding=UTF8&amp;pd_rd_i=B01LXWQUFF&amp;pd_rd_r=f8dcd666-e707-4f85-99c6-24ecec56ea74&amp;pd_rd_w=rMnHL&amp;pd_rd_wg=u17vC&amp;pf_rd_p=bab57536-7c8f-4781-a8ed-3e270b9cd303&amp;pf_rd_r=KN6EXNGBWJ6B9QNJE4M2&amp;psc=1&amp;refRID=KN6EXNGBWJ6B9QNJE4M2\">Docker Deep Dive bok<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Liknande verktyg<\/h3>\n<p><\/p>\n<ul>\n<li>Det finns andra containeriseringsverktyg, men Docker \u00e4r det mest popul\u00e4ra. Om du vill prova n\u00e5got annat, kom ih\u00e5g att de verktyg vi har granskat f\u00f6r parallell k\u00f6rning av Selenium-tester inte kommer att fungera direkt.\u00a0\u00a0<\/li>\n<li>Som redan n\u00e4mnts finns det m\u00e5nga modifikationer av Selenium grid, till exempel<noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.zalando.com\/zalenium\/\"> Zalenium<\/a><\/noindex>. <\/li>\n<\/ul>\n<p><\/p>\n<h2>4. CI \/ CD<\/h2>\n<p><\/p>\n<h3>Kort beskrivning av tekniken<\/h3>\n<p>\n Praktiken f\u00f6r kontinuerlig integration \u00e4r ganska popul\u00e4ra inom utveckling och st\u00e5r p\u00e5 samma niv\u00e5 som versionshanteringssystem. Trots detta k\u00e4nner jag att det finns f\u00f6rvirring kring terminologin. I detta stycke skulle jag vilja beskriva tre modifieringar av denna teknik utifr\u00e5n mitt perspektiv. P\u00e5 internet kan du hitta m\u00e5nga artiklar med olika tolkningar, och det \u00e4r helt okej om din \u00e5sikt avviker. Det viktigaste \u00e4r att ni \u00e4r p\u00e5 samma sida som era kollegor.<\/p>\n<p>S\u00e5ledes finns det tre termer: CI \u2013 Continuous Integration (kontinuerlig integration), CD \u2013 Continuous Delivery (kontinuerlig leverans) och \u00e5terigen CD \u2013 Continuous Deployment (kontinuerlig drifts\u00e4ttning). (<i>Vidare kommer jag att anv\u00e4nda dessa termer p\u00e5 engelska<\/i>). Varje modifiering l\u00e4gger till n\u00e5gra extra steg till din utvecklingspipeline. Men ordet <u>continuous<\/u> (kontinuerlig) \u00e4r det viktigaste. I detta sammanhang syftar vi p\u00e5 n\u00e5got som sker fr\u00e5n b\u00f6rjan till slut, utan avbrott eller manuellt ingripande. L\u00e5t oss titta p\u00e5 CI &#038; CD och CD i detta sammanhang.<\/p>\n<ul>\n<li><strong>Continuous Integration \u2013<\/strong> \u00e4r det inledande steget i evolutionen. Efter att ny kod har skickats till servern f\u00f6rv\u00e4ntar vi oss att f\u00e5 snabb feedback, att allt \u00e4r okej med v\u00e5ra \u00e4ndringar. Vanligtvis inkluderar CI k\u00f6rning av verktyg f\u00f6r statisk kodanalys och modul\u00e4ra\/interna API-tester. Detta g\u00f6r det m\u00f6jligt att f\u00e5 information om v\u00e5r kod n\u00e5gra sekunder\/minuter senare.<\/li>\n<li><strong>Kontinuerlig leverans<\/strong> \u00e4r ett mer avancerat steg, d\u00e4r vi k\u00f6r integrations\/UI-tester. Men i detta skede f\u00e5r vi inte resultat lika snabbt som i fallet med CI. F\u00f6r det f\u00f6rsta tar dessa typer av tester l\u00e4ngre tid att genomf\u00f6ra. F\u00f6r det andra m\u00e5ste vi f\u00f6re k\u00f6rningen distribuera v\u00e5ra \u00e4ndringar p\u00e5 test\/staging-milj\u00f6. Dessutom, om vi pratar om mobilutveckling, tillkommer ett extra steg f\u00f6r att skapa en byggnad av v\u00e5r applikation.<\/li>\n<li><strong>Continuous Deployment<\/strong> inneb\u00e4r att vi automatiskt sl\u00e4pper (release) v\u00e5ra \u00e4ndringar till produktion om alla acceptanstester har passerats i de tidigare stegen. Dessutom kan olika steg, s\u00e5som att k\u00f6ra smoke-tester p\u00e5 produktionen och samla intressanta m\u00e4tv\u00e4rden, konfigureras efter release-steget. Continuous Deployment \u00e4r m\u00f6jligt endast med bra t\u00e4ckning av automatiserade tester. Om n\u00e5gra manuella ingrepp kr\u00e4vs, inklusive testning, s\u00e5 \u00e4r det inte l\u00e4ngre <u>Continuous<\/u> (kontinuerlig). D\u00e5 kan vi s\u00e4ga att v\u00e5r pipeline endast uppfyller praktiken f\u00f6r Continuous Delivery.<\/li>\n<\/ul>\n<p><\/p>\n<h3>V\u00e4rde f\u00f6r automatiseringsinfrastruktur<\/h3>\n<p>\n I detta avsnitt m\u00e5ste jag klarg\u00f6ra att n\u00e4r vi pratar om end-to-end UI-tester, inneb\u00e4r det att vi m\u00e5ste distribuera v\u00e5ra \u00e4ndringar och relaterade tj\u00e4nster till testmilj\u00f6er. Continuous Integration-processen \u00e4r inte till\u00e4mplig p\u00e5 denna uppgift och vi m\u00e5ste ta hand om att implementera minst Continuous Delivery-praktiker. Continuous Deployment har ocks\u00e5 betydelse i samband med UI-tester om vi planerar att k\u00f6ra dem p\u00e5 produktionen.<\/p>\n<p>Och innan vi tittar p\u00e5 illustrationen av f\u00f6r\u00e4ndringen i arkitekturen, vill jag s\u00e4ga n\u00e5gra ord om GitLab CI. Till skillnad fr\u00e5n andra CI\/CD-verktyg erbjuder GitLab ett fj\u00e4rrarkiv och m\u00e5nga andra ytterligare funktioner. S\u00e5ledes \u00e4r GitLab mer \u00e4n bara CI. Det inkluderar inbyggd k\u00e4llkodshantering, Agile-hantering, CI\/CD-pipelines, loggningsverktyg och insamling av m\u00e4tv\u00e4rden. Arkitekturen f\u00f6r GitLab best\u00e5r av GitLab CI\/CD och GitLab Runner. H\u00e4r \u00e4r en kort beskrivning fr\u00e5n den officiella webbplatsen:<\/p>\n<blockquote><p>Gitlab CI\/CD \u00e4r en webbapplikation med ett API som lagrar sitt tillst\u00e5nd i en databas, hanterar projekt\/byggen och tillhandah\u00e5ller ett anv\u00e4ndargr\u00e4nssnitt. GitLab Runner \u00e4r en applikation som bearbetar byggen. Den kan distribueras separat och arbetar med GitLab CI\/CD genom ett API. F\u00f6r att k\u00f6ra tester beh\u00f6ver du b\u00e5de GitLab-instansen och Runnern.<\/p><\/blockquote>\n<p><\/p>\n<h3>Illustration av det nuvarande tillst\u00e5ndet f\u00f6r infrastrukturen<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/a05ece39b6c6a9aaec4177d4b5242722.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>L\u00e4nkar f\u00f6r studier<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/articles\/continuousIntegration.html\">Martin Fowler: Continuous Integration<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/ee\/ci\/\">GitLab CI\/CD<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Continuous-Integration-Improving-Software-Reducing\/dp\/0321336380\">Continuous Integration-bok<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Continuous-Delivery-Deployment-Automation-Addison-Wesley-ebook-dp-B003YMNVC0\/dp\/B003YMNVC0\/ref=mt_kindle?_encoding=UTF8&amp;me=&amp;qid=\">Continuous Delivery-bok<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Liknande verktyg<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/jenkins.io\/\">Jenkins<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.jetbrains.com\/teamcity\/\">TeamCity<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/travis-ci.com\/\">Travis<\/a><\/noindex>\u00a0<\/li>\n<li>Och m\u00e5nga andra<\/li>\n<\/ul>\n<p><\/p>\n<h2>5. Molnplattformar<\/h2>\n<p><\/p>\n<h3>Kort beskrivning av tekniken<\/h3>\n<p>\n I det h\u00e4r avsnittet kommer vi att diskutera en popul\u00e4r trend som kallas 'publika moln'. Trots den stora nytta som de ovan beskrivna teknologierna f\u00f6r virtualisering och containerisering ger, beh\u00f6ver vi fortfarande datorkapacitet. F\u00f6retag k\u00f6per dyra servrar eller hyr datacenter, men i s\u00e5dana fall m\u00e5ste man g\u00f6ra ber\u00e4kningar (ibland orealistiska) om hur mycket resurser vi kommer att beh\u00f6va, om vi kommer att anv\u00e4nda dem 24\/7 och f\u00f6r vilka \u00e4ndam\u00e5l. Till exempel, f\u00f6r produktion kr\u00e4vs det att servern \u00e4r aktiv dygnet runt, men beh\u00f6ver vi liknande resurser f\u00f6r testning under outnyttjad tid? Detta beror ocks\u00e5 p\u00e5 typen av test som genomf\u00f6rs. Ett exempel kan vara belastnings-\/stress-tester som vi planerar att k\u00f6ra under outnyttjad tid f\u00f6r att f\u00e5 resultat n\u00e4sta dag. Men, definitivt, dygnet runt tillg\u00e5ng p\u00e5 servrar \u00e4r inte n\u00f6dv\u00e4ndig f\u00f6r end-to-end automatiserade tester och speciellt f\u00f6r milj\u00f6er f\u00f6r manuell testning. F\u00f6r s\u00e5dana situationer skulle det vara bra att f\u00e5 precis s\u00e5 mycket resurser som beh\u00f6vs p\u00e5 beg\u00e4ran, anv\u00e4nda dem och sluta betala n\u00e4r de inte l\u00e4ngre beh\u00f6vs. Dessutom skulle det vara fantastiskt att f\u00e5 dem omedelbart, efter att ha gjort n\u00e5gra musklick eller k\u00f6rt ett par skript. Det \u00e4r d\u00e4rf\u00f6r publika moln anv\u00e4nds. L\u00e5t oss titta p\u00e5 definitionen:<\/p>\n<blockquote><p>\u201cDet publika molnet definieras som datortj\u00e4nster som erbjuds av tredjepartsleverant\u00f6rer \u00f6ver det offentliga internet, vilket g\u00f6r dem tillg\u00e4ngliga f\u00f6r alla som vill anv\u00e4nda eller k\u00f6pa dem. De kan vara gratis eller s\u00e4ljas p\u00e5 beg\u00e4ran, vilket g\u00f6r att kunder endast betalar f\u00f6r den anv\u00e4ndning av CPU-cykler, lagring eller bandbredd de konsumera.\u201d<\/p><\/blockquote>\n<p>\n Det r\u00e5der en uppfattning om att publika moln \u00e4r dyra. Men deras centrala id\u00e9 \u00e4r att minska f\u00f6retagets kostnader. Som n\u00e4mnts tidigare m\u00f6jligg\u00f6r publika moln att f\u00e5 resurser p\u00e5 beg\u00e4ran och betala endast f\u00f6r den tid de anv\u00e4nds. Dessutom gl\u00f6mmer vi ibland att anst\u00e4llda f\u00e5r l\u00f6n och specialister \u00e4r ocks\u00e5 en dyr resurs. Det \u00e4r viktigt att beakta att publika moln avsev\u00e4rt f\u00f6renklar supporten av infrastrukturen, vilket g\u00f6r att ingenj\u00f6rerna kan fokusera p\u00e5 viktigare uppgifter.\u00a0<\/p>\n<h3>V\u00e4rde f\u00f6r automatiseringsinfrastruktur<\/h3>\n<p>\n Vilka specifika resurser beh\u00f6ver vi f\u00f6r end-to-end UI-tester? I huvudsak handlar det om virtuella maskiner eller kluster (vi kommer att prata om Kubernetes i n\u00e4sta avsnitt) f\u00f6r att k\u00f6ra webbl\u00e4sare och emulatorer. Ju fler webbl\u00e4sare och emulatorer vi vill k\u00f6ra samtidigt, desto mer CPU och minne beh\u00f6vs, och desto mer pengar m\u00e5ste vi betala f\u00f6r detta. P\u00e5 s\u00e5 s\u00e4tt m\u00f6jligg\u00f6r offentliga moln i samband med testautomatisering att vi kan k\u00f6ra ett stort antal (100, 200, 1000\u2026) webbl\u00e4sare\/emulatorer p\u00e5 beg\u00e4ran, f\u00e5 testresultat s\u00e5 snabbt som m\u00f6jligt och sluta betala f\u00f6r dessa galet resurskr\u00e4vande resurser.\u00a0<\/p>\n<p>De mest popul\u00e4ra molnleverant\u00f6rerna \u00e4r Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP). I den praktiska guiden presenteras exempel p\u00e5 anv\u00e4ndning av GCP, men generellt spelar det ingen roll vad du faktiskt anv\u00e4nder f\u00f6r automatiseringsuppgifter. De erbjuder alla ungef\u00e4r samma funktionalitet. Vanligtvis fokuserar guiden p\u00e5 hela f\u00f6retagets infrastruktur och aff\u00e4rskrav, vilket ligger utanf\u00f6r denna artikel. F\u00f6r automatiseringsingenj\u00f6rer skulle det vara mer intressant att j\u00e4mf\u00f6ra anv\u00e4ndningen av molnleverant\u00f6rer med anv\u00e4ndning av molnplattformar specifikt f\u00f6r testnings\u00e4ndam\u00e5l, som Sauce Labs, BrowserStack, BitBar och s\u00e5 vidare. S\u00e5 l\u00e5t oss g\u00f6ra det! Enligt min \u00e5sikt \u00e4r Sauce Labs den mest k\u00e4nda molntestningsplattformen, d\u00e4rf\u00f6r valde jag den f\u00f6r j\u00e4mf\u00f6relse.\u00a0<\/p>\n<p><u>GCP mot Sauce Labs f\u00f6r automatiserings\u00e4ndam\u00e5l:<\/u><\/p>\n<p>L\u00e5t oss anta att vi beh\u00f6ver k\u00f6ra 8 web-tester och 8 Android-tester samtidigt. F\u00f6r detta kommer vi att anv\u00e4nda GCP och starta 2 virtuella maskiner med Selenoid. P\u00e5 den f\u00f6rsta ska vi k\u00f6ra 8 containrar med webbl\u00e4sare. P\u00e5 den andra \u2013 8 containrar med emulatorer. L\u00e5t oss titta p\u00e5 priserna:\u00a0\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/e4688fd2e6e5593d2e1c22fc57f59484.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n F\u00f6r att starta en container med Chrome beh\u00f6ver vi <strong>n1-standard-1 <\/strong>maskin. I fallet med Android blir det <strong>n1-standard-4 <\/strong>f\u00f6r en emulator. Egentligen \u00e4r ett mer flexibelt och billigare s\u00e4tt att ange specifika anv\u00e4ndarv\u00e4rden f\u00f6r CPU\/Minne, men f\u00f6r tillf\u00e4llet \u00e4r detta inte avg\u00f6rande f\u00f6r j\u00e4mf\u00f6relsen med Sauce Labs.<\/p>\n<p>H\u00e4r \u00e4r priserna f\u00f6r att anv\u00e4nda Sauce Labs:<\/p>\n<p><img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/1367d2b59bbef9603b4b4be166e8d721.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJag antar att du redan har m\u00e4rkt skillnaden, men jag ger fortfarande en tabell med ber\u00e4kningar f\u00f6r v\u00e5r uppgift:<\/p>\n<p><strong>N\u00f6dv\u00e4ndiga resurser<\/strong><br \/>\n<strong>M\u00e5nadsvis<\/strong><br \/>\n<strong>Arbetstimmar<\/strong><strong>(8 a.m \u2014 8 p.m)<\/strong><br \/>\n<strong>Arbetstimmar<\/strong><strong>+ Preemptible<\/strong><\/p>\n<p><strong>GCP f\u00f6r Web<\/strong><br \/>\nn1-standard-1 x 8 = n1-standard-8<br \/>\n$194.18<br \/>\n23 dagar * 12h * 0.38 = 104.88$\u00a0<br \/>\n23 dagar * 12h * 0.08 = 22.08$<\/p>\n<p><strong>Sauce Labs f\u00f6r Web<\/strong><br \/>\nVirtuell Cloud8 parallella tester<br \/>\n$1.559<br \/>\n\u2014<br \/>\n\u2014<\/p>\n<p><strong>GCP f\u00f6r Android<\/strong><br \/>\nn1-standard-4 x 8: n1-standard-16<br \/>\n$776.72<br \/>\n23 dagar * 12h * 1.52 = 419.52$\u00a0<br \/>\n23 dagar * 12h * 0.32 = 88.32$<\/p>\n<p><strong>Sauce Labs f\u00f6r Android<\/strong><br \/>\nReal Device Cloud 8 parallella tester<br \/>\n$1.999<br \/>\n\u2014<br \/>\n\u2014<\/p>\n<p>\nSom du kan se, \u00e4r kostnadsskillnaden enorm, s\u00e4rskilt om testerna k\u00f6rs endast under den arbetsm\u00e4ssiga tolv timmars perioden. Men kostnaderna kan ytterligare minskas om preemptible maskiner anv\u00e4nds. Vad inneb\u00e4r det?<\/p>\n<blockquote><p>En preemptible VM \u00e4r en instans som du kan skapa och k\u00f6ra till ett mycket l\u00e4gre pris \u00e4n vanliga instanser. Men Compute Engine kan avbryta (preempt) dessa instanser om den beh\u00f6ver tillg\u00e5ng till dessa resurser f\u00f6r andra uppgifter. Preemptible instanser \u00e4r \u00f6verskottskapacitet fr\u00e5n Compute Engine, s\u00e5 deras tillg\u00e4nglighet varierar med anv\u00e4ndning.<\/p>\n<p>Om dina appar \u00e4r fel-t\u00e5liga och kan st\u00e5 emot m\u00f6jliga instans-avbrott, kan preemptible instanser minska dina Compute Engine-kostnader avsev\u00e4rt. Till exempel kan batchbearbetningsjobb k\u00f6ras p\u00e5 preemptible instanser. Om n\u00e5gra av dessa instanser avslutas under bearbetningen saktas jobbet ned men stoppas inte helt. Preemptible instanser slutf\u00f6r dina batchbearbetningsuppgifter utan att \u00f6ka arbetsbelastningen p\u00e5 dina befintliga instanser och utan att du beh\u00f6ver betala fullt pris f\u00f6r ytterligare normala instanser.<\/p><\/blockquote>\n<p>\n Och det \u00e4r fortfarande inte slut! I verkligheten \u00e4r jag s\u00e4ker p\u00e5 att ingen k\u00f6r tester i 12 timmar utan avbrott. Och om s\u00e5 \u00e4r fallet, kan du automatiskt starta och stoppa virtuella maskiner n\u00e4r de inte beh\u00f6vs. Den verkliga anv\u00e4ndningen kan minskas till 6 timmar per dag. D\u00e5 skulle kostnaden i v\u00e5r situation sjunka till s\u00e5 l\u00e5gt som 11$ i m\u00e5naden f\u00f6r 8 webbl\u00e4sare. \u00c4r inte det fantastiskt? Men med preemptible maskiner m\u00e5ste vi vara f\u00f6rsiktiga och f\u00f6rberedda p\u00e5 avbrott och instabilitet, \u00e4ven om dessa situationer kan f\u00f6rutses och hanteras programm\u00e4ssigt. Det \u00e4r v\u00e4rt det!<\/p>\n<p>Men jag s\u00e4ger absolut inte 'anv\u00e4nd aldrig molntestfarmar'. De har flera f\u00f6rdelar. F\u00f6r det f\u00f6rsta \u00e4r det inte bara en virtuell maskin, utan en fullst\u00e4ndig l\u00f6sning f\u00f6r automatisering av tester med ett paket funktioner direkt ur l\u00e5dan: fj\u00e4rr\u00e5tkomst, loggar, sk\u00e4rmdumpar, videoinspelningar, olika webbl\u00e4sare och fysiska mobila enheter. I m\u00e5nga situationer kan detta vara en ov\u00e4rderlig och lyxig alternativ. S\u00e4rskilt testplattformar \u00e4r anv\u00e4ndbara f\u00f6r IOS-automatisering, d\u00e4r offentliga moln endast kan erbjuda Linux-\/Windows-system. Men samtalet om IOS kommer att vara i kommande artiklar. Jag rekommenderar alltid att man bed\u00f6mer situationen och utg\u00e5r fr\u00e5n uppgifterna: i vissa fall \u00e4r det billigare och mer effektivt att anv\u00e4nda offentliga moln, medan det i andra fall \u00e4r testplattformar som definitivt \u00e4r v\u00e4rda pengarna.<\/p>\n<h3>Illustration av det nuvarande tillst\u00e5ndet f\u00f6r infrastrukturen<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/f68770c9e27677b9d762af574726c90e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>L\u00e4nkar f\u00f6r studier<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/gcp\/\">GCP<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/compute\/docs\/instances\/preemptible\">GCP: Preemptible<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/compute\/vm-instance-pricing\">GCP: VM-priser<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/saucelabs.com\/pricing\">SauceLabs<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.inovex.de\/blog\/comparing-cloud-providers\/\">J\u00e4mf\u00f6relse av molnleverant\u00f6rer<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Liknande verktyg:<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/\">AWS<\/a><\/noindex>\u00a0<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/azure.microsoft.com\/en-us\/\">Azure<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2>6. Orkestrering<\/h2>\n<p><\/p>\n<h3>Kort beskrivning av tekniken<\/h3>\n<p>\n Jag har goda nyheter \u2013 vi har n\u00e4stan n\u00e5tt slutet av artikeln! F\u00f6r n\u00e4rvarande best\u00e5r v\u00e5r automatiseringsinfrastruktur av web och Android-tester som vi k\u00f6r parallellt via GitLab CI, med hj\u00e4lp av verktyg som st\u00f6der Docker: Selenium grid och Selenoid. Dessutom anv\u00e4nder vi virtuella maskiner skapade via GCP f\u00f6r att k\u00f6ra containrar med webbl\u00e4sare och emulatorer. F\u00f6r att minska kostnaderna k\u00f6r vi dessa virtuella maskiner endast p\u00e5 beg\u00e4ran och st\u00e4nger av dem n\u00e4r testerna inte utf\u00f6rs. Finns det n\u00e5got mer som kan f\u00f6rb\u00e4ttra v\u00e5r infrastruktur? Svaret \u00e4r ja! H\u00e4r \u00e4r Kubernetes (K8s)!<\/p>\n<p>F\u00f6r att b\u00f6rja, l\u00e5t oss se hur orden orkestrering, kluster och Kubernetes \u00e4r relaterade. P\u00e5 en h\u00f6g niv\u00e5 \u00e4r orkestrering ett system som distribuerar och hanterar applikationer. F\u00f6r automatisering av tester \u00e4r s\u00e5dana containeriserade applikationer Selenium grid och Selenoid. Docker och K8s kompletterar varandra. Den f\u00f6rsta anv\u00e4nds f\u00f6r att distribuera applikationer, den andra f\u00f6r orkestrering. \u00c5 sin sida \u00e4r K8s ett kluster. Klusterets uppgift \u00e4r att anv\u00e4nda VMs som noder, vilket g\u00f6r att olika funktionaliteter, program och tj\u00e4nster kan installeras inom en server (kluster). Om n\u00e5gon av noderna faller, s\u00e5 tar andra noder \u00f6ver, vilket s\u00e4kerst\u00e4ller att v\u00e5r applikation fungerar oavbrutet. Ut\u00f6ver detta har K8s viktig funktionalitet relaterad till skalning, vilket g\u00f6r att vi automatiskt f\u00e5r optimalt antal resurser baserat p\u00e5 belastning och angivna begr\u00e4nsningar.<\/p>\n<p>\u00c4rligt talat \u00e4r manuell drifts\u00e4ttning av Kubernetes fr\u00e5n grunden en ganska komplicerad uppgift. Jag kommer att l\u00e4mna en l\u00e4nk till den k\u00e4nda praktiska guiden \"Kubernetes The Hard Way\", och om du \u00e4r intresserad kan du \u00f6va p\u00e5 det. Men lyckligtvis finns det alternativ och verktyg. Det enklaste av dem \u00e4r att anv\u00e4nda Google Kubernetes Engine (GKE) i GCP, vilket ger en f\u00e4rdig kluster efter n\u00e5gra klick. F\u00f6r att b\u00f6rja rekommenderar jag verkligen att anv\u00e4nda denna metod, eftersom den l\u00e5ter dig fokusera p\u00e5 hur du kan anv\u00e4nda K8s f\u00f6r dina uppgifter ist\u00e4llet f\u00f6r att unders\u00f6ka hur de interna komponenterna b\u00f6r integreras med varandra.\u00a0<\/p>\n<h3>V\u00e4rde f\u00f6r automatiseringsinfrastruktur<\/h3>\n<p>\nL\u00e5t oss titta p\u00e5 n\u00e5gra viktiga funktioner som K8s erbjuder:<\/p>\n<ul>\n<li>applikationsdistribuering: anv\u00e4ndning av multi-nodes kluster ist\u00e4llet f\u00f6r VMs;<\/li>\n<li>dynamisk skalning: minskar kostnader f\u00f6r resurser som anv\u00e4nds endast vid behov;<\/li>\n<li>sj\u00e4lv\u00e5terst\u00e4llning (Self-healing): automatisk \u00e5terst\u00e4llning av pods (vilket i sin tur \u00e5terst\u00e4ller containrar);<\/li>\n<li>utrullning av uppdateringar och \u00e5terg\u00e5r till \u00e4ndringar utan driftstopp: uppdatering av verktyg, webbl\u00e4sare och emulatorer avbryter inte nuvarande anv\u00e4ndare<\/li>\n<\/ul>\n<p>\n Men K8s \u00e4r fortfarande inte en silverkula. F\u00f6r att f\u00f6rst\u00e5 alla f\u00f6rdelar och begr\u00e4nsningar i sammanhanget av de verktyg vi diskuterar (Selenium grid, Selenoid) ska vi kort diskutera strukturen av K8s. Kluster inneh\u00e5ller tv\u00e5 typer av noder: Master Nodes och Worker Nodes. Master Nodes ansvarar f\u00f6r hantering, distribuerande och schemal\u00e4ggningsbeslut. Worker nodes \u00e4r d\u00e4r applikationerna k\u00f6rs. Noder inneh\u00e5ller ocks\u00e5 en k\u00f6rmilj\u00f6 f\u00f6r containrar. I v\u00e5rt fall \u00e4r det Docker, som ansvarar f\u00f6r operationer relaterade till containrar. Men det finns ocks\u00e5 alternativa l\u00f6sningar, till exempel<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containerd\/containerd\"> containerd<\/a><\/noindex>. Det \u00e4r viktigt att f\u00f6rst\u00e5 att skalning eller sj\u00e4lv\u00e5terst\u00e4llning inte h\u00e4nf\u00f6r sig direkt till containrar. Detta realiseras genom att l\u00e4gga till\/minska antalet pods, som i sin tur inneh\u00e5ller containrar (vanligtvis en container per pod, men beroende p\u00e5 uppgiften kan det vara fler). Den h\u00f6gre hierarkin representerar worker nodes, inom vilka pods finns, inuti vilka containrar k\u00f6rs.<\/p>\n<p>Skalningsfunktionen \u00e4r avg\u00f6rande och kan till\u00e4mpas b\u00e5de p\u00e5 noder inom klustrets nodpool och p\u00e5 pods inom noden. Det finns tv\u00e5 typer av skalning som g\u00e4ller b\u00e5de noder och pods. Den f\u00f6rsta typen - horisontell - inneb\u00e4r att antalet noder\/pods \u00f6kas. Denna typ \u00e4r mer f\u00f6redragen. Den andra typen, motsvarande, \u00e4r vertikal. Skalningen genomf\u00f6rs genom att \u00f6ka storleken p\u00e5 noder\/pods snarare \u00e4n deras antal.<\/p>\n<p>Nu ska vi titta p\u00e5 v\u00e5ra verktyg i samband med de ovan n\u00e4mnda termerna.<\/p>\n<p><u>Selenium grid<\/u><\/p>\n<p>Som n\u00e4mnts tidigare \u00e4r Selenium grid ett mycket popul\u00e4rt verktyg, och det \u00e4r ingen \u00f6verraskning att det har containeriserats. D\u00e4rf\u00f6r \u00e4r det inte f\u00f6rv\u00e5nande att Selenium grid kan distribueras i K8s. Ett exempel p\u00e5 hur detta g\u00f6rs kan hittas i det officiella K8s-repositoriet. Som vanligt bifogar jag l\u00e4nkar i slutet av avsnittet. Ut\u00f6ver detta visar en praktisk guide hur man g\u00f6r det med Terraform. Det finns ocks\u00e5 en instruktion f\u00f6r hur man skalar antalet pods som inneh\u00e5ller containrar med webbl\u00e4sare. Men automatisk skalning i kontexten av K8s \u00e4r fortfarande en uppgift som inte \u00e4r helt uppenbar. N\u00e4r jag b\u00f6rjade studera hittade jag ingen praktisk guide eller rekommendationer. Efter flera unders\u00f6kningar och experiment med st\u00f6d fr\u00e5n v\u00e5rt DevOps-team valde vi metoden att lyfta containrar med de \u00f6nskade webbl\u00e4sarna inom en pod som ligger inom en arbetsnod. Denna metod g\u00f6r det m\u00f6jligt f\u00f6r oss att till\u00e4mpa en strategi f\u00f6r horisontell skalning av noder genom att \u00f6ka deras antal. Jag hoppas att situationen f\u00f6r\u00e4ndras i framtiden, och att vi ser fler och fler beskrivningar av de b\u00e4sta metoderna och f\u00e4rdiga l\u00f6sningarna, s\u00e4rskilt efter lanseringen av Selenium grid 4 med en \u00e4ndrad intern arkitektur.<\/p>\n<p><u>Selenoid<\/u>:<\/p>\n<p>F\u00f6r n\u00e4rvarande \u00e4r distribuerar Selenoid i K8s den st\u00f6rsta besvikelsen. De \u00e4r inte kompatibla. Teoretiskt kan vi lyfta Selenoid-containern inom en pod, men n\u00e4r Selenoid b\u00f6rjar k\u00f6ra containrar med webbl\u00e4sare kommer de fortfarande att vara inom samma pod. Detta g\u00f6r skalning om\u00f6jlig och som ett resultat kommer driften av Selenoid inom klustret inte att skilja sig fr\u00e5n driften inom en virtuell maskin. Slutet p\u00e5 historien.<\/p>\n<p><u>Moon<\/u>:<\/p>\n<p>Med vetskap om denna flaskhals n\u00e4r man arbetar med Selenoid har utvecklarna sl\u00e4ppt ett kraftfullare verktyg som de kallat Moon. Detta verktyg var ursprungligen avsett f\u00f6r anv\u00e4ndning med Kubernetes och som ett resultat kan och b\u00f6r man anv\u00e4nda automatiseringsfunktionen. Dessutom skulle jag s\u00e4ga att just nu \u00e4r detta <u>den enda<\/u> verktyget i v\u00e4rlden av Selenium som har native K8s-klusterst\u00f6d direkt ur l\u00e5dan (<i>inte l\u00e4ngre, se n\u00e4sta verktyg <\/i>). En nyckelfunktion hos Moon som m\u00f6jligg\u00f6r detta st\u00f6d \u00e4r:\u00a0<\/p>\n<blockquote><p>Helt stateless. Selenoid lagrar i minnet information om f\u00f6r n\u00e4rvarande aktiva webbl\u00e4sarsessioner. Om dess process av n\u00e5gon anledning kraschar f\u00f6rloras alla aktiva sessioner. Moon d\u00e4remot har inget internt tillst\u00e5nd och kan replikeras \u00f6ver datacentren. Webbl\u00e4sarsessioner f\u00f6rblir aktiva \u00e4ven om en eller flera repliker g\u00e5r ner.<\/p><\/blockquote>\n<p>S\u00e5, Moon \u00e4r en fantastisk l\u00f6sning, men med ett problem, det \u00e4r inte gratis. Priset beror p\u00e5 antalet sessioner. Gratis kan man endast k\u00f6ra 0-4 sessioner, vilket inte \u00e4r s\u00e4rskilt anv\u00e4ndbart. Men fr\u00e5n och med den femte sessionen m\u00e5ste man betala 5 $ f\u00f6r varje. Situationen kan variera mellan f\u00f6retag, men i v\u00e5rt fall \u00e4r anv\u00e4ndningen av Moon meningsl\u00f6s. Som jag beskrev ovan kan vi starta VMs med Selenium Grid p\u00e5 beg\u00e4ran eller \u00f6ka antalet noder i klustret. F\u00f6r varje pipeline k\u00f6r vi cirka 500 webbl\u00e4sare och stoppar alla resurser efter att testerna \u00e4r utf\u00f6rda. Om vi skulle anv\u00e4nda Moon skulle vi beh\u00f6va betala ytterligare 500 x 5 = 2500 $ i m\u00e5naden, oavsett hur ofta vi k\u00f6r tester. Och \u00e5terigen, jag s\u00e4ger inte \"anv\u00e4nd inte Moon\". F\u00f6r dina behov kan det vara en ov\u00e4rderlig l\u00f6sning, s\u00e4rskilt om du har m\u00e5nga projekt\/team inom organisationen och beh\u00f6ver ett stort gemensamt kluster f\u00f6r alla. Som alltid l\u00e4mnar jag en l\u00e4nk i slutet och rekommenderar att g\u00f6ra alla n\u00f6dv\u00e4ndiga ber\u00e4kningar i f\u00f6rh\u00e5llande till din uppgift.<\/p>\n<p><u>Callisto<\/u>: (<i><strong>Observera! Detta finns inte i den ursprungliga artikeln och finns endast i den ryska \u00f6vers\u00e4ttningen.<\/strong><\/i>)<\/p>\n<p>Som jag sa tidigare \u00e4r Selenium ett mycket popul\u00e4rt verktyg och IT-omr\u00e5det utvecklas snabbt. Medan jag arbetade med \u00f6vers\u00e4ttningen d\u00f6k ett nytt lovande verktyg upp, Callisto (hej Cypress och andra Selenium-konkurrenter). Det fungerar nativt med K8s och g\u00f6r det m\u00f6jligt att k\u00f6ra Selenoid-containrar i pods, f\u00f6rdelat p\u00e5 Nodes. Allt fungerar direkt ur l\u00e5dan, inklusive automatisk skalning. Fantastiskt, men det m\u00e5ste testas. Jag har redan lyckats implementera detta verktyg och k\u00f6ra n\u00e5gra experiment. Men det \u00e4r f\u00f6r tidigt att dra slutsatser, efter att jag f\u00e5tt resultaten p\u00e5 l\u00e5ng sikt kanske jag g\u00f6r en \u00f6versikt i kommande artiklar. Tills vidare l\u00e4mnar jag bara l\u00e4nkar f\u00f6r sj\u00e4lvst\u00e4ndiga studier.\u00a0\u00a0<\/p>\n<h3>Illustration av det nuvarande tillst\u00e5ndet f\u00f6r infrastrukturen<\/p>\n<h3><img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/c9c2ffd21df2a261947df809dcec7108.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>L\u00e4nkar f\u00f6r studier<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/setup\/\">Kubernetes: installation<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\">Kubernetes: den sv\u00e5ra v\u00e4gen<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/examples\/tree\/master\/staging\/selenium\">Kubernetes: Selenium<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/kubernetes-engine\">GCP: Kubernetes-motor<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aerokube.com\/moon\/latest\/\">Moon<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Kubernetes-Book-Version-November-2018-ebook\/dp\/B072TS9ZQZ\/ref=pd_sim_351_1\/147-1129855-1615632?_encoding=UTF8&amp;pd_rd_i=B072TS9ZQZ&amp;pd_rd_r=489f0d27-dd2c-4e33-b23c-a420affcba5d&amp;pd_rd_w=HLjs5&amp;pd_rd_wg=eGbU7&amp;pf_rd_p=bab57536-7c8f-4781-a8ed-3e270b9cd303&amp;pf_rd_r=G71DN3V8127KHPXQ6JFN&amp;psc=1&amp;refRID=G71DN3V8127KHPXQ6JFN\">Kubernetes-boken<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MmdGyqNqs9w\">Distribuerad automation med Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/wiki\/Selenium-Grid-4\">Selenium Grid 4<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wrike\/callisto\">Callisto GitHub<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/software-testing.ru\/events\/review\/3317-wrike-techclub\">Wrike TechClub (Callisto)<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Liknande verktyg<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/get-started\/swarm-deploy\/\">Docker swarm<\/a><\/noindex>\u00a0<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/mesosphere.github.io\/marathon\/\">Marathon<\/a><\/noindex>\u00a0<\/li>\n<\/ul>\n<p><\/p>\n<h2>7. Infrastruktur som kod (IaC)<\/h2>\n<p><\/p>\n<h3>Kort beskrivning av tekniken<\/h3>\n<p>\n Och h\u00e4r har vi kommit till den sista delen. Vanligtvis faller denna teknik och relaterade uppgifter utanf\u00f6r ansvarsomr\u00e5det f\u00f6r automatiseringsingenj\u00f6rer. Och det finns anledning till det. F\u00f6r det f\u00f6rsta ligger infrastrukturella fr\u00e5gor under DevOps-avdelningens kontroll i m\u00e5nga organisationer, och utvecklingsteamet bryr sig inte s\u00e5 mycket om vad som driver pipeline eller hur man ska underh\u00e5lla allt som h\u00f6r till den. F\u00f6r det andra, l\u00e5t oss vara \u00e4rliga, praktiken \"Infrastruktur som kod (IaC)\" till\u00e4mpas fortfarande inte i m\u00e5nga f\u00f6retag. Men det har definitivt blivit en popul\u00e4r trend och det \u00e4r viktigt att f\u00f6rs\u00f6ka vara involverad i de relaterade processerna, metoderna och verktygen. Eller \u00e5tminstone h\u00e5lla sig informerad om vad som h\u00e4nder.<\/p>\n<p>L\u00e5t oss b\u00f6rja med motivationen f\u00f6r att anv\u00e4nda detta tillv\u00e4gag\u00e5ngss\u00e4tt. Vi har redan diskuterat att f\u00f6r att k\u00f6ra tester i GitlabCI beh\u00f6ver vi minst resurser f\u00f6r att k\u00f6ra Gitlab Runner. Och f\u00f6r att starta containrar med webbl\u00e4sare\/emulatorer m\u00e5ste vi reservera en VM eller en kluster. F\u00f6rutom resurserna f\u00f6r testning beh\u00f6ver vi \u00e4ven betydande kapacitet f\u00f6r att uppr\u00e4tth\u00e5lla utvecklings-, staging- och produktionsmilj\u00f6er, vilket \u00e4ven inkluderar databaser, automatiska scheman, n\u00e4tverkskonfigurationer, lastbalanserare, anv\u00e4ndarr\u00e4ttigheter och s\u00e5 vidare. Det centrala problemet \u00e4r de n\u00f6dv\u00e4ndiga insatserna f\u00f6r att st\u00f6dja allt detta. Det finns flera s\u00e4tt att g\u00f6ra \u00e4ndringar och implementera uppdateringar. Till exempel, i kontexten av GCP kan vi anv\u00e4nda UI-konsolen i webbl\u00e4saren och utf\u00f6ra alla \u00e5tg\u00e4rder genom att klicka p\u00e5 knappar. Ett alternativ kan vara att anv\u00e4nda API-anrop f\u00f6r att interagera med molnentiteter eller att anv\u00e4nda kommandoradsverktyget gcloud f\u00f6r att utf\u00f6ra n\u00f6dv\u00e4ndiga manipulationer. Men med en verkligt stor m\u00e4ngd olika entiteter och infrastrukturkomponenter blir det sv\u00e5rt eller till och med om\u00f6jligt att utf\u00f6ra alla operationer manuellt. Dessutom \u00e4r alla dessa manuella \u00e5tg\u00e4rder okontrollerade. Vi kan inte skicka dem p\u00e5 granskning innan de genomf\u00f6rs, anv\u00e4nda versionskontrollsystem och snabbt \u00e5terst\u00e4lla \u00e4ndringar som ledde till en incident. F\u00f6r att l\u00f6sa s\u00e5dana problem har ingenj\u00f6rer skapat och forts\u00e4tter att skapa automatiska bash\/shell-skript, vilket inte \u00e4r mycket b\u00e4ttre \u00e4n de tidigare metoderna, eftersom de inte \u00e4r l\u00e4tta att snabbt l\u00e4sa, f\u00f6rst\u00e5, underh\u00e5lla och modifiera i procedurstil.<\/p>\n<p>I den h\u00e4r artikeln och den praktiska guiden anv\u00e4nder jag 2 verktyg som relaterar till praktiken IaC. Dessa \u00e4r Terraform och Ansible. Vissa anser att det inte \u00e4r meningsfullt att anv\u00e4nda dem samtidigt, eftersom deras funktionalitet \u00e4r liknande och de \u00e4r utbytbara. Men saken \u00e4r den att de ursprungligen st\u00e4lls inf\u00f6r helt olika uppgifter. Faktumet att dessa verktyg ska komplettera varandra har bekr\u00e4ftats vid en gemensam presentation av utvecklare fr\u00e5n f\u00f6retagen HashiCorp och RedHat. Den konceptuella skillnaden \u00e4r att Terraform \u00e4r ett provisioning-verktyg f\u00f6r att hantera sj\u00e4lva servrarna. Medan Ansible \u00e4r ett verktyg f\u00f6r hantering av konfigurationer, vars uppgift \u00e4r att installera, konfigurera och hantera mjukvara p\u00e5 dessa servrar.<\/p>\n<p>En annan nyckelskillnad mellan dessa verktyg \u00e4r kodskrivningsstilen. Till skillnad fr\u00e5n bash och Ansible, anv\u00e4nder Terraform en deklarativ stil, baserad p\u00e5 beskrivningen av det \u00f6nskade slutgiltiga tillst\u00e5ndet som m\u00e5ste uppn\u00e5s som resultat av utf\u00f6randet. Till exempel, om vi k\u00e4nner f\u00f6r att skapa 10 VMs och till\u00e4mpa f\u00f6r\u00e4ndringar genom Terraform, s\u00e5 f\u00e5r vi 10 VMs. Om vi k\u00f6r skriptet igen, h\u00e4nder ingenting, eftersom vi redan har 10 VMs, och Terraform vet detta, eftersom det lagrar det aktuella tillst\u00e5ndet av infrastrukturen i en state-fil. Men Ansible anv\u00e4nder ett proceduralt tillv\u00e4gag\u00e5ngss\u00e4tt och, om vi ber det att skapa 10 VMs, s\u00e5 f\u00e5r vi 10 VMs vid f\u00f6rsta k\u00f6rningen, p\u00e5 samma s\u00e4tt som med Terraform. Men efter att ha k\u00f6rt det igen, kommer vi att ha 20 VMs. Detta utg\u00f6r den viktiga skillnaden. I den procedurala stilen lagrar vi inte det aktuella tillst\u00e5ndet utan beskriver helt enkelt sekvensen av steg som m\u00e5ste utf\u00f6ras. Naturligtvis kan vi hantera olika situationer, l\u00e4gga till n\u00e5gra kontroller f\u00f6r att kontrollera resurser och aktuellt tillst\u00e5nd, men det \u00e4r meningsl\u00f6st att sl\u00f6sa v\u00e5r tid och energi p\u00e5 att kontrollera denna logik. Dessutom \u00f6kar det risken f\u00f6r att g\u00f6ra misstag.\u00a0<\/p>\n<p>Sammanfattningsvis kan vi dra slutsatsen att det mer l\u00e4mpliga verktyget f\u00f6r provisioning av servrar \u00e4r Terraform och deklarativ notation. \u00c5 andra sidan \u00e4r det b\u00e4ttre att delegera konfigureringens hantering till Ansible. N\u00e4r vi har f\u00f6rst\u00e5tt detta, l\u00e5t oss ta en titt p\u00e5 exempel p\u00e5 anv\u00e4ndning i kontexten av automatisering.<\/p>\n<h3>V\u00e4rde f\u00f6r automatiseringsinfrastruktur<\/h3>\n<p>\n H\u00e4r \u00e4r det viktigt att f\u00f6rst\u00e5 att testautomatiseringsinfrastrukturen b\u00f6r ses som en del av hela f\u00f6retagets infrastruktur. Det betyder att alla IaC-praktiker b\u00f6r till\u00e4mpas globalt p\u00e5 resurserna i hela organisationen. Vem som \u00e4r ansvarig f\u00f6r detta beror p\u00e5 era processer. DevOps-teamet har mer erfarenhet inom dessa fr\u00e5gor, de ser hela bilden av vad som p\u00e5g\u00e5r. Men QA-ingenj\u00f6rer \u00e4r starkare involverade i processen f\u00f6r att bygga automatisering och strukturen f\u00f6r pipeline, vilket g\u00f6r att de b\u00e4ttre kan se alla n\u00f6dv\u00e4ndiga f\u00f6r\u00e4ndringar och m\u00f6jligheter till f\u00f6rb\u00e4ttring. Den b\u00e4sta l\u00f6sningen \u00e4r att arbeta tillsammans, dela kunskap och id\u00e9er f\u00f6r att n\u00e5 det f\u00f6rv\u00e4ntade resultatet.\u00a0<\/p>\n<p>Jag ger n\u00e5gra exempel p\u00e5 anv\u00e4ndning av Terraform och Ansible i sammanhanget av testautomatisering och verktyg som vi diskuterat tidigare:<\/p>\n<p>1. Beskriv de n\u00f6dv\u00e4ndiga egenskaperna och parametrarna f\u00f6r VMs och kluster via Terraform.<\/p>\n<p>2. Installera n\u00f6dv\u00e4ndiga testverktyg med hj\u00e4lp av Ansible: docker, Selenoid, Selenium Grid och ladda ner de n\u00f6dv\u00e4ndiga versionerna av webbl\u00e4sare\/emulatorer.<\/p>\n<p>3. Beskriv via Terraform egenskaperna hos VM:n d\u00e4r GitLab Runner kommer att k\u00f6ras.<\/p>\n<p>4. Installera GitLab Runner och n\u00f6dv\u00e4ndiga tillh\u00f6rande verktyg med hj\u00e4lp av Ansible, ange inst\u00e4llningar och konfigurationer.<\/p>\n<h3>Illustration av det nuvarande tillst\u00e5ndet f\u00f6r infrastrukturen<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/5d793a800a4ef62e181e6cb3a3f0544e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Resurser f\u00f6r studier:<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/\">Terraform<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.ansible.com\/\">Ansible<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.hashicorp.com\/resources\/ansible-terraform-better-together\">Ansible och Terraform fungerar b\u00e4ttre tillsammans<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/blog.gruntwork.io\/a-comprehensive-guide-to-terraform-b3d32832baca\">En omfattande guide till Terraform<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/blog.gruntwork.io\/why-we-use-terraform-and-not-chef-puppet-ansible-saltstack-or-cloudformation-7989dad2865c\">Varf\u00f6r vi anv\u00e4nder Terraform och inte Chef, Puppet, Ansible, SaltStack eller CloudFormation<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/solutions\/infrastructure-as-code\">GCP: IaC<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Liknande verktyg<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.chef.io\/\">Chef<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/puppet.com\/\">Puppet<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/saltstack.com\/\">SaltStack<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.vagrantup.com\/\">Vagrant<\/a><\/noindex><\/li>\n<\/ul>\n<h2>L\u00e5t oss sammanfatta!<\/h2>\n<p><\/p>\n<p><strong>Steg<\/strong><br \/>\n<strong>Teknik<\/strong><br \/>\n<strong>Verktyg<\/strong><br \/>\n<strong>V\u00e4rde f\u00f6r automatiseringsinfrastruktur<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nLokal k\u00f6rning<br \/>\nNode.js, Selenium, Appium<\/p>\n<ul>\n<li>De mest popul\u00e4ra verktygen f\u00f6r web och mobil<\/li>\n<li>St\u00f6d f\u00f6r m\u00e5nga spr\u00e5k och plattformar (inklusive Node.js)<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>2<\/strong><br \/>\nVersionshanteringssystem\u00a0<br \/>\nGit<\/p>\n<ul>\n<li>Liknande f\u00f6rdelar med utvecklingskoden<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>3<\/strong><br \/>\nContainerisering<br \/>\nDocker, Selenium grid, Selenoid (Web, Android)<\/p>\n<ul>\n<li>Parallell k\u00f6rning av tester<\/li>\n<li>Isolerade milj\u00f6er<\/li>\n<li>Enkel, flexibel uppdatering av versioner<\/li>\n<li>Dynamisk stopp av oanv\u00e4nda resurser<\/li>\n<li>L\u00e4tt att konfigurera<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>4<\/strong><br \/>\nCI \/ CD<br \/>\nGitlab CI<\/p>\n<ul>\n<li>Tester \u00e4r en del av pipeline<\/li>\n<li>Snabb feedback<\/li>\n<li>Synlighet f\u00f6r hela f\u00f6retaget\/teamet<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>5<\/strong><br \/>\nMolnplattformar<br \/>\nGoogle Cloud Platform<\/p>\n<ul>\n<li>Resurser p\u00e5 beg\u00e4ran (betala bara n\u00e4r de beh\u00f6vs)<\/li>\n<li>L\u00e4tt att hantera och uppdatera<\/li>\n<li>Synlighet och kontroll \u00f6ver alla resurser<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>6<\/strong><br \/>\nOrkestrering<br \/>\nKubernetes<br \/>\nI kontexten av containrar med webbl\u00e4sare\/emulatorer inuti pods:<\/p>\n<ul>\n<li>Skalning \/ automatisk skalning<\/li>\n<li>Sj\u00e4lv\u00e5terst\u00e4llning<\/li>\n<li>Uppdateringar och \u00e5terst\u00e4llningar utan avbrott<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>7<\/strong><br \/>\nInfrastruktur som kod (IaC)<br \/>\nTerraform, Ansible<\/p>\n<ul>\n<li>Liknande f\u00f6rdelar med utvecklingsinfrastrukturen<\/li>\n<li>Alla f\u00f6rdelar med versionshantering av koden<\/li>\n<li>L\u00e4tt att g\u00f6ra f\u00f6r\u00e4ndringar och underh\u00e5lla<\/li>\n<li>Helt automatiserat<\/li>\n<\/ul>\n<p><\/p>\n<h2>Mind map-diagrammer: evolutionen av infrastrukturen<\/h2>\n<p>\nsteg1: Lokal<br \/>\n<img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/507908ba097a603adc3b301ab2f94a8d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>steg2: VCS<br \/>\n<img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/71c5170293d98375d8ab86d05eb47a33.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>steg3: Containerisering\u00a0<br \/>\n<img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/da33442a592851e07c3f5800c3ee9ead.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>steg4: CI\/CD\u00a0<br \/>\n<img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/900f18b45124412a1ad00d3901efb40e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>steg5: Molnplattformar<br \/>\n<img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/840e5063141ac8787612e2fc46b5d690.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>steg6: Orkestrering<br \/>\n<img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/4651b552efdc893695cbf359c6992e9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>steg7: IaC<br \/>\n<img decoding=\"async\" alt=\"DevOps-verktyg inte bara f\u00f6r DevOps. Processen att bygga infrastruktur f\u00f6r testautomatisering fr\u00e5n grunden\" src=\"\/wp-content\/uploads\/2020\/04\/e784130f570260fc6c3aa263916e3db5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Vad h\u00e4nder h\u00e4rn\u00e4st?<\/h2>\n<p>\nS\u00e5, det h\u00e4r \u00e4r slutet p\u00e5 artikeln. Men som avslutning skulle jag vilja fastst\u00e4lla n\u00e5gra \u00f6verenskommelser med er.<\/p>\n<p><u>Fr\u00e5n er sida<\/u><br \/>\n Som jag n\u00e4mnde tidigare, skulle jag vilja att artikeln b\u00e4r praktiskt v\u00e4rde och hj\u00e4lper er att applicera de kunskaper ni f\u00e5tt i verkligt arbete. Jag l\u00e4gger till l\u00e4nken till den praktiska guiden \u00e4nnu en g\u00e5ng<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> till den praktiska guiden<\/a><\/noindex>.<\/p>\n<p>Men \u00e4ven efter detta, tveka inte att \u00f6va, studera relevanta l\u00e4nkar och b\u00f6cker, ta reda p\u00e5 hur det fungerar i ert f\u00f6retag, identifiera omr\u00e5den som kan f\u00f6rb\u00e4ttras och delta i detta. Lycka till!<\/p>\n<p><u>Fr\u00e5n min sida<\/u><\/p>\n<p>Av rubriken framg\u00e5r det att detta bara var den f\u00f6rsta delen. Trots att den blev ganska l\u00e5ng, kvarst\u00e5r fortfarande viktiga \u00e4mnen. I den andra delen planerar jag att diskutera automatiseringsinfrastruktur i sammanhanget av iOS. P\u00e5 grund av Apples begr\u00e4nsningar kring k\u00f6rning av iOS-simulatorer endast p\u00e5 macOS-system, \u00e4r v\u00e5rt urval av l\u00f6sningar begr\u00e4nsat. Till exempel, vi har inte m\u00f6jlighet att anv\u00e4nda Docker f\u00f6r att k\u00f6ra simulatorn eller offentliga moln f\u00f6r att k\u00f6ra virtuella maskiner. Men det betyder inte att det inte finns andra alternativ. Jag kommer att f\u00f6rs\u00f6ka h\u00e5lla er uppdaterade om de senaste l\u00f6sningarna och moderna verktygen!<\/p>\n<p>Jag n\u00e4mnde ocks\u00e5 inte de ganska stora \u00e4mnena relaterade till \u00f6vervakning. I del 3 avser jag att diskutera de mest popul\u00e4ra verktygen f\u00f6r \u00f6vervakning av infrastruktur, samt vilka data och metrik man b\u00f6r ta h\u00e4nsyn till.<\/p>\n<p>Och till sist. I framtiden planerar jag att sl\u00e4ppa en videokurs om att bygga testinfrastruktur och popul\u00e4ra verktyg. F\u00f6r n\u00e4rvarande finns det ganska m\u00e5nga kurser och f\u00f6rel\u00e4sningar om DevOps p\u00e5 internet, men allt material presenteras i samband med utveckling, men inte automatisering av tester. I den h\u00e4r fr\u00e5gan beh\u00f6ver jag verkligen feedback, om en s\u00e5dan kurs skulle vara intressant och v\u00e4rdefull f\u00f6r testare och automatiserare. Tack p\u00e5 f\u00f6rhand!<\/h3>\n<\/h3>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/497918\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438\u00a0\u00abDevOps tools are not only for DevOps. Building test automation infrastructure from scratch\u00bb. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u0441\u0441\u044b\u043b\u043a\u0438, \u0446\u0438\u0442\u0430\u0442\u044b \u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043c\u044b\u0441\u043b\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a. \u0416\u0435\u043b\u0430\u044e \u0432\u0430\u043c \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f! \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":78677,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-78676","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47DevOps \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f DevOps. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u043d\u0443\u043b\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-04-21T05:42:22+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-21T05:42:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47DevOps-verktyg inte bara f\u00f6r DevOps. Processen f\u00f6r att bygga testautomatiseringsinfrastruktur fr\u00e5n grunden | ProHoster","description":"Del 1: Web \/ Android Observera: denna artikel \u00e4r en \u00f6vers\u00e4ttning till ryska av den ursprungliga artikeln","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47DevOps \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f DevOps. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u043d\u0443\u043b\u044f | ProHoster","og:description":"\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-04-21T05:42:22+00:00","article:modified_time":"2020-04-21T05:42:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"78676","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:53:59","updated":"2022-10-05 06:14:03","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/78676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=78676"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/78676\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/78677"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=78676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=78676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=78676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}