{"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\/da\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","title":{"rendered":"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Del 1: Web \/ Android<\/h1>\n<p>\n <u>Bem\u00e6rk<\/u>: <i>denne artikel er en overs\u00e6ttelse til russisk af den originale artikel\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-v\u00e6rkt\u00f8jer er ikke kun for DevOps. Bygning af testautomatiseringsinfrastruktur fra bunden\u00bb.<\/i><\/a><\/noindex><i> Men alle illustrationer, links, citater og termer er bevaret p\u00e5 originalsproget for at undg\u00e5 forvr\u00e6ngning af betydningen ved overs\u00e6ttelsen til russisk. Jeg \u00f8nsker dig en god l\u00e6sning!<\/i><\/p>\n<p><img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" 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 I \u00f8jeblikket er specialiteten DevOps en af de mest eftertragtede i IT-industrien. Hvis du \u00e5bner popul\u00e6re jobportaler og angiver filtrene for l\u00f8nninger, vil du se, at stillinger relateret til DevOps ligger i toppen af listen. Men det er vigtigt at forst\u00e5, at dette hovedsageligt g\u00e6lder for 'Senior' stillinger, hvilket indeb\u00e6rer, at kandidaten har et h\u00f8jt f\u00e6rdighedsniveau, kendskab til teknologier og v\u00e6rkt\u00f8jer. Dette medf\u00f8rer ogs\u00e5 et h\u00f8jt ansvar for den uafbrudte drift af produktionen. Dog er vi begyndt at glemme, hvad DevOps egentlig er. Oprindeligt var det ikke en specifik person eller afdeling. Hvis man s\u00f8ger efter definitioner p\u00e5 dette udtryk, finder man mange smukke og korrekte substantiver s\u00e5som metodologi, praksis, kulturel filosofi, gruppe af koncepter osv.<\/p>\n<p>Min specialisering er QA automatiseringsingeni\u00f8r, men jeg mener, den ikke kun skal forbindes med at skrive automatetests eller udvikle testframeworks. I 2020 er det ogs\u00e5 n\u00f8dvendigt at have kendskab til automatiseringsinfrastruktur. Det g\u00f8r det muligt at organisere automatiseringsprocessen selvst\u00e6ndigt, fra at k\u00f8re tests til at give resultaterne til alle interesserede parter i overensstemmelse med de satte m\u00e5l. Som et resultat heraf er DevOps-f\u00e6rdigheder en afg\u00f8rende faktor for at udf\u00f8re dette arbejde. Og alt dette er godt, men desv\u00e6rre er der et problem (<i>spoiler: denne artikel g\u00f8r fors\u00f8g p\u00e5 at forenkle dette problem<\/i>). Problemet er, at DevOps er kompliceret. Og det er \u00e5benlyst, for virksomhederne vil ikke betale meget for noget, der er let at g\u00f8re\u2026 I DevOps-verdenen er der et v\u00e6ld af v\u00e6rkt\u00f8jer, termer og praksisser, man skal mestre. Is\u00e6r er dette vanskeligt i starten af karrieren og afh\u00e6nger af den akkumulerede tekniske erfaring.<\/p>\n<p><img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/20712bd4acf881d5346b87f5a2b359d2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKilde: <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>Her vil vi nok afslutte introduktionen og fokusere p\u00e5 form\u00e5let med denne artikel.\u00a0<\/p>\n<h3>Hvad handler denne artikel om<\/h3>\n<p>\nI denne artikel vil jeg dele min erfaring med at opbygge en infrastruktur til automatisering af test. Der er mange kilder til information online om forskellige v\u00e6rkt\u00f8jer og hvordan man bruger dem, men jeg vil fokusere udelukkende p\u00e5 dem i konteksten af automatisering. Jeg tror, at mange automatiseringsingeni\u00f8rer kender til situationen, hvor de udviklede tests, udover dem selv, ikke bliver k\u00f8rt eller vedligeholdt. Derfor bliver testene for\u00e6ldede, og det kr\u00e6ver tid at opdatere dem. I starten af karrieren kan det v\u00e6re en ret udfordrende opgave at beslutte, hvilke v\u00e6rkt\u00f8jer der skal hj\u00e6lpe med at l\u00f8se dette problem, hvordan man v\u00e6lger, konfigurerer og vedligeholder dem. Nogle testere henvender sig til DevOps (folk), og lad os v\u00e6re \u00e6rlige, denne tilgang fungerer. I mange tilf\u00e6lde kan det v\u00e6re den eneste mulighed, da vi ikke har overblik over alle afh\u00e6ngigheder. Men som vi ved, er DevOps meget travle mennesker, da de skal t\u00e6nke p\u00e5 hele virksomhedens infrastruktur, deployment, overv\u00e5gning, mikrotjenester og andre lignende opgaver afh\u00e6ngigt af organisationen\/teamet. Som det ofte er, er automatisering ikke en prioritet. I s\u00e5 fald skal vi fors\u00f8ge at g\u00f8re alt, hvad vi kan fra start til slut. Dette vil reducere afh\u00e6ngigheder, fremskynde arbejdsprocessen, forbedre vores f\u00e6rdigheder og give os et bredere perspektiv p\u00e5, hvad der foreg\u00e5r.<\/p>\n<p>Artiklen pr\u00e6senterer de mest eftertragtede og popul\u00e6re v\u00e6rkt\u00f8jer og viser, hvordan de kan bruges til trin-for-trin opbygning af en automatiseringsinfrastruktur. Hver gruppe er pr\u00e6senteret med v\u00e6rkt\u00f8jer, som jeg har testet p\u00e5 egen h\u00e5nd. Men det betyder ikke, at du skal bruge pr\u00e6cis de samme. Selve v\u00e6rkt\u00f8jerne er ikke vigtige; de dukker op og bliver for\u00e6ldede. Vores ingeni\u00f8ropgave er at forst\u00e5 de grundl\u00e6ggende principper: hvorfor vi har brug for denne gruppe v\u00e6rkt\u00f8jer, og hvilke arbejdsopgaver vi kan l\u00f8se ved hj\u00e6lp af dem. Derfor efterlader jeg i slutningen af hver sektion links til tilsvarende v\u00e6rkt\u00f8jer, som muligvis anvendes i din organisation.<\/p>\n<h3>Hvad der ikke er i denne artikel<\/h3>\n<p>\nJeg vil igen understrege, at artiklen ikke handler om specifikke v\u00e6rkt\u00f8jer, s\u00e5 der vil ikke v\u00e6re nogle kodeeksempler fra dokumentationen eller beskrivelser af specifikke kommandoer. Men i slutningen af hver sektion efterlader jeg links til grundig unders\u00f8gelse.<\/p>\n<p>Dette er gjort af f\u00f8lgende \u00e5rsager:\u00a0<\/p>\n<ul>\n<li>materialet er meget let at finde i forskellige kilder (dokumentation, b\u00f8ger, videokurser);<\/li>\n<li>hvis vi begynder at g\u00e5 i dybden, skal vi skrive 10, 20, 30 dele af denne artikel (mens planen er at have 2-3);<\/li>\n<li>jeg vil blot ikke spilde din tid, da du m\u00e5ske \u00f8nsker at bruge andre v\u00e6rkt\u00f8jer til at opn\u00e5 de samme m\u00e5l.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Praktik<\/h3>\n<p>\nJeg ville virkelig \u00f8nske, at dette materiale ville v\u00e6re nyttigt for hver l\u00e6ser og ikke bare blive l\u00e6st og glemt. I enhver l\u00e6ring er praksis en meget vigtig komponent. Derfor har jeg forberedt<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> et GitHub-repositorium med en trinvis vejledning til, hvordan man g\u00f8r alt fra bunden.<\/a><\/noindex>. Du vil ogs\u00e5 f\u00e5 hjemmeopgaver for at sikre, at du ikke blindt har kopieret linjerne med udf\u00f8rte kommandoer. <\/p>\n<h3>Plan<\/h3>\n<p><\/p>\n<p><strong>Trin<\/strong><br \/>\n<strong>Teknologi<\/strong><br \/>\n<strong>Tools<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nLokal k\u00f8rsel (forbered web \/ android demo tests og k\u00f8r dem lokalt)\u00a0<br \/>\nNode.js, Selenium, Appium<\/p>\n<p><strong>2<\/strong><br \/>\nVersionskontrolsystemer\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 \/>\nCloud-platforme<br \/>\nGoogle Cloud Platform<\/p>\n<p><strong>6<\/strong><br \/>\nOrkestrering<br \/>\nKubernetes<\/p>\n<p><strong>7<\/strong><br \/>\nInfrastruktur som kode (IaC)<br \/>\nTerraform, Ansible<\/p>\n<p><\/p>\n<h3>Strukturen for hver sektion<\/h3>\n<p>\nFor at opretholde fort\u00e6llingen i en visuel form, er hver sektion beskrevet efter f\u00f8lgende plan:<\/p>\n<ul>\n<li>kort beskrivelse af teknologien,<\/li>\n<li>v\u00e6rdi for automatiseringsinfrastrukturen,<\/li>\n<li>illustration af den nuv\u00e6rende tilstand af infrastrukturen,<\/li>\n<li>links til studier,<\/li>\n<li>lignende v\u00e6rkt\u00f8jer.<\/li>\n<\/ul>\n<p><\/p>\n<h2>1. Lokal k\u00f8rsel af tests<\/h2>\n<p><\/p>\n<h3>Kort beskrivelse af teknologien<\/h3>\n<p>\nDette er blot et forberedende skridt til at k\u00f8re demonstrations tests lokalt og for at kontrollere, at de lykkes. I den praktiske del anvendes Node.js, men programmeringssproget og platformen er ogs\u00e5 uv\u00e6sentlige, og man kan bruge dem, der bruges i din virksomhed.\u00a0<\/p>\n<p>Dog anbefaler jeg at bruge Selenium WebDriver som automatiseringsv\u00e6rkt\u00f8j til webplatforme og Appium til Android-platformen henholdsvis, da vi i de f\u00f8lgende trin vil bruge Docker-billeder, der er skr\u00e6ddersyet til at arbejde specifikt med disse v\u00e6rkt\u00f8jer. Desuden, if\u00f8lge kravene i jobopslag, er disse v\u00e6rkt\u00f8jer de mest efterspurgte p\u00e5 markedet.<\/p>\n<p>Som du m\u00e5ske har bem\u00e6rket, betragter vi kun web- og Android-tests. Desv\u00e6rre er iOS en helt anden historie (tak til Apple). Jeg planl\u00e6gger at demonstrere l\u00f8sninger og praksis relateret til iOS i de kommende dele.<\/p>\n<h3>V\u00e6rdi for automatiseringsinfrastruktur<\/h3>\n<p>\nSet fra infrastrukturens synspunkt giver lokal k\u00f8rsel ingen v\u00e6rdi. Du tjekker kun, at testene fungerer p\u00e5 din lokale maskine i lokale browsere og simulatorer. Men under alle omst\u00e6ndigheder er det et n\u00f8dvendigt udgangspunkt.<\/p>\n<h3>Illustration af den nuv\u00e6rende tilstand af infrastrukturen<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/504f28744e29938f66be41c32d9a7dc6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links til unders\u00f8gelse<\/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 eksempler<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/appium\/appium\/tree\/master\/sample-code\/javascript-wd\">Appium JS GitHub eksempler<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Analoge v\u00e6rkt\u00f8jer<\/h3>\n<p><\/p>\n<ul>\n<li>hvilket som helst programmeringssprog, du \u00f8nsker, sammen med Selenium\/Appium - tests;<\/li>\n<li>enhver test;<\/li>\n<li>hvilken som helst test-runner.<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Versionskontrolsystemer (Git)<\/h2>\n<p><\/p>\n<h3>Kort beskrivelse af teknologien<\/h3>\n<p>\n Det vil ikke komme som en stor overraskelse for nogen, hvis jeg siger, at et versionskontrolsystem er en ekstremt vigtig del af udviklingen b\u00e5de i team og individuelt. Baseret p\u00e5 forskellige kilder kan man med sikkerhed sige, at Git er den mest popul\u00e6re repr\u00e6sentant. Versionskontrolsystemet giver mange fordele, s\u00e5som deling af kode, lagring af versioner, gendannelse til tidligere grene, overv\u00e5gning af projektets historie, backups. Vi vil ikke diskutere hvert punkt i detaljer, da jeg er sikker p\u00e5, at du allerede er bekendt med dette og bruger det i dit daglige arbejde. Men hvis du ikke er, anbefaler jeg at stoppe med at l\u00e6se denne artikel og hurtigt f\u00e5 efterrettet dette hul.<\/p>\n<h3>V\u00e6rdi for automatiseringsinfrastruktur<\/h3>\n<p>\n Og her kan du stille et rimeligt sp\u00f8rgsm\u00e5l: \"Hvorfor fort\u00e6ller han os om Git? Alle kender det og bruger det b\u00e5de til kodeudvikling og autoscripts.\" Du vil have helt ret, men i denne artikel taler vi om infrastruktur, og denne sektion fungerer som en introduktion til sektion 7: \"Infrastruktur som kode (IaC)\". For os betyder det, at hele infrastrukturen, inklusive testinfrastrukturen, beskrives i kode, hvilket betyder, at vi ogs\u00e5 kan anvende versionskontrolsystemer p\u00e5 den og opn\u00e5 lignende fordele som for kodeudvikling og automatisering.<\/p>\n<p>Vi vil se n\u00e6rmere p\u00e5 IaC i trin 7, men allerede nu kan du begynde at bruge Git lokalt ved at oprette et lokalt repository. Det samlede billede vil blive udvidet, n\u00e5r vi tilf\u00f8jer et fjernrepository til infrastrukturen.<\/p>\n<h3>Illustration af den nuv\u00e6rende tilstand af infrastrukturen<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/f17c1d2b2f18aa814c44f7c443e49416.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links til unders\u00f8gelse<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.atlassian.com\/git\/tutorials\/what-is-version-control\">Hvad er versionskontrol<\/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 godt i gang \u2014 Om versionskontrol<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Analoge v\u00e6rkt\u00f8jer<\/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 (som nu er en del af Azure DevOps Services)<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2>3. Containerisering (Docker)<\/h2>\n<p><\/p>\n<h3>Kort beskrivelse af teknologien<\/h3>\n<p>\n For at demonstrere, hvordan containerisering har \u00e6ndret spillet, lad os tage et par \u00e5rtier tilbage i tiden. Dengang k\u00f8bte og brugte folk servermaskiner til at k\u00f8re applikationer. Men i de fleste tilf\u00e6lde var de n\u00f8dvendige ressourcer til at k\u00f8re dem ikke kendt p\u00e5 forh\u00e5nd. Som et resultat brugte virksomheder penge p\u00e5 at k\u00f8be dyre, kraftige servere, men en del af disse ressourcer blev ikke fuldt udnyttet.<\/p>\n<p>Det n\u00e6ste skridt i evolutionen var virtuelle maskiner (VM), som l\u00f8ste problemet med spildte ressourcer. Denne teknologi gjorde det muligt at k\u00f8re applikationer uafh\u00e6ngigt af hinanden p\u00e5 en enkelt server og skabte et fuldst\u00e6ndigt isoleret rum. Men desv\u00e6rre har al teknologi sine ulemper. At k\u00f8re VM kr\u00e6ver et fuldt operativsystem, som bruger CPU, RAM, lager og, afh\u00e6ngigt af operativsystemet, skal man tage h\u00f8jde for licensomkostninger. Disse faktorer p\u00e5virker opstartstiden og komplicerer portabiliteten.<\/p>\n<p>Og s\u00e5 er vi n\u00e5et til containerisering. Igen l\u00f8ser denne teknologi det tidligere problem, da containere ikke bruger et fuldt operativsystem, hvilket frigiver en stor m\u00e6ngde ressourcer og giver en hurtig og fleksibel l\u00f8sning til portabilitet.<\/p>\n<p>Selvf\u00f8lgelig er containeriseringsteknologien ikke noget nyt og blev f\u00f8rst pr\u00e6senteret i slutningen af 1970'erne. I de dage blev der lavet meget forskning, udvikling og fors\u00f8g. Men det var netop Docker, der tilpassede denne teknologi og gjorde den let tilg\u00e6ngelig for masserne. I dag, n\u00e5r vi taler om containere, mener vi i de fleste tilf\u00e6lde Docker. N\u00e5r vi taler om Docker-containere, refererer vi til Linux-containere. Vi kan bruge Windows og macOS-systemer til at k\u00f8re containere, men det er vigtigt at forst\u00e5, at der s\u00e5 opst\u00e5r et ekstra lag. For eksempel k\u00f8rer Docker p\u00e5 Mac usynligt containere inden i en letv\u00e6gtig Linux VM. Vi vender tilbage til dette emne, n\u00e5r vi diskuterer k\u00f8rsel af Android-emulatorer i containere, da der her opst\u00e5r en meget vigtig nuance, som vi skal uddybe n\u00e6rmere.<\/p>\n<h3>V\u00e6rdi for automatiseringsinfrastruktur<\/h3>\n<p>\n Vi har konkluderet, at containerisering og Docker er fantastisk. Lad os se p\u00e5 det i en automatiseringskontekst, da hvert v\u00e6rkt\u00f8j eller teknologi skal l\u00f8se et eller andet problem. Lad os fremh\u00e6ve de \u00e5benlyse problemer med automatisering af test i konteksten af UI-tests:<\/p>\n<ul>\n<li>et stort antal afh\u00e6ngigheder ved installation af Selenium og is\u00e6r Appium;<\/li>\n<li>kompatibilitetsproblemer mellem versioner af browsere, simulatorer og drivere;<\/li>\n<li>mangel p\u00e5 isolerede rum til browsere\/simulatorer, hvilket er s\u00e6rligt kritisk for parallel k\u00f8rsel;<\/li>\n<li>det er sv\u00e6rt at administrere og vedligeholde, hvis man skal k\u00f8re 10, 50, 100 eller endda 1000 browsere samtidigt.<\/li>\n<\/ul>\n<p>\nMen eftersom Selenium er det mest popul\u00e6re automatiseringsv\u00e6rkt\u00f8j, og Docker er det mest popul\u00e6re containeriseringsv\u00e6rkt\u00f8j, skulle det ikke komme som en overraskelse, at nogen har fors\u00f8gt at kombinere dem for at f\u00e5 et kraftfuldt v\u00e6rkt\u00f8j til l\u00f8sning af de n\u00e6vnte problemer. Lad os se n\u00e6rmere p\u00e5 s\u00e5danne l\u00f8sninger.\u00a0<\/p>\n<p><u>Selenium grid i Docker<\/u><\/p>\n<p>Dette v\u00e6rkt\u00f8j er det mest popul\u00e6re i verden til at k\u00f8re flere browsere p\u00e5 flere maskiner og styre dem fra et centralt hub. For at starte skal der registreres mindst 2 dele: Hub og Node(r). Hub er det centrale punkt, der modtager alle anmodninger fra testene og fordeler dem til de relevante Nodes. For hver Node kan vi konfigurere specifikke indstillinger, for eksempel ved at angive den \u00f8nskede browser og dens version. Men vi skal stadig s\u00f8rge for kompabilitetsdrivere til browsere og installere dem p\u00e5 de relevante Nodes. Af denne grund anvendes Selenium grid ikke i sin reneste form, medmindre vi har brug for at arbejde med browsere, der ikke kan installeres p\u00e5 Linux OS. I alle andre tilf\u00e6lde vil det v\u00e6re meget mere fleksibelt og korrekt at bruge Docker-images til at k\u00f8re Selenium grid Hub og Nodes. Denne tilgang forenkler styringen af noderne betydeligt, da vi kan v\u00e6lge det image, vi har brug for, med allerede installerede kompatible versioner af browsere og drivere.<\/p>\n<p>P\u00e5 trods af negative anmeldelser om stabiliteten, is\u00e6r n\u00e5r man k\u00f8rer et stort antal Nodes parallelt, forbliver Selenium grid stadig det mest popul\u00e6re v\u00e6rkt\u00f8j til parallelt at k\u00f8re Selenium-test. Det er vigtigt at bem\u00e6rke, at der konstant kommer forskellige forbedringer og modifikationer af dette v\u00e6rkt\u00f8j i open-source, som adresserer forskellige flaskehalse.<\/p>\n<p><u>Selenoid til Web<\/u><\/p>\n<p>Dette v\u00e6rkt\u00f8j er et gennembrud i Selenium-verdenen, da det fungerer lige ud af boksen og har gjort livet meget lettere for mange automatiseringsingeni\u00f8rer. F\u00f8rst og fremmest er det ikke endnu en modifikation af Selenium grid. I stedet har udviklerne skabt en helt ny version af Selenium Hub i Golang, hvilket sammen med letv\u00e6gts Docker-billeder til forskellige browsere har givet et boost til udviklingen af automatiseringstestning. Desuden skal vi i tilf\u00e6lde af Selenium Grid definere alle n\u00f8dvendige browsere og deres versioner p\u00e5 forh\u00e5nd, hvilket ikke er et problem, n\u00e5r man kun arbejder med \u00e9n browser. Men n\u00e5r der er tale om flere underst\u00f8ttede browsere, er Selenoid den bedste l\u00f8sning takket v\u00e6re funktionen 'browser on demand'. Alt, hvad vi skal g\u00f8re, er at uploade de n\u00f8dvendige billeder med browsere p\u00e5 forh\u00e5nd og opdatere konfigurationsfilen, som Selenoid interagerer med. N\u00e5r Selenoid modtager en anmodning fra testene, starter den automatisk den n\u00f8dvendige container med den \u00f8nskede browser. N\u00e5r testen er afsluttet, stopper Selenoid containeren, hvilket frig\u00f8r ressourcer til de n\u00e6ste anmodninger. Denne tilgang fjerner fuldst\u00e6ndigt det velkendte problem med 'nodenedbrydning', som vi ofte oplever i Selenium grid.<\/p>\n<p>Men desv\u00e6rre er Selenoid stadig ikke en s\u00f8lvkugle. Vi har f\u00e5et funktionen 'browser on demand', men funktionen 'ressourcer on demand' er stadig ikke tilg\u00e6ngelig. For at bruge Selenoid skal vi implementere det p\u00e5 fysisk hardware eller p\u00e5 en VM, hvilket betyder, at vi skal vide p\u00e5 forh\u00e5nd, hvor mange ressourcer der skal tildeles. Jeg mener, det er ikke et problem for sm\u00e5 projekter, der k\u00f8rer 10, 20 eller endda 30 browsere parallelt. Men hvad hvis vi har brug for 100, 500, 1000 eller flere? Det giver ikke mening konstant at opretholde og betale for s\u00e5 mange ressourcer. I afsnit 5 og 6 i denne artikel vil vi diskutere l\u00f8sninger, som muligg\u00f8r skalering, hvilket i h\u00f8j grad reducerer virksomhedens omkostninger.<\/p>\n<p><u>Selenoid til Android<\/u><\/p>\n<p>Efter succesen med Selenoid som et v\u00e6rkt\u00f8j til webautomatisering \u00f8nskede folk noget lignende til Android. Og det er sket \u2013 Selenoid er blevet frigivet med support til Android. Fra et h\u00f8jt niveau er principperne for drift sammenlignelige med webautomatisering. Den eneste forskel er, at Selenoid i stedet for browsercontainere starter containere med Android-emulatorer. Efter min mening er dette i \u00f8jeblikket det mest kraftfulde gratis v\u00e6rkt\u00f8j til at k\u00f8re Android-tests parallelt.<\/p>\n<p>Jeg ville helst ikke tale om de negative sider ved dette v\u00e6rkt\u00f8j, da jeg virkelig holder meget af det. Men der er dog de samme ulemper her, som ogs\u00e5 g\u00e6lder for webautomatisering, relateret til skalering. Derudover skal jeg n\u00e6vne en anden begr\u00e6nsning, som kan komme som en overraskelse, hvis vi konfigurerer v\u00e6rkt\u00f8jet for f\u00f8rste gang. For at k\u00f8re Android-billeder har vi brug for en fysisk maskine eller VM med nested virtualisation-support. I den praktiske vejledning viser jeg, hvordan man aktiverer dette p\u00e5 en Linux VM. Men hvis du er macOS-bruger og \u00f8nsker at implementere Selenoid lokalt, vil det v\u00e6re umuligt at k\u00f8re Android-tests. Men du kan altid k\u00f8re en Linux VM lokalt med konfigureret 'nested virtualisation' og implementere Selenoid indeni.<\/p>\n<h3>Illustration af den nuv\u00e6rende tilstand af infrastrukturen<\/h3>\n<p>\n I denne artikels sammenh\u00e6ng vil vi tilf\u00f8je 2 v\u00e6rkt\u00f8jer til illustration af infrastrukturen. Det er Selenium grid til web-tests og Selenoid til Android-tests. I vejledningen p\u00e5 GitHub viser jeg ogs\u00e5, hvordan man bruger Selenoid til at k\u00f8re web-tests.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/1202ae79eba9cffc965f3a5b2648c755.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links til unders\u00f8gelse<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/resources\/what-container\">Docker: hvilken container er<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/get-started\">Docker: kom i gang<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/containerjournal.com\/topics\/container-ecosystems\/5-container-alternatives-to-docker\/\">5 containertilbud til 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 ops\u00e6tning til 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 bog<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Analoge v\u00e6rkt\u00f8jer<\/h3>\n<p><\/p>\n<ul>\n<li>Der findes andre containeriseringsv\u00e6rkt\u00f8jer, men Docker er det mest popul\u00e6re. Hvis du vil pr\u00f8ve noget andet, s\u00e5 husk at de v\u00e6rkt\u00f8jer, vi har set p\u00e5 til parallelt at k\u00f8re Selenium-tests, ikke vil fungere out of the box.\u00a0\u00a0<\/li>\n<li>Som n\u00e6vnt er der mange modifikationer af Selenium grid, for eksempel<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 beskrivelse af teknologien<\/h3>\n<p>\n Praksis med kontinuerlig integration er ganske popul\u00e6r inden for udvikling og st\u00e5r i samme r\u00e6kke som versionskontrolsystemer. P\u00e5 trods af dette f\u00f8ler jeg, at der er forvirring omkring terminologien. I dette afsnit vil jeg gerne beskrive tre variationer af denne teknologi efter min mening. Du kan finde mange artikler p\u00e5 internettet med forskellige fortolkninger, og det er helt i orden, hvis din mening adskiller sig. Det vigtigste er, at du er p\u00e5 samme side som dine kolleger.<\/p>\n<p>S\u00e5 der findes tre termer: CI \u2013 Continuous Integration (kontinuerlig integration), CD \u2013 Continuous Delivery (kontinuerlig levering) og igen CD \u2013 Continuous Deployment (kontinuerlig implementering). (<i>Jeg vil fremover bruge disse termer p\u00e5 engelsk<\/i>). Hver variant tilf\u00f8jer flere ekstra trin til din udviklingspipeline. Men ordet <u>continuous<\/u> (kontinuerlig) er det mest centrale. I denne sammenh\u00e6ng mener vi noget, der sker fra begyndelse til slut, uden afbrydelser eller manuel indgriben. Lad os se p\u00e5 CI &#038; CD og CD i denne sammenh\u00e6ng.<\/p>\n<ul>\n<li><strong>Continuous Integration \u2013<\/strong> det er det f\u00f8rste skridt i evolutionen. Efter at have sendt ny kode til serveren, forventer vi at f\u00e5 hurtig feedback om, at der ikke er noget galt med vores \u00e6ndringer. Normalt inkluderer CI k\u00f8rsel af v\u00e6rkt\u00f8jer til statisk kodeanalyse og modul\u00e6re\/intern API-test. Dette giver os information om vores kode allerede f\u00e5 sekunder\/minutter senere.<\/li>\n<li><strong>Continuous Delivery<\/strong> er et mere avanceret skridt, hvor vi k\u00f8rer integrations\/UI-tests. Men p\u00e5 dette stadium f\u00e5r vi ikke resultaterne s\u00e5 hurtigt som med CI. For det f\u00f8rste kr\u00e6ver disse typer tests mere tid at gennemf\u00f8re. For det andet skal vi have implementeret vores \u00e6ndringer i test\/staging-milj\u00f8et, f\u00f8r vi kan k\u00f8re dem. Desuden, hvis vi taler om mobiludvikling, er der et ekstra trin til opbygning af vores app.<\/li>\n<li><strong>Continuous Deployment<\/strong> det indeb\u00e6rer, at vi automatisk frigiver (release) vores \u00e6ndringer til produktion, hvis alle accepttestene er best\u00e5et i de tidligere trin. Derudover kan der efter frigivelsestrinnet konfigureres forskellige trin, s\u00e5som k\u00f8rslen af smoke-tests i produktion og indsamling af relevante m\u00e5linger. Continuous Deployment er kun muligt ved god d\u00e6kning af automatiserede tests. Hvis der kr\u00e6ves manuel indgriben, herunder test, s\u00e5 er det ikke l\u00e6ngere <u>Continuous<\/u> (kontinuerlig). S\u00e5 kan vi sige, at vores pipeline kun overholder praksis for Continuous Delivery.<\/li>\n<\/ul>\n<p><\/p>\n<h3>V\u00e6rdi for automatiseringsinfrastruktur<\/h3>\n<p>\n I dette afsnit skal jeg pr\u00e6cisere, at n\u00e5r vi taler om end-to-end UI-tests, betyder det, at vi skal implementere vores \u00e6ndringer og relaterede tjenester p\u00e5 testmilj\u00f8er. Continuous Integration-processen er ikke anvendelig til denne opgave, og vi skal sikre os, at vi implementerer mindst Continuous Delivery-praksis. Continuous Deployment giver ogs\u00e5 mening i konteksten af UI-tests, hvis vi planl\u00e6gger at k\u00f8re dem i produktion.<\/p>\n<p>Og f\u00f8r vi ser p\u00e5 illustrationen af \u00e6ndringen i arkitekturen, vil jeg sige et par ord om GitLab CI. I mods\u00e6tning til andre CI\/CD-v\u00e6rkt\u00f8jer tilbyder GitLab et fjernlager og mange andre ekstra funktioner. S\u00e5ledes er GitLab mere end CI. Det inkluderer indbygget h\u00e5ndtering af kildekode, Agile styring, CI\/CD-pipelines, loggingsv\u00e6rkt\u00f8jer og indsamling af m\u00e5linger. GitLab-arkitekturen best\u00e5r af GitLab CI\/CD og GitLab Runner. Her er en kort beskrivelse fra den officielle hjemmeside:<\/p>\n<blockquote><p>GitLab CI\/CD er en webapplikation med et API, der gemmer sin tilstand i en database, administrerer projekter\/builds og tilbyder en brugergr\u00e6nseflade. GitLab Runner er en applikation, der behandler builds. Den kan implementeres separat og arbejder med GitLab CI\/CD gennem et API. For at k\u00f8re tests har du brug for b\u00e5de GitLab-instansen og Runner.<\/p><\/blockquote>\n<p><\/p>\n<h3>Illustration af den nuv\u00e6rende tilstand af infrastrukturen<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/a05ece39b6c6a9aaec4177d4b5242722.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links til unders\u00f8gelse<\/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 bog<\/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 bog<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Analoge v\u00e6rkt\u00f8jer<\/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>og mange andre<\/li>\n<\/ul>\n<p><\/p>\n<h2>5. Cloud-platforme<\/h2>\n<p><\/p>\n<h3>Kort beskrivelse af teknologien<\/h3>\n<p>\n I dette afsnit vil vi tale om den popul\u00e6re trend kaldet 'offentlige skyer'. P\u00e5 trods af de enorme fordele, som de f\u00f8rn\u00e6vnte virtualiseringsteknologier og containerisering giver, har vi stadig brug for beregningsressourcer. Virksomheder k\u00f8ber dyre servere eller lejer datacentre, men i s\u00e5danne tilf\u00e6lde er det n\u00f8dvendigt at lave beregninger (some gange urealistiske) for hvor mange ressourcer vi har brug for, om vi vil bruge dem 24\/7, og til hvilke form\u00e5l. For eksempel kr\u00e6ver produktion en server, der fungerer d\u00f8gnet rundt, men har vi brug for tilsvarende ressourcer til test i ikke-arbejdstid? Dette afh\u00e6nger ogs\u00e5 af typen af udf\u00f8rt test. Et eksempel kunne v\u00e6re belastnings-\/stress-test, som vi planl\u00e6gger at k\u00f8re i ikke-arbejdstimer for at f\u00e5 resultater til n\u00e6ste dag. Men bestemt, d\u00f8gnet-rundt tilg\u00e6ngelighed af servere er ikke n\u00f8dvendig for end-to-end auto-test og is\u00e6r ikke for h\u00e5ndtestmilj\u00f8er. For s\u00e5danne situationer ville det v\u00e6re godt at f\u00e5 s\u00e5 mange ressourcer, som n\u00f8dvendigt p\u00e5 foresp\u00f8rgsel, bruge dem, og stoppe med at betale, n\u00e5r de ikke l\u00e6ngere er n\u00f8dvendige. Desuden ville det v\u00e6re fantastisk at f\u00e5 dem \u00f8jeblikkeligt ved at lave et par klik med musen eller k\u00f8re et par scripts. Dette er, hvad offentlige skyer bruges til. Lad os se p\u00e5 definitionen:<\/p>\n<blockquote><p>\u00abDen offentlige sky defineres som computertjenester, der tilbydes af tredjepartsudbydere over det offentlige internet, hvilket g\u00f8r dem tilg\u00e6ngelige for enhver, der \u00f8nsker at bruge eller k\u00f8be dem. De kan v\u00e6re gratis eller s\u00e6lges on-demand, hvilket g\u00f8r det muligt for kunderne at betale kun for den brug af CPU-cyklusser, lagerplads eller b\u00e5ndbredde, de forbruger\u00bb.<\/p><\/blockquote>\n<p>\n Der er en opfattelse af, at offentlige skyer er dyre. Men deres n\u00f8gleid\u00e9 er at reducere virksomhedens omkostninger. Som n\u00e6vnt tidligere giver offentlige skyer mulighed for at f\u00e5 ressourcer on-demand og betale kun for den tid, de bruges. Nogle gange glemmer vi ogs\u00e5, at medarbejdere f\u00e5r l\u00f8n, og specialister er ogs\u00e5 en dyr ressource. Det er vigtigt at tage h\u00f8jde for, at offentlige skyer betydeligt letter vedligeholdelsen af infrastrukturen, hvilket g\u00f8r det muligt for ingeni\u00f8rer at fokusere p\u00e5 mere vigtige opgaver.\u00a0<\/p>\n<h3>V\u00e6rdi for automatiseringsinfrastruktur<\/h3>\n<p>\n Hvilke specifikke ressourcer har vi brug for til end-to-end UI-tests? Prim\u00e6rt virtuelle maskiner eller klynger (vi vil diskutere Kubernetes i n\u00e6ste sektion) til at k\u00f8re browsere og emulatorer. Jo flere browsere og emulatorer vi \u00f8nsker at k\u00f8re samtidig, jo mere CPU og hukommelse kr\u00e6ves, og jo mere skal vi betale for det. Offentlige skyder i konteksten af automatisering af tests giver os mulighed for at k\u00f8re et stort antal (100, 200, 1000 \u2026) browsere\/emulatorer on-demand, f\u00e5 testresultaterne s\u00e5 hurtigt som muligt og stoppe med at betale for s\u00e5danne vanvittigt ressourcekr\u00e6vende kapaciteter.\u00a0<\/p>\n<p>De mest popul\u00e6re cloud-udbydere er Amazon Web Services (AWS), Microsoft Azure og Google Cloud Platform (GCP). I denne praktiske vejledning gives der eksempler p\u00e5 brug af GCP, men i det store hele er det ligegyldigt, hvad du bruger til automatiseringsopgaver. De tilbyder alle omtrent de samme funktioner. Typisk fokuserer vejledningen til valg af udbyder p\u00e5 hele virksomhedens infrastruktur og forretningsbehov, hvilket ligger uden for rammerne af denne artikel. For automatiseringsingeni\u00f8rer vil det v\u00e6re mere interessant at sammenligne brugen af cloud-udbydere med brugen af cloud-platforme specifikt til testform\u00e5l, s\u00e5som Sauce Labs, BrowserStack, BitBar osv. S\u00e5 lad os g\u00f8re det! Efter min mening er Sauce Labs den mest kendte cloud-testfarm, s\u00e5 jeg valgte den til sammenligning.\u00a0<\/p>\n<p><u>GCP vs. Sauce Labs til automatiseringsform\u00e5l:<\/u><\/p>\n<p>Lad os antage, at vi skal k\u00f8re 8 web-tests og 8 Android-tests samtidig. Til dette vil vi bruge GCP og starte 2 virtuelle maskiner med Selenoid. P\u00e5 den f\u00f8rste ops\u00e6tter vi 8 containere med browsere. P\u00e5 den anden \u2013 8 containere med emulatorer. Lad os se p\u00e5 priserne:\u00a0\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/e4688fd2e6e5593d2e1c22fc57f59484.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n For at k\u00f8re en container med Chrome, har vi brug for <strong>n1-standard-1 <\/strong>maskine. I tilf\u00e6lde af Android vil det v\u00e6re <strong>n1-standard-4 <\/strong>for en enkelt emulator. Faktisk er en mere fleksibel og billigere metode at angive specifikke brugerdefinerede v\u00e6rdier for CPU\/Hukommelse, men i \u00f8jeblikket er det ikke centralt for sammenligningen med Sauce Labs.<\/p>\n<p>Her er taksterne for brug af Sauce Labs:<\/p>\n<p><img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/1367d2b59bbef9603b4b4be166e8d721.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJeg antager, at du allerede har bem\u00e6rket forskellen, men alligevel giver jeg et skema med beregninger for vores opgave:<\/p>\n<p><strong>N\u00f8dvendige ressourcer<\/strong><br \/>\n<strong>M\u00e5nedligt<\/strong><br \/>\n<strong>Arbejdstimer<\/strong><strong>(8 a.m \u2014 8 p.m)<\/strong><br \/>\n<strong>Arbejdstimer<\/strong><strong>+ Preemptible<\/strong><\/p>\n<p><strong>GCP til Web<\/strong><br \/>\nn1-standard-1 x 8 = n1-standard-8<br \/>\n$194.18<br \/>\n23 dage * 12t * 0.38 = 104.88$\u00a0<br \/>\n23 dage * 12t * 0.08 = 22.08$<\/p>\n<p><strong>Sauce Labs til web<\/strong><br \/>\nVirtuelle Cloud8 parallelle tests<br \/>\n$1.559<br \/>\n\u2014<br \/>\n\u2014<\/p>\n<p><strong>GCP til Android<\/strong><br \/>\nn1-standard-4 x 8: n1-standard-16<br \/>\n$776.72<br \/>\n23 dage * 12t * 1.52 = 419.52$\u00a0<br \/>\n23 dage * 12t * 0.32 = 88.32$<\/p>\n<p><strong>Sauce Labs til Android<\/strong><br \/>\nReal Device Cloud 8 parallelle tests<br \/>\n$1.999<br \/>\n\u2014<br \/>\n\u2014<\/p>\n<p>\nSom du kan se, er prisforskellen enorm, is\u00e6r n\u00e5r testene kun k\u00f8res i det normale 12-timers arbejdsinterval. Men omkostningerne kan reduceres yderligere ved at bruge preemptible maskiner. Hvad indeb\u00e6rer det?<\/p>\n<blockquote><p>En preemptible VM er en instans, som du kan oprette og k\u00f8re til en meget lavere pris end normale instanser. Dog kan Compute Engine afslutte (preempt) disse instanser, hvis den har brug for adgang til disse ressourcer til andre opgaver. Preemptible instanser er overskydende Compute Engine kapacitet, s\u00e5 deres tilg\u00e6ngelighed varierer med brugen.<\/p>\n<p>Hvis dine apps er fejltolerante og kan t\u00e5le mulige instans-afbrydelser, kan preemptible instanser reducere dine Compute Engine omkostninger betydeligt. For eksempel kan batchbehandlingsjob k\u00f8re p\u00e5 preemptible instanser. Hvis nogle af disse instanser afsluttes under behandlingen, bliver jobbet langsommere, men stopper ikke helt. Preemptible instanser afslutter dine batchbehandlingsopgaver uden at l\u00e6gge ekstra belastning p\u00e5 dine eksisterende instanser og uden at kr\u00e6ve, at du betaler fuld pris for ekstra normale instanser.<\/p><\/blockquote>\n<p>\n Og det er stadig ikke slut! I virkeligheden er jeg sikker p\u00e5, at ingen k\u00f8rer tests i 12 timer uden pause. Og hvis det er tilf\u00e6ldet, kan du automatisk starte og stoppe virtuelle maskiner, n\u00e5r de ikke er n\u00f8dvendige. Den faktiske brugstid kan reduceres til 6 timer om dagen. S\u00e5 ville betalingen i konteksten af vores opgave falde til hele 11$ om m\u00e5neden for 8 browsere. Er det ikke fantastisk? Men med preemptible maskiner skal vi v\u00e6re forsigtige og forberede os p\u00e5 afbrydelser og ustabil drift, selvom disse situationer kan forudses og h\u00e5ndteres programmatisk. Det er det v\u00e6rd!<\/p>\n<p>Men jeg siger bestemt ikke, at 'du aldrig skal bruge cloud-testfarmen'. De har en r\u00e6kke fordele. F\u00f8rst og fremmest er det ikke bare en virtuel maskine, men en fuldgyldig l\u00f8sning til automatisering af test med et s\u00e6t funktioner lige ud af boksen: fjernadgang, logs, screenshots, videooptagelse, forskellige browsere og fysiske mobile enheder. I mange situationer kan dette v\u00e6re en uundg\u00e5elig luksus. Is\u00e6r testplatforme er nyttige til IOS-automatisering, hvor offentlige cloud-l\u00f8sninger kun kan tilbyde Linux\/Windows-systemer. Men snakken om IOS vil komme i de n\u00e6ste artikler. Jeg anbefaler altid at vurdere situationen og tage udgangspunkt i opgaverne: i nogle tilf\u00e6lde er det billigere og mere effektivt at bruge offentlige clouds, mens testplatforme i andre tilf\u00e6lde bestemt er v\u00e6rd at investere i.<\/p>\n<h3>Illustration af den nuv\u00e6rende tilstand af infrastrukturen<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/f68770c9e27677b9d762af574726c90e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links til unders\u00f8gelse<\/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\/\">Sammenligning af cloud-udbydere<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Relaterede v\u00e6rkt\u00f8jer:<\/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 beskrivelse af teknologien<\/h3>\n<p>\n Jeg har gode nyheder \u2013 vi er n\u00e6sten ved slutningen af artiklen! P\u00e5 nuv\u00e6rende tidspunkt best\u00e5r vores automatiseringsinfrastruktur af web- og Android-tests, som vi k\u00f8rer parallelt via GitLab CI ved hj\u00e6lp af v\u00e6rkt\u00f8jer med Docker-underst\u00f8ttelse: Selenium grid og Selenoid. Desuden bruger vi virtuelle maskiner oprettet gennem GCP til at opstille containere med browsere og emulatorer. For at reducere omkostningerne k\u00f8rer vi disse virtuelle maskiner kun efter behov og stopper dem, n\u00e5r der ikke udf\u00f8res test. Er der noget andet, der kan forbedre vores infrastruktur? Svaret er ja! M\u00f8d Kubernetes (K8s)!<\/p>\n<p>Lad os f\u00f8rst se, hvordan ordene orkestrering, klynge og Kubernetes h\u00e6nger sammen. P\u00e5 et h\u00f8jt niveau er orkestrering et system, der udruller og administrerer applikationer. For automatisering af test er de containeriserede applikationer Selenium grid og Selenoid. Docker og K8s supplerer hinanden. Den f\u00f8rste bruges til udrulning af applikationer, mens den anden bruges til orkestrering. K8s er i sin tur en klynge. Klyngens opgave er at bruge VMs som noder, hvilket g\u00f8r det muligt at installere forskellige funktionaliteter, programmer og tjenester inden for \u00e9n server (klynge). Hvis en af noderne fejler, tager de andre noder over, hvilket sikrer, at vores applikation fungerer uden afbrydelser. Derudover har K8s en vigtig funktionalitet relateret til skalering, som g\u00f8r, at vi automatisk f\u00e5r det optimale antal ressourcer baseret p\u00e5 belastningen og de fastsatte begr\u00e6nsninger.<\/p>\n<p>\u00c6rligt talt er manuel ops\u00e6tning af Kubernetes fra bunden slet ikke en triviel opgave. Jeg vil efterlade et link til den kendte praktiske vejledning \"Kubernetes The Hard Way\", og hvis du er interesseret, kan du \u00f8ve dig. Men heldigvis findes der alternative metoder og v\u00e6rkt\u00f8jer. Den nemmeste m\u00e5de er at bruge Google Kubernetes Engine (GKE) i GCP, hvilket giver dig en klar klynge efter et par klik. Til begyndelsen af din l\u00e6ring anbefaler jeg at bruge denne tilgang, da den giver dig mulighed for at fokusere p\u00e5, hvordan du bruger K8s til dine opgaver i stedet for at unders\u00f8ge, hvordan de interne komponenter skal integreres.\u00a0<\/p>\n<h3>V\u00e6rdi for automatiseringsinfrastruktur<\/h3>\n<p>\nLad os se p\u00e5 nogle betydningsfulde funktioner, som K8s tilbyder:<\/p>\n<ul>\n<li>udrulning af applikationer: brug af multi-nodes klynge i stedet for VMs;<\/li>\n<li>dynamisk skalering: reducerer omkostningerne til ressourcer, som kun bruges efter behov;<\/li>\n<li>selvhelbredelse (Self-healing): automatisk genoprettelse af pods (hvilket ogs\u00e5 genopretter containere);<\/li>\n<li>opdatering af funktioner og tilbagef\u00f8rsel af \u00e6ndringer uden nedetid: opdatering af v\u00e6rkt\u00f8jer, browsere og emulatorer forstyrrer ikke nuv\u00e6rende brugere<\/li>\n<\/ul>\n<p>\n Men K8s er stadig ikke en s\u00f8lvkugle. For at forst\u00e5 alle fordele og begr\u00e6nsninger i konteksten af de v\u00e6rkt\u00f8jer, vi ser p\u00e5 (Selenium grid, Selenoid), lad os kort diskutere strukturen af K8s. En klynge indeholder to typer noder: Master Nodes og Workers Nodes. Master Nodes er ansvarlige for styring, udrulning og scheduling decisions. Workers Nodes er der, hvor applikationerne k\u00f8rer. Noderne indeholder ogs\u00e5 milj\u00f8et for containerk\u00f8rsel. I vores tilf\u00e6lde er det Docker, der h\u00e5ndterer operationer relateret til containere. Men der er ogs\u00e5 alternative l\u00f8sninger, for eksempel<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containerd\/containerd\"> containerd<\/a><\/noindex>. Det er vigtigt at forst\u00e5, at skalering eller selvhelbredelse ikke relaterer sig direkte til containere. Dette implementeres ved at tilf\u00f8je\/fjerne antal pods, som i sin tur indeholder containere (normalt \u00e9n container pr. pod, men afh\u00e6ngigt af opgaven kan der v\u00e6re flere). Den h\u00f8jniveaustruktur best\u00e5r af worker nodes, inden i hvilke der er pods, inden i hvilke der er k\u00f8rende containere.<\/p>\n<p>Skalering er en n\u00f8glefunktion og kan anvendes b\u00e5de p\u00e5 nodes inden for cluster node-pool og p\u00e5 pods inden for node. Der findes 2 typer skalering, der g\u00e6lder for b\u00e5de nodes og pods. Den f\u00f8rste type er horisontal skalering, hvor antal nodes\/pods \u00f8ges. Denne type er den mest foretrukne. Den anden type er vertikal skalering, hvor st\u00f8rrelsen p\u00e5 nodes\/pods \u00f8ges i stedet for antallet.<\/p>\n<p>Lad os nu se p\u00e5 vores v\u00e6rkt\u00f8jer i konteksten af de ovenn\u00e6vnte termer.<\/p>\n<p><u>Selenium grid<\/u><\/p>\n<p>Som n\u00e6vnt tidligere er Selenium grid et meget popul\u00e6rt v\u00e6rkt\u00f8j, og det er ikke overraskende, at det er blevet containeriseret. Det er derfor heller ikke overraskende, at Selenium grid kan implementeres i K8s. Et eksempel p\u00e5, hvordan dette g\u00f8res, kan findes i det officielle K8s-repository. Som altid vedl\u00e6gger jeg links i slutningen af sektionen. Derudover viser en praktisk vejledning, hvordan dette g\u00f8res gennem Terraform. Der er ogs\u00e5 en vejledning til, hvordan man skalerer antallet af pods, der indeholder containere med browsere. Men funktionen til automatisk skalering i konteksten af K8s er stadig ikke en helt klar opgave. Da jeg begyndte at studere, fandt jeg ingen praktisk vejledning eller anbefalinger. Efter adskillige unders\u00f8gelser og eksperimenter med st\u00f8tte fra DevOps-teamet valgte vi at l\u00f8fte containere med de n\u00f8dvendige browsere inde i \u00e9n pod, som er inde i \u00e9n worker node. Denne metode g\u00f8r det muligt for os at anvende strategien for horisontal skalering af nodes ved at \u00f8ge deres antal. Jeg h\u00e5ber, at situationen \u00e6ndrer sig i fremtiden, og at vi ser flere og flere beskrivelser af de bedste metoder og f\u00e6rdige l\u00f8sninger, is\u00e6r efter udgivelsen af Selenium grid 4 med en \u00e6ndret intern arkitektur.<\/p>\n<p><u>Selenoid<\/u>:<\/p>\n<p>I \u00f8jeblikket er implementeringen af Selenoid i K8s den st\u00f8rste skuffelse. De er ikke kompatible. Teoretisk set kan vi starte en Selenoid-container inde i en pod, men n\u00e5r Selenoid begynder at k\u00f8re containere med browsere, vil de stadig befinde sig inde i denne samme pod. Dette g\u00f8r skalering umulig, og som et resultat vil Selenoids funktion i klyngen ikke adskille sig fra driften inde i en virtuel maskine. Slutningen p\u00e5 historien.<\/p>\n<p><u>Moon<\/u>:<\/p>\n<p>Ved at v\u00e6re opm\u00e6rksom p\u00e5 dette flaskehalsproblem ved brug af Selenoid, har udviklerne udgivet et mere kraftfuldt v\u00e6rkt\u00f8j, som de har kaldt Moon. Dette v\u00e6rkt\u00f8j var oprindeligt designet til at arbejde med Kubernetes, og som et resultat heraf kan og b\u00f8r funktionen for automatisk skalering anvendes. Mere end det, vil jeg sige, at det i \u00f8jeblikket er <u>mulige l\u00f8sning. (For eksempel kan man ikke bare \u00e6ndre feltet<\/u> v\u00e6rkt\u00f8jet i verden af Selenium, som ud af boksen har native K8s cluster-support (<i>det er ikke l\u00e6ngere, se n\u00e6ste v\u00e6rkt\u00f8j <\/i>). Den vigtigste funktion ved Moon, som muligg\u00f8r denne st\u00f8tte, er:\u00a0<\/p>\n<blockquote><p>Helt stateless. Selenoid gemmer i hukommelsen oplysninger om de aktuelt k\u00f8rende browsersessioner. Hvis det af en eller anden grund g\u00e5r ned \u2014 s\u00e5 g\u00e5r alle k\u00f8rende sessioner tabt. Moon derimod har ingen intern tilstand og kan repliceres p\u00e5 tv\u00e6rs af datacentre. Browsersessioner forbliver aktive, selv hvis en eller flere replikaer g\u00e5r ned.<\/p><\/blockquote>\n<p>S\u00e5, Moon er en fantastisk l\u00f8sning, men med et problem, det er ikke gratis. Prisen afh\u00e6nger af antallet af sessioner. Det er gratis at k\u00f8re kun 0-4 sessioner, hvilket ikke er s\u00e6rligt nyttigt. Men fra den femte session skal der betales 5$ for hver. Situationen kan variere fra virksomhed til virksomhed, men i vores tilf\u00e6lde giver det ikke mening at bruge Moon. Som jeg beskrev tidligere, kan vi k\u00f8re VMs med Selenium Grid efter behov eller \u00f8ge antallet af Nodes i klyngen. For hver pipeline k\u00f8rer vi cirka 500 browsere og stopper alle ressourcer efter afslutning af testene. Hvis vi brugte Moon, ville vi skulle betale yderligere 500 x 5 = 2500 $ om m\u00e5neden, uanset hvor ofte vi k\u00f8rer testene. Og igen, jeg siger ikke \"brug ikke Moon\". For jeres opgaver kan det v\u00e6re en uundg\u00e5elig l\u00f8sning, is\u00e6r hvis I har mange projekter\/teams i organisationen, og I har brug for et stort f\u00e6lles cluster til alle. Som altid efterlader jeg et link til sidst og anbefaler at lave alle n\u00f8dvendige beregninger i konteksten af jeres opgave.<\/p>\n<p><u>Callisto<\/u>: (<i><strong>Advarsel! Dette er ikke i den originale artikel og findes kun i den russiske overs\u00e6ttelse<\/strong><\/i>)<\/p>\n<p>Som jeg sagde, er Selenium et meget popul\u00e6rt v\u00e6rkt\u00f8j, og IT-branchen udvikler sig hurtigt. Mens jeg arbejdede p\u00e5 overs\u00e6ttelsen, dukkede et nyt lovende v\u00e6rkt\u00f8j, Callisto (hej Cypress og andre dr\u00e6bere af Selenium), op p\u00e5 nettet. Det fungerer nativt med K8s og g\u00f8r det muligt at k\u00f8re Selenoid-containere i pods, distribueret p\u00e5 Nodes. Alt fungerer straks ud af boksen, inklusive automatisk skalerering. Fantastisk, men det skal testes. Jeg har allerede form\u00e5et at implementere dette v\u00e6rkt\u00f8j og s\u00e6tte nogle eksperimenter op. Men det er for tidligt at drage konklusioner; efter at have f\u00e5et resultater over l\u00e6ngere tid, vil jeg m\u00e5ske lave en anmeldelse i kommende artikler. Jeg efterlader blot links til selvst\u00e6ndig research.\u00a0\u00a0<\/p>\n<h3>Illustration af den nuv\u00e6rende tilstand af infrastrukturen<\/p>\n<h3><img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/c9c2ffd21df2a261947df809dcec7108.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links til unders\u00f8gelse<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/setup\/\">Kubernetes: ops\u00e6tning<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\">Kubernetes: den sv\u00e6re m\u00e5de<\/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 engine<\/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-bogen<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MmdGyqNqs9w\">Distribueret automatisering 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>Analoge v\u00e6rkt\u00f8jer<\/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 kode (IaC)<\/h2>\n<p><\/p>\n<h3>Kort beskrivelse af teknologien<\/h3>\n<p>\n Og nu er vi n\u00e5et til det sidste afsnit. Normalt falder denne teknologi og de tilknyttede opgaver ikke inden for automatiseringsingeni\u00f8rernes ansvarsomr\u00e5de. Der er gode grunde til dette. For det f\u00f8rste er infrastrukturelle sp\u00f8rgsm\u00e5l i mange organisationer under kontrol af DevOps-afdelingen, og udviklingsteams bekymrer sig ikke meget om, hvad der f\u00e5r pipeline til at fungere, og hvordan man skal vedligeholde alt, hvad der relaterer sig til det. For det andet, lad os v\u00e6re \u00e6rlige, praksis med \"Infrastruktur som kode (IaC)\" anvendes stadig ikke i mange virksomheder. Men det er bestemt blevet en popul\u00e6r trend, og det er vigtigt at fors\u00f8ge at v\u00e6re involveret i de processer, tilgange og v\u00e6rkt\u00f8jer, der er forbundet med dette. Eller i det mindste v\u00e6re informeret om udviklingen.<\/p>\n<p>Lad os starte med motivationen for at bruge denne tilgang. Vi har allerede dr\u00f8ftet, at vi for at k\u00f8re tests i GitlabCI mindst har brug for ressourcer til at k\u00f8re Gitlab Runner. Og for at starte containere med browsere\/emulatorer skal vi reservere en VM eller et cluster. Udover ressourcerne til testning har vi brug for et betydeligt antal kapaciteter til at underst\u00f8tte udviklings-, staging- og produktionsmilj\u00f8er, hvilket ogs\u00e5 inkluderer databaser, automatiske tidsplaner, netv\u00e6rkskonfigurationer, belastningsfordelere, brugerrettigheder og s\u00e5 videre. Det centrale problem er den n\u00f8dvendige indsats for at st\u00f8tte det hele. Der er flere m\u00e5der, hvormed vi kan foretage \u00e6ndringer og implementere opdateringer. For eksempel, i konteksten af GCP kan vi bruge UI-konsollen i browseren og udf\u00f8re alle handlinger ved at klikke p\u00e5 knapper. En alternativ metode kan v\u00e6re at bruge API-opkald til at interagere med cloud-enkeltheder eller anvende kommandolinjev\u00e6rkt\u00f8jet gcloud til at udf\u00f8re de n\u00f8dvendige manipulationer. Men med et virkelig stort antal forskellige enheder og infrastrukturelementer bliver det sv\u00e6rt eller endda umuligt at udf\u00f8re alle operationer manuelt. Desuden er alle disse manuelle handlinger ukontrollerede. Vi kan ikke sende dem til gennemgang f\u00f8r udf\u00f8relse, bruge versionskontrolsystemer og hurtigt rulle \u00e6ndringer tilbage, som har f\u00f8rt til en h\u00e6ndelse. For at l\u00f8se s\u00e5danne problemer har ingeni\u00f8rer skabt og skaber automatiserede bash\/shell-scripts, hvilket ikke er meget bedre end de tidligere metoder, da de ikke er s\u00e5 lette at l\u00e6se, forst\u00e5, vedligeholde og modificere hurtigt i procedurem\u00e6ssig stil.<\/p>\n<p>I denne artikel og praktiske vejledning bruger jeg to v\u00e6rkt\u00f8jer, der relaterer sig til IaC-praksis. Dette er Terraform og Ansible. Nogle mener, at det ikke giver mening at bruge dem samtidig, da deres funktionalitet ligner hinanden, og de kan erstatte hinanden. Men sagen er, at de oprindeligt stilles forskellige opgaver. Og det faktum, at disse v\u00e6rkt\u00f8jer skal supplere hinanden, blev bekr\u00e6ftet ved en f\u00e6lles pr\u00e6sentation af udviklere repr\u00e6senterende virksomhederne HashiCorp og RedHat. Den konceptuelle forskel er, at Terraform er et provisioning-v\u00e6rkt\u00f8j til at administrere selve serverne. Mens Ansible er et v\u00e6rkt\u00f8j til konfigurationsstyring, hvis opgave er at installere, konfigurere og administrere softwaren p\u00e5 disse servere.<\/p>\n<p>En anden afg\u00f8rende forskel mellem disse v\u00e6rkt\u00f8jer er kodestilen. I mods\u00e6tning til bash og Ansible bruger Terraform en deklarativ stil, der er baseret p\u00e5 beskrivelsen af den \u00f8nskede endelige tilstand, som skal opn\u00e5s som f\u00f8lge af udf\u00f8relsen. For eksempel, hvis vi har t\u00e6nkt os at oprette 10 VMs og anvende \u00e6ndringerne gennem Terraform, f\u00e5r vi 10 VMs. Hvis vi anvender scriptet igen, vil der ikke ske noget, da vi allerede har 10 VMs, og Terraform ved dette, fordi det gemmer den nuv\u00e6rende tilstand af infrastrukturen i en state-fil. Ansible bruger derimod en procedurebaseret tilgang, og hvis vi beder det om at oprette 10 VMs, f\u00e5r vi 10 VMs ved f\u00f8rste k\u00f8rsel, ligesom med Terraform. Men efter en gentagen k\u00f8rsel vil vi allerede have 20 VMs. Dette er den vigtige forskel. I den procedurebaserede stil opbevarer vi ikke den nuv\u00e6rende tilstand og beskriver blot r\u00e6kkef\u00f8lgen af de skridt, der skal udf\u00f8res. Selvf\u00f8lgelig kan vi h\u00e5ndtere forskellige situationer, tilf\u00f8je nogle kontroller for eksisterende ressourcer og den nuv\u00e6rende tilstand, men der er ikke meget mening i at bruge vores tid og kr\u00e6fter p\u00e5 at kontrollere denne logik. Desuden \u00f8ger det risikoen for fejl.\u00a0<\/p>\n<p>Sammenfattende kan vi konkludere, at Terraform og deklarativ notation er det mere passende v\u00e6rkt\u00f8j til provisioning af servere. Mens konfigurationsstyring bedre overlades til Ansible. N\u00e5r vi har forst\u00e5et dette, lad os se p\u00e5 eksempler p\u00e5 anvendelse i konteksten af automatisering.<\/p>\n<h3>V\u00e6rdi for automatiseringsinfrastruktur<\/h3>\n<p>\n Det er vigtigt at forst\u00e5, at infrastrukturen til testautomatisering skal betragtes som en del af hele virksomhedens infrastruktur. Det betyder, at alle IaC-praksisser skal anvendes globalt p\u00e5 ressourcerne i hele organisationen. Hvem der er ansvarlig for dette, afh\u00e6nger af jeres processer. DevOps-teamet har mere erfaring med disse emner, og de har et overordnet billede af situationen. QA-ingeni\u00f8rer er dog mere involveret i processen med at opbygge automatisering og strukturen af pipeline, hvilket giver dem en bedre forst\u00e5else af de n\u00f8dvendige \u00e6ndringer og forbedringsmuligheder. Den bedste l\u00f8sning er at arbejde sammen, dele viden og id\u00e9er for at opn\u00e5 det \u00f8nskede resultat.\u00a0<\/p>\n<p>Lad mig give nogle eksempler p\u00e5 brugen af Terraform og Ansible i konteksten af testautomatisering og de v\u00e6rkt\u00f8jer, vi har diskuteret tidligere:<\/p>\n<p>1. Beskrive de n\u00f8dvendige egenskaber og parametre for VMs og klynger gennem Terraform.<\/p>\n<p>2. Installere de n\u00f8dvendige testv\u00e6rkt\u00f8jer med Ansible: docker, Selenoid, Selenium Grid og downloade de n\u00f8dvendige versioner af browsere\/emulatorer.<\/p>\n<p>3. Beskrive egenskaberne for den VM, hvor GitLab Runner skal k\u00f8res, gennem Terraform.<\/p>\n<p>4. Installere GitLab Runner og n\u00f8dvendige tilh\u00f8rende v\u00e6rkt\u00f8jer med Ansible, og indstille indstillinger og konfigurationer.<\/p>\n<h3>Illustration af den nuv\u00e6rende tilstand af infrastrukturen<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/5d793a800a4ef62e181e6cb3a3f0544e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links til 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 og Terraform bedre sammen<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/blog.gruntwork.io\/a-comprehensive-guide-to-terraform-b3d32832baca\">En omfattende guide til 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\">Hvorfor vi bruger Terraform og ikke 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>Analoge v\u00e6rkt\u00f8jer<\/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>Lad os opsummere!<\/h2>\n<p><\/p>\n<p><strong>Trin<\/strong><br \/>\n<strong>Teknologi<\/strong><br \/>\n<strong>Tools<\/strong><br \/>\n<strong>V\u00e6rdi for automatiseringsinfrastruktur<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nLokal k\u00f8rsel<br \/>\nNode.js, Selenium, Appium<\/p>\n<ul>\n<li>De mest popul\u00e6re v\u00e6rkt\u00f8jer til web og mobil<\/li>\n<li>Support for mange sprog og platforme (inklusive Node.js)<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>2<\/strong><br \/>\nVersionskontrolsystemer\u00a0<br \/>\nGit<\/p>\n<ul>\n<li>Lignende fordele med udviklingskode<\/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>Parallel k\u00f8rsel af tests<\/li>\n<li>Isolerede milj\u00f8er<\/li>\n<li>Enkel, fleksibel opdatering af versioner<\/li>\n<li>Dynamisk nedlukning af ubrugte ressourcer<\/li>\n<li>Nem at konfigurere<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>4<\/strong><br \/>\nCI \/ CD<br \/>\nGitlab CI<\/p>\n<ul>\n<li>Tests er en del af pipeline<\/li>\n<li>Hurtig feedback<\/li>\n<li>Synlighed for hele virksomheden\/teamet<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>5<\/strong><br \/>\nCloud-platforme<br \/>\nGoogle Cloud Platform<\/p>\n<ul>\n<li>Ressourcer p\u00e5 eftersp\u00f8rgsel (betal kun n\u00e5r de er n\u00f8dvendige)<\/li>\n<li>Nem at administrere og opdatere<\/li>\n<li>Synlighed og kontrol over alle ressourcer<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>6<\/strong><br \/>\nOrkestrering<br \/>\nKubernetes<br \/>\nI konteksten af containere med browsere\/emulatorer i pods:<\/p>\n<ul>\n<li>Skalering \/ automatisk skalering<\/li>\n<li>Selvhelbredelse<\/li>\n<li>Opdateringer og tilbageskydninger uden nedetid<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>7<\/strong><br \/>\nInfrastruktur som kode (IaC)<br \/>\nTerraform, Ansible<\/p>\n<ul>\n<li>Lignende fordele med udviklingsinfrastruktur<\/li>\n<li>Alle fordele ved versionering af kode<\/li>\n<li>Let at \u00e6ndre og vedligeholde<\/li>\n<li>Fuldst\u00e6ndig automatiseret<\/li>\n<\/ul>\n<p><\/p>\n<h2>Mind map diagrammer: udviklingen af infrastruktur<\/h2>\n<p>\nstep1: Lokal<br \/>\n<img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/507908ba097a603adc3b301ab2f94a8d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>step2: VCS<br \/>\n<img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/71c5170293d98375d8ab86d05eb47a33.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>step3: Containerisering\u00a0<br \/>\n<img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/da33442a592851e07c3f5800c3ee9ead.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>step4: CI\/CD\u00a0<br \/>\n<img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/900f18b45124412a1ad00d3901efb40e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>step5: Cloud-platforme<br \/>\n<img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/840e5063141ac8787612e2fc46b5d690.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>step6: Orkestrering<br \/>\n<img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/4651b552efdc893695cbf359c6992e9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>step7: IaC<br \/>\n<img decoding=\"async\" alt=\"DevOps v\u00e6rkt\u00f8jer er ikke kun for DevOps. Processen med at bygge automatisering af testinfrastruktur fra bunden\" src=\"\/wp-content\/uploads\/2020\/04\/e784130f570260fc6c3aa263916e3db5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Hvad nu?<\/h2>\n<p>\nS\u00e5, det er slutningen p\u00e5 artiklen. Men i konklusionen vil jeg gerne fastl\u00e6gge nogle aftaler med dig.<\/p>\n<p><u>Fra din side<\/u><br \/>\n Som n\u00e6vnt i starten, vil jeg gerne have, at artiklen er praktisk og hj\u00e6lper dig med at anvende de indsamlede viden i det virkelige arbejde. Jeg tilf\u00f8jer endnu en gang<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> linket til den praktiske vejledning<\/a><\/noindex>.<\/p>\n<p>Men selv efter dette, skal du ikke stoppe, \u00f8v dig, studer de relevante links og b\u00f8ger, find ud af, hvordan det fungerer i din virksomhed, find steder der kan forbedres, og deltag i dette. Held og lykke!<\/p>\n<p><u>Fra min side<\/u><\/p>\n<p>Fra overskriften kan du se, at dette kun var den f\u00f8rste del. Selvom den blev ret stor, er der stadig vigtige emner, der ikke er blevet d\u00e6kket. I den anden del planl\u00e6gger jeg at se p\u00e5 automatiseringsinfrastruktur i konteksten af iOS. P\u00e5 grund af Apples begr\u00e6nsninger for at k\u00f8re iOS-simulatorer kun p\u00e5 macOS-systemer er vores udvalg af l\u00f8sninger indskr\u00e6nket. For eksempel er vi forhindret i at bruge Docker til at k\u00f8re simulatoren eller offentlige cloud-tjenester til at k\u00f8re virtuelle maskiner. Men det betyder ikke, at der ikke er andre alternativer. Jeg vil fors\u00f8ge at holde dig opdateret med f\u00f8rende l\u00f8sninger og moderne v\u00e6rkt\u00f8jer!<\/p>\n<p>Jeg n\u00e6vnte heller ikke de tematikker, der vedr\u00f8rer overv\u00e5gning. I del 3 planl\u00e6gger jeg at se p\u00e5 de mest popul\u00e6re v\u00e6rkt\u00f8jer til overv\u00e5gning af infrastruktur samt hvilke data og m\u00e5linger, der b\u00f8r tages i betragtning.<\/p>\n<p>Og til sidst. I fremtiden planl\u00e6gger jeg at udgive en videokursus om opbygning af testinfrastruktur og popul\u00e6re v\u00e6rkt\u00f8jer. I \u00f8jeblikket er der rigtig mange kurser og forel\u00e6sninger om DevOps p\u00e5 internettet, men alt materiale pr\u00e6senteres i konteksten af udvikling, ikke testautomatisering. Jeg har meget brug for feedback p\u00e5, om et s\u00e5dant kursus vil v\u00e6re interessant og v\u00e6rdifuldt for test- og automatiseringssamfundet. P\u00e5 forh\u00e5nd tak!<\/h3>\n<\/h3>\n<p>Kilde: <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.3 - 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\/da\/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.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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 v\u00e6rkt\u00f8jer ikke kun til DevOps. Bygger infrastrukturen til testautomatisering fra bunden | ProHoster","description":"Del 1: Web \/ Android Note: denne artikel er en overs\u00e6ttelse til dansk af den originale artikel","canonical_url":"https:\/\/prohoster.info\/da\/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":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/78676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=78676"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/78676\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/78677"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=78676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=78676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=78676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}