{"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\/sl\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","title":{"rendered":"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Del 1: Web \/ Android<\/h1>\n<p>\n <u>Napomena<\/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. Bygga testautomatiseringsinfrastruktur fr\u00e5n grunden\u00bb.<\/i><\/a><\/noindex><i> Men alla illustrationer, l\u00e4nkar, citat och termer har bevarats p\u00e5 originalspr\u00e5ket f\u00f6r att undvika f\u00f6rvr\u00e4ngning av betydelsen vid \u00f6vers\u00e4ttningen till ryska. Jag \u00f6nskar dig trevlig l\u00e4sning!<\/i><\/p>\n<p><img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" 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 yrket DevOps ett av de mest efterfr\u00e5gade inom IT-branschen. Om du \u00f6ppnar popul\u00e4ra jobbsajter och s\u00e4tter filter f\u00f6r l\u00f6ner s\u00e5 kommer du se att jobbannonser relaterade till DevOps ligger i b\u00f6rjan av listan. Men det \u00e4r viktigt att f\u00f6rst\u00e5 att detta fr\u00e4mst g\u00e4ller positionen 'Senior', vilket inneb\u00e4r att kandidaten har en h\u00f6g kompetensniv\u00e5 och kunskap om teknologier och verktyg. D\u00e4rtill f\u00f6ljer en h\u00f6g grad av ansvar kopplad till den oavbrutna drift som finns i produktionen. Men vi har kommit ih\u00e5g vad DevOps verkligen \u00e4r. Ursprungligen var det inte en specifik person eller avdelning. Om vi s\u00f6ker efter definitioner av denna term kommer vi att hitta m\u00e5nga vackra och korrekta substantiv, som metodologi, praxis, kulturell filosofi, konceptgrupp och s\u00e5 vidare.<\/p>\n<p>Min specialitet \u00e4r testautomationsingenj\u00f6r (QA automation engineer), men jag anser att den inte bara b\u00f6r kopplas till att skriva automatiska tester eller utveckla arkitekturen f\u00f6r testframework. \u00c5r 2020 \u00e4r kunskap om automatiseringsinfrastruktur ocks\u00e5 n\u00f6dv\u00e4ndig. Det g\u00f6r att man kan organisera automatiseringsprocessen sj\u00e4lvst\u00e4ndigt, fr\u00e5n att k\u00f6ra tester till att presentera resultaten f\u00f6r alla intressenter i enlighet med de uppst\u00e4llda m\u00e5len. D\u00e4rmed \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 f\u00f6rs\u00f6ker f\u00f6renkla detta problem<\/i>). Det handlar om att DevOps \u00e4r sv\u00e5rt. Och det \u00e4r uppenbart, eftersom f\u00f6retag inte kommer att betala mycket f\u00f6r n\u00e5got som \u00e4r l\u00e4tt att g\u00f6ra... I DevOps-v\u00e4rlden finns det ett stort antal verktyg, termer och praxis att bem\u00e4stra. S\u00e4rskilt \u00e4r det sv\u00e5rt i b\u00f6rjan av karri\u00e4ren och beror p\u00e5 den tekniska erfarenhet man har samlat.<\/p>\n<p><img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/20712bd4acf881d5346b87f5a2b359d2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIzvor: <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 ska vi nog avsluta den inledande delen och fokusera p\u00e5 syftet med denna artikel.\u00a0<\/p>\n<h3>Vad handlar denna artikel om<\/h3>\n<p>\nV tem \u010dlanku \u017eelim deliti svoje izku\u0161nje pri gradnji infrastrukture za avtomatizacijo testiranja. Na spletu lahko najdete \u0161tevilne vire informacij o razli\u010dnih orodjih in njihovi uporabi, a rad bi jih razpravljal izklju\u010dno v kontekstu avtomatizacije. Verjamem, da so \u0161tevilnim in\u017eenirjem za avtomatizacijo znane situacije, ko testov, ki ste jih razvili, nih\u010de razen vas ne izvaja in ne skrbi za njihovo vzdr\u017eevanje. Posledi\u010dno testi postanejo zastareli, kar zahteva porabo \u010dasa za njihovo posodabljanje. Spet, na za\u010detku kariere je to lahko precej zahtevna naloga: pravilno dolo\u010diti, katera orodja bi morala pomo\u010d pri re\u0161evanju tega problema, kako jih izbrati, nastaviti in vzdr\u017eevati. Nekateri testerji se obra\u010dajo na DevOps in, bodimo iskreni, ta pristop deluje. V mnogih primerih je to lahko edina mo\u017enost, saj nimamo vpogleda v vse odvisnosti. A, kot vemo, so DevOps zelo zaposleni ljudje, saj morajo razmi\u0161ljati o infrastrukturi cele podjetja, uvajanju, spremljanju, mikrostoritvah in drugih podobnih nalogah, odvisno od organizacije\/tima. Kot obi\u010dajno, avtomatizacija ni prioriteta. V tem primeru moramo poskusiti narediti vse, kar je v na\u0161i mo\u010di od za\u010detka do konca. To bo zmanj\u0161alo odvisnosti, pospe\u0161ilo delovni proces, izbolj\u0161alo na\u0161e sposobnosti in omogo\u010dilo \u0161ir\u0161i vpogled v dogajanje.<\/p>\n<p>V \u010dlanku so predstavljena najbolj iskana in priljubljena orodja ter prikazano, kako jih uporabiti za postopno gradnjo infrastrukture za avtomatizacijo. Vsaka skupina je predstavljena z orodji, ki so bila preizku\u0161ena na osebni izku\u0161nji. A to ne pomeni, da morate uporabiti enaka. Sama orodja niso pomembna, pojavijo se in zastarijo. Na\u0161a in\u017eenirska naloga je razumevanje osnovnih na\u010del: zakaj potrebujemo to skupino orodij in katere delovne naloge lahko z njihovo pomo\u010djo re\u0161imo. Zato na koncu vsake sekcije pustim povezave do podobnih orodij, ki se morda uporabljajo v va\u0161i organizaciji.<\/p>\n<h3>\u010cesar v tem \u010dlanku ni<\/h3>\n<p>\nPonovno nagla\u0161avam da \u010dlanak nije o konkretnim alatima, stoga ovde ne\u0107e biti isje\u010daka koda iz dokumentacije niti opisivanja konkretnih komandi. Na kraju svake sekcije ostavljam linkove za detaljnije prou\u010davanje.<\/p>\n<p>To je u\u010dinjeno iz razloga \u0161to:\u00a0<\/p>\n<ul>\n<li>ovaj materijal je vrlo lako prona\u0107i u razli\u010ditim izvorima (dokumentacija, knjige, video kursevi);<\/li>\n<li>ako se po\u010dnemo produbljivati, mora\u0107emo napisati 10, 20 ili 30 delova ovog \u010dlanka (dok su u planu 2-3);<\/li>\n<li>jednostavno ne \u017eelim tro\u0161iti va\u0161e vreme, jer mo\u017eda \u017eelite koristiti druge alate za postizanje istih ciljeva.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Praktika<\/h3>\n<p>\nVrlo bih \u017eeleo da ovaj materijal bude koristan za svakog \u010ditatelja, a ne samo da bude pro\u010ditano i zaboravljeno. U svakom u\u010denju praksa je veoma va\u017ean sastojak. Zbog toga sam pripremio<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> GitHub repozitorijum s korak-po-korak vodi\u010dem kako sve uraditi od nule<\/a><\/noindex>. Tako\u0111e vas o\u010dekuje doma\u0107i zadatak, kako biste bili sigurni da niste bezmisleno kopirali linije izvr\u0161avanih komandi <\/p>\n<h3>Na\u010drt<\/h3>\n<p><\/p>\n<p><strong>Korak<\/strong><br \/>\n<strong>Tehnologija<\/strong><br \/>\n<strong>Instrumenti<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nLokalan rad (priprema web \/ android demo testova i pokretanje lokalno)\u00a0<br \/>\nNode.js, Selenium, Appium<\/p>\n<p><strong>2<\/strong><br \/>\nSistemi za kontrolu verzija\u00a0<br \/>\nGit<\/p>\n<p><strong>3<\/strong><br \/>\nKontejnerizacija<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 \/>\nOrkestracija<br \/>\nKubernetes<\/p>\n<p><strong>7<\/strong><br \/>\nInfrastruktura kao kod (IaC)<br \/>\nTerraform, Ansible<\/p>\n<p><\/p>\n<h3>Struktura svake sekcije<\/h3>\n<p>\nRadi odr\u017eavanja narativa na jasan na\u010din, svaka sekcija je opisana po slede\u0107em planu:<\/p>\n<ul>\n<li>kratak opis tehnologije,<\/li>\n<li>vrednost za infrastrukturnu automatizaciju,<\/li>\n<li>ilustracija trenutnog stanja infrastrukture,<\/li>\n<li>linkovi za prou\u010davanje,<\/li>\n<li>sli\u010dni alati.<\/li>\n<\/ul>\n<p><\/p>\n<h2>1. Lokalan rad testova<\/h2>\n<p><\/p>\n<h3>Kratak opis tehnologije<\/h3>\n<p>\nTo je samo pripremni korak za pokretanje demo testova lokalno i provere da li oni uspe\u0161no prolaze. U prakti\u010dnom delu koristi se Node.js, ali programski jezik i platforma tako\u0111e nisu va\u017eni, i mogu se koristiti oni \u0161to se koriste u va\u0161oj kompaniji.\u00a0<\/p>\n<p>Ipak, kao alate za automatizaciju preporu\u010dujem kori\u0161\u0107enje Selenium WebDriver-a za web platforme i Appium-a za Android platformu, jer \u0107emo u slede\u0107im koracima koristiti Docker slike koje su specijalizovane za rad ta\u010dno s ovim alatima. \u0160tavi\u0161e, oslanjaju\u0107i se na zahteve u oglasima za posao, ovi alati su najtra\u017eeniji na tr\u017ei\u0161tu.<\/p>\n<p>Kot ste lahko opazili, se osredoto\u010damo le na spletne in Android teste. Na \u017ealost je IOS povsem druga zgodba (hvala Apple). Na\u010drtujem, da bom predstavil re\u0161itve in prakse, povezane z IOS, v naslednjih delih.<\/p>\n<h3>Vrednost za infrastrukturo avtomatizacije<\/h3>\n<p>\nZ vidika infrastrukture lokalno izvajanje ne prina\u0161a nobene vrednosti. Preverjate le, ali testi delujejo na lokalnem ra\u010dunalniku v lokalnih brskalnikih in simulatorjih. V katerem koli primeru pa je to nujna izhodi\u0161\u010dna to\u010dka.<\/p>\n<h3>Ilustracija trenutnega stanja infrastrukture<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/504f28744e29938f66be41c32d9a7dc6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Povezave za nadaljnje raziskovanje<\/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 primeri na GitHubu<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/appium\/appium\/tree\/master\/sample-code\/javascript-wd\">Appium JS primeri na GitHubu<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Podobna orodja<\/h3>\n<p><\/p>\n<ul>\n<li>katerikoli programski jezik, ki vam je v\u0161e\u010d, v povezavi s Selenium\/Appium testi;<\/li>\n<li>katerikoli testi;<\/li>\n<li>katerikoli testni zagon.<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Sistemi za nadzor razli\u010dic (Git)<\/h2>\n<p><\/p>\n<h3>Kratak opis tehnologije<\/h3>\n<p>\n Za nikogar ne bo veliko odkritje, \u010de re\u010dem, da je sistem za nadzor razli\u010dic izjemno pomemben del tako timskega kot individualnega razvoja. Na podlagi razli\u010dnih virov lahko samozavestno trdim, da je Git najbolj priljubljen predstavnik. Sistem nadzora razli\u010dic prina\u0161a \u0161tevilne prednosti, kot so deljenje kode, shranjevanje razli\u010dic, obnavljanje prej\u0161njih veji, sledenje zgodovini projekta in varnostne kopije. Ne bomo razpravljali o vsakem od teh to\u010dk podrobno, saj sem prepri\u010dan, da ste z njimi dobro seznanjeni in jih uporabljate v svojem vsakodnevnem delu. Ampak \u010de slu\u010dajno niste, priporo\u010dam, da takoj prekinete z branjem tega \u010dlanka in to vrzel \u010dim prej zapolnite.<\/p>\n<h3>Vrednost za infrastrukturo avtomatizacije<\/h3>\n<p>\n In tukaj se lahko zastavi smiselno vpra\u0161anje: \"Zakaj nam govori o Gitu? Vsi to poznajo in uporabljajo tako za razvoj kode kot za kode avto-testov.\" Imate prav, toda v tem \u010dlanku govorimo o infrastrukturi, ta odsek pa igra vlogo uvoda za odsek 7: \"Infrastruktura kot koda (IaC)\". To za nas pomeni, da je vsa infrastruktura, vklju\u010dno z testno, opisna v obliki kode, zato lahko nanjo apliciramo sisteme za nadzor razli\u010dic in pridobimo podobne prednosti kot za razvoj in avtomatizacijo kod.<\/p>\n<p>Podrobneje se bomo posvetili IaC v koraku 7, vendar lahko \u017ee sedaj za\u010dnete uporabljati Git lokalno, tako da ustvarite lokalno repozitorij. Splo\u0161na slika se bo raz\u0161irila, ko bomo infrastrukturnemu delu dodali oddaljeni repozitorij.<\/p>\n<h3>Ilustracija trenutnega stanja infrastrukture<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/f17c1d2b2f18aa814c44f7c443e49416.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Povezave za nadaljnje raziskovanje<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.atlassian.com\/git\/tutorials\/what-is-version-control\">Kaj je nadzor razli\u010dic<\/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\">Prvi koraki \u2014 O nadzoru razli\u010dic<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Podobna orodja<\/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 (zdaj del Azure DevOps Services)<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2>3. Kontejnorizacija (Docker)<\/h2>\n<p><\/p>\n<h3>Kratak opis tehnologije<\/h3>\n<p>\n Za prikaz, kako je kontejnorizacija spremenila pravila igre, se vrnimo nekaj desetletij v preteklost. Takrat so ljudje kupovali in uporabljali stre\u017eni\u0161ke naprave za zagon aplikacij. Vendar pa so bili v ve\u010dini primerov potrebni viri za zagon neznani vnaprej. Posledi\u010dno so podjetja zapravljala denar za nakup dragih zmogljivih stre\u017enikov, vendar del te mo\u010di ni bila popolnoma izkori\u0161\u010dena.<\/p>\n<p>Naslednji korak v evoluciji so postale virtualne naprave (VM), ki so re\u0161ile problem stro\u0161kov neizkori\u0161\u010denih virov. Ta tehnologija je omogo\u010dila zagon aplikacij neodvisno ena od druge znotraj enega stre\u017enika, pri \u010demer se je ustvarilo popolnoma izolirano okolje. Vendar pa, \u017eal, nobena tehnologija ni brez pomanjkljivosti. Zagon VM zahteva celotno operacijsko sistem, ki porabi CPU, RAM, shranjevanje in, odvisno od OS, je potrebno upo\u0161tevati stro\u0161ke licenciranja. Ti dejavniki vplivajo na hitrost nalaganja in ote\u017eujejo prenosljivost.<\/p>\n<p>In tukaj smo pri kontejnerizaciji. In spet je ta tehnologija re\u0161ila prej\u0161nji problem, saj kontejnerji ne uporabljajo celotnega operacijskega sistema, kar omogo\u010da sprostitev velike koli\u010dine virov ter ponuja hitro in prilagodljivo re\u0161itev za prenosljivost.<\/p>\n<p>Seveda, tehnologija kontejnerizacije ni nova in je bila prvi\u010d predstavljena konec 70. let. Tedaj je bilo narejenih veliko raziskav, zasnov in poskusov. Vendar je prav Docker prilagodil to tehnologijo in jo naredil dostopno mno\u017eicam. Danes, ko govorimo o kontejnerjih, v ve\u010dini primerov mislimo na Docker. Ko govorimo o Docker kontejnerjih, imamo v mislih Linux kontejnerje. Uporabimo lahko sisteme Windows in macOS za zagon kontejnerjev, vendar je pomembno razumeti, da v tem primeru pride do dodatne plasti. Na primer, Docker na Macu neopazno za\u017eene kontejnerje znotraj lahkega Linux VM. \u0160e vrnemo se k tej temi, ko bomo razpravljali o zagonu Android emulatorjev znotraj kontejnerjev, kjer se pojavi zelo pomembna podrobnost, ki jo je treba podrobneje obdelati.<\/p>\n<h3>Vrednost za infrastrukturo avtomatizacije<\/h3>\n<p>\n Ugotovili smo, da sta kontejnerizacija in Docker super. Poglejmo to v kontekstu avtomatizacije, saj mora vsak instrument ali tehnologija re\u0161iti kak\u0161no te\u017eavo. Oznanimo o\u010ditne te\u017eave avtomatizacije testiranja v kontekstu UI testov:<\/p>\n<ul>\n<li>ogromno \u0161tevilo odvisnosti pri namestitvi Selenium in zlasti Appium;<\/li>\n<li>te\u017eave s zdru\u017eljivostjo med razli\u010dicami brskalnikov, simulatorjev in gonilnikov;<\/li>\n<li>pomanjkanje izoliranega prostora za brskalnike\/simulatorje, kar je \u0161e posebej kriti\u010dno za paralelni zagon;<\/li>\n<li>te\u017eko je upravljati in vzdr\u017eevati, \u010de je treba hkrati zagnati 10, 50, 100 ali celo 1000 brskalnikov.<\/li>\n<\/ul>\n<p>\nToda ker je Selenium najbolj priljubljeno orodje za avtomatizacijo, Docker pa je najbolj priljubljeno orodje za kontejnerizacijo, ne bi smelo biti presene\u010denje, da je nekdo posku\u0161al zdru\u017eiti oboje in tako dobiti mo\u010dno orodje za re\u0161evanje zgoraj omenjenih te\u017eav. Poglejmo ta re\u0161itev podrobneje.\u00a0<\/p>\n<p><u>Selenium grid v dockerju<\/u><\/p>\n<p>To orodje je najbolj priljubljeno na svetu za zagon ve\u010d brskalnikov na ve\u010d napravah in njihovo upravljanje iz sredi\u0161\u010da. Za zagon je potrebno registrirati vsaj 2 dela: Hub in Node(e). Hub je osrednje vozli\u0161\u010de, ki prejema vse zahteve testov in jih porazdeli med ustrezne Nodes. Za vsak Node lahko nastavite posebno konfiguracijo, na primer, dolo\u010dite \u017eeleni brskalnik in njegovo razli\u010dico. Vendar pa moramo \u0161e vedno sami poskrbeti za zdru\u017eljive gonilnike za brskalnike in jih namestiti na ustrezne Nodes. Iz tega razloga se Selenium grid ne uporablja v \u010disti obliki, razen v primerih, ko moramo delati z brskalniki, ki jih ni mogo\u010de namestiti na sistem Linux. V vseh drugih primerih je znatno fleksibilnej\u0161a in pravilnej\u0161a re\u0161itev uporaba Docker slik za zagon Selenium grid Hub in Nodes. Tak\u0161en pristop mo\u010dno poenostavi upravljanje vozli\u0161\u010d, saj lahko izberemo \u017eeleno sliko z \u017ee name\u0161\u010denimi zdru\u017eljivimi razli\u010dicami brskalnikov in gonilnikov.<\/p>\n<p>Kljub negativnim mnenjem o stabilnosti delovanja, zlasti pri so\u010dasnem zagonu velikega \u0161tevila Nodes, Selenium grid \u0161e vedno ostaja najbolj priljubljeno orodje za so\u010dasno izvajanje Selenium testov. Pomembno je poudariti, da se v open-source vedno pojavljajo razli\u010dne nadgradnje in modifikacije tega orodja, ki se borijo proti razli\u010dnim to\u010dkam zastoja.<\/p>\n<p><u>Selenoid za splet<\/u><\/p>\n<p>To orodje je preobrat v svetu Selenium, saj deluje takoj iz \u0161katle in je veliko olaj\u0161alo \u017eivljenje mnogim in\u017eenirjem avtomatizacije. Predvsem to ni le \u0161e ena modifikacija Selenium grid. Namesto tega so razvijalci ustvarili povsem novo razli\u010dico Selenium Hub v jeziku Golang, kar v kombinaciji z lahkimi Docker slikami za razli\u010dne brskalnike pomeni velik korak naprej v avtomatizaciji testiranja. Poleg tega moramo pri Selenium Gridu vnaprej dolo\u010diti vse potrebne brskalnike in njihove razli\u010dice, kar ni te\u017eava, ko delamo samo z enim brskalnikom. Ampak ko govorimo o ve\u010d podprtih brskalnikih, je Selenoid re\u0161itev \u0161tevilka ena, zahvaljujo\u010d funkciji 'brskalnik na zahtevo'. Vse, kar potrebujemo, je, da vnaprej nalo\u017eimo potrebne slike brskalnikov in posodobimo konfiguracijsko datoteko, s katero Selenoid sodeluje. Ko Selenoid prejme zahtevo iz testov, samodejno za\u017eene potreben kontejner s pravim brskalnikom. Ko se test kon\u010da, Selenoid ustavi kontejner in s tem sprosti vire za naslednje zahteve. Tak\u0161en pristop popolnoma odpravi znan problem 'degradacije vozli\u0161\u010d', s katerim se pogosto sre\u010dujemo v Selenium grid.<\/p>\n<p>A vendar, Selenoid \u0161e vedno ni \u010darobna pu\u0161ka. Dobili smo funkcijo 'brskalnik na zahtevo', vendar funkcija 'viri na zahtevo' \u0161e vedno ni na voljo. Za uporabo Selenoid ga moramo postaviti na fizi\u010dno strojno opremo ali na VM, kar pomeni, da moramo vnaprej vedeti, koliko virov je potrebno dodeliti. Menim, da to ni te\u017eava za majhne projekte, ki hkrati izvajajo 10, 20 ali celo 30 brskalnikov. Kaj pa, \u010de potrebujemo 100, 500, 1000 in ve\u010d? Ni smisla vzdr\u017eevati in pla\u010devati za tako veliko \u0161tevilo virov nenehno. V razdelku 5 in 6 tega \u010dlanka bomo razpravljali o re\u0161itvah, ki omogo\u010dajo skaliranje, s \u010dimer znatno zmanj\u0161ujejo stro\u0161ke podjetja.<\/p>\n<p><u>Selenoid za Android<\/u><\/p>\n<p>Po uspehu Selenoid kot orodja za spletno avtomatizacijo so ljudje \u017eeleli nekaj podobnega za Android. In to se je uresni\u010dilo \u2013 Selenoid je bil izdan s podporo za Android. Z vidika uporabnika je na\u010delo delovanja podobno spletnemu avtomatiziranju. Edina razlika je v tem, da Selenoid namesto vsebniki z brskalniki za\u017eene vsebnike z Android emulatorji. Po mojem mnenju je to trenutno najmo\u010dnej\u0161e brezpla\u010dno orodje za izvajanje Android testov hkrati.<\/p>\n<p>Zelo nebi \u017eelel govoriti o negativnih straneh tega orodja, ker mi je res zelo v\u0161e\u010d. Kljub temu pa obstajajo isti slabosti, ki se nana\u0161ajo na spletno avtomatizacijo, povezane z raz\u0161irljivostjo. Poleg tega moram omeniti \u0161e eno omejitev, ki lahko postane presene\u010denje, \u010de orodje nastavljamo prvi\u010d. Za zagon Android slik potrebujemo fizi\u010dno napravo ali VM s podporo za gnezditveno virtualizacijo. V prakti\u010dnem vodi\u010du bom pokazal, kako to aktivirati na Linux VM. Vendar, \u010de ste uporabnik macOS in \u017eelite lokalno namestiti Selenoid, to ne bo mogo\u010de za zagon Android testov. Vendar lahko vedno zagnate Linux VM lokalno s konfigurirano 'gnezditveno virtualizacijo' in znotraj namestite Selenoid.<\/p>\n<h3>Ilustracija trenutnega stanja infrastrukture<\/h3>\n<p>\n V kontekstu tega \u010dlanka bova dodala 2 orodja za ilustracijo infrastrukture. To sta Selenium grid za spletne teste in Selenoid za Android teste. V vodi\u010du na GitHubu bom tudi pokazal, kako uporabiti Selenoid za zagon spletnih testov.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/1202ae79eba9cffc965f3a5b2648c755.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Povezave za nadaljnje raziskovanje<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/resources\/what-container\">Docker: kaj je vsebnik<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/get-started\">Docker: za\u010dnite<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/containerjournal.com\/topics\/container-ecosystems\/5-container-alternatives-to-docker\/\">5 alternativ vsebnikom 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 nastavitev za Android emulatorje<\/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\">Knjiga Docker Deep Dive<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Podobna orodja<\/h3>\n<p><\/p>\n<ul>\n<li>Obstajajo tudi druga orodja za kontejnerizacijo, a Docker je najbolj priljubljen. \u010ce \u017eelite poskusiti nekaj drugega, upo\u0161tevajte, da orodja, ki smo jih preu\u010dili za paralelno izvajanje Selenium testov, ne bodo delovala takoj.\u00a0\u00a0<\/li>\n<li>Kot je bilo \u017ee omenjeno, obstaja veliko razli\u010dic Selenium grid, na primer,<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>Kratak opis tehnologije<\/h3>\n<p>\n Praksa neprekinjene integracije je precej priljubljena v razvoju in je na enem nivoju s sistemi za nadzor razli\u010dic. Kljub temu imam ob\u010dutek, da obstaja zmeda glede terminologije. V tem odstavku bi rad opisal tri modifikacije te tehnologije z mojega vidika. Na internetu boste na\u0161li veliko \u010dlankov z razli\u010dnimi interpretacijami, in to je povsem v redu, \u010de se va\u0161e mnenje razlikuje. Najpomembneje je, da ste na isti valovni dol\u017eini kot va\u0161i kolegi.<\/p>\n<p>Torej obstajajo trije izrazi: CI \u2014 Continuous Integration (neprekinjena integracija), CD \u2014 Continuous Delivery (neprekinjena dobava) in ponovno CD \u2014 Continuous Deployment (neprekinjeno izvajanje). (<i>Nato bom te izraze uporabljal v angle\u0161\u010dini<\/i>). Vsaka modifikacija doda nekaj dodatnih korakov va\u0161emu razvojnemu cevovodu. A beseda <u>continuous<\/u> (\u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0430\u044f) \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u0433\u043b\u0430\u0432\u043d\u044b\u043c. \u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043c\u044b \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u043c \u0447\u0442\u043e-\u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430, \u0431\u0435\u0437 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0438\u043b\u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 CI &#038; CD \u0438 CD \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435.<\/p>\n<ul>\n<li><strong>Continuous Integration \u2013<\/strong> je za\u010detni korak evolucije. Po po\u0161iljanju nove kode na stre\u017enik pri\u010dakujemo hitro povratno informacijo, da so z na\u0161imi spremembami vse v redu. Obi\u010dajno CI vklju\u010duje zagon orodij za stati\u010dno analizo kode in enotni\/testi notranjega API-ja. To nam omogo\u010da, da informacije o na\u0161i kodi dobimo \u017ee \u010dez nekaj sekund\/minut.<\/li>\n<li><strong>Kontinuirana isporuka<\/strong> je bolj napreden korak, kjer zagnamo integracijske\/UI-teste. Vendar v tej fazi rezultatov ne dobimo tako hitro kot pri CI. Prvi\u010d, ti tipi testov potrebujejo ve\u010d \u010dasa za izvedbo. Drugi\u010d, pred izvajanjem moramo razporediti na\u0161e spremembe v testno\/odrsko okolje. Poleg tega, \u010de govorimo o mobilnem razvoju, pride do dodatne faze za izdelavo gradnje na\u0161e aplikacije.<\/li>\n<li><strong>Continuous Deployment<\/strong> predpostavlja, da avtomatsko izda (release) na\u0161a spremembe na produkciji, \u010de so vsi sprejemni testi bili uspe\u0161no opravljeni v prej\u0161njih fazah. Poleg tega, po fazi izdaje lahko nastavite razli\u010dne faze, kot je zagon smoke testov na produkciji in zbiranje zanimivih metrik. Continuous Deployment je mogo\u010d le pri dobrem pokritju z avtomatiziranimi testi. \u010ce so potrebne ro\u010dne intervencije, vklju\u010dno s testiranjem, to ne pomeni ve\u010d. <u>Neprekinjeno<\/u> (neprekinjeno). Takrat lahko govorimo o tem, da je na\u0161 proces ustrezen le praksi Continuous Delivery.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Vrednost za infrastrukturo avtomatizacije<\/h3>\n<p>\n V tem razdelku moram pojasniti, da, ko govorimo o end-to-end UI testih, to pomeni, da moramo implementirati na\u0161e spremembe in povezane storitve na testnih okoljih. Continuous Integration \u2014 ta proces ni uporaben za to nalogo in moramo poskrbeti za uvedbo vsaj praks Continuous Delivery. Continuous Deployment ima prav tako smislu v kontekstu UI testov, \u010de jih nameravamo zagnati na produkciji.<\/p>\n<p>In preden pogledamo ilustracijo sprememb arhitekture, \u017eelim re\u010di nekaj besed o GitLab CI. Za razliko od drugih CI\/CD orodij, GitLab ponuja oddaljeni repozitorij in \u0161tevilne druge dodatne funkcije. Tako je GitLab ve\u010d kot CI. Vklju\u010duje upravljanje izvorne kode, Agile upravljanje, CI\/CD cevi, orodja za bele\u017eenje in zbiranje metrik. Arhitektura GitLab obsega GitLab CI\/CD in GitLab Runner. Navajam kratek opis iz uradne strani:<\/p>\n<blockquote><p>GitLab CI\/CD je spletna aplikacija z API-jem, ki shranjuje svoje stanje v bazi podatkov, upravlja projekte\/gradnje in nudi uporabni\u0161ki vmesnik. GitLab Runner je aplikacija, ki obdeluje gradnje. Lahko se namesti lo\u010deno in deluje z GitLab CI\/CD preko API-ja. Za izvajanje testov potrebujete tako GitLab instanco kot Runner.<\/p><\/blockquote>\n<p><\/p>\n<h3>Ilustracija trenutnega stanja infrastrukture<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/a05ece39b6c6a9aaec4177d4b5242722.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Povezave za nadaljnje raziskovanje<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/articles\/continuousIntegration.html\">Martin Fowler: Neprekinjena Integracija<\/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\">Knjiga o Neprekinjeni Integraciji<\/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=\">Knjiga o Neprekinjeni Dostavi<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Podobna orodja<\/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>In mnogi drugi<\/li>\n<\/ul>\n<p><\/p>\n<h2>5. Oblak platforme<\/h2>\n<p><\/p>\n<h3>Kratak opis tehnologije<\/h3>\n<p>\n V tem razdelu se bomo pogovarjali o priljubljenem trendu, imenovanem 'javna oblaka'. Kljub ogromnim prednostim, ki jih prina\u0161ajo zgoraj opisane tehnologije virtualizacije in kontejnerizacije, \u0161e vedno potrebujemo ra\u010dunalni\u0161ke vire. Podjetja kupujejo drage stre\u017enike ali najemajo podatkovne centre, vendar je v tem primeru potrebno izvesti izra\u010dune (v\u010dasih nerealne) koliko virov bomo potrebovali, ali jih bomo uporabljali 24\/7 in za kak\u0161ne namene. Na primer, za produkcijo potrebujemo stre\u017enik, ki deluje neprekinjeno, vendar potrebujemo podobne vire za testiranje v neproduktivnem \u010dasu? To je odvisno tudi od vrste testiranja, ki ga izvajamo. Primer so obremenitveni\/stresni testi, ki jih na\u010drtujemo izvajati v neproduktivnem \u010dasu, da bi dobili rezultate naslednji dan. Vsekakor pa ne potrebujemo 24-urne dostopnosti stre\u017enikov za avtomatizirane teste od konca do konca, \u0161e posebej ne za ro\u010dna testiranja. Za tak\u0161ne situacije bi bilo dobro prejemati toliko virov, kolikor jih potrebujemo na zahtevo, jih uporabiti in prenehati pla\u010devati, ko jih ne rabimo ve\u010d. \u0160e bolje bi bilo, \u010de bi jih lahko pridobili takoj, s samo nekaj kliki mi\u0161ke ali z zagonom nekaj skript. Za to se uporabljajo javna oblaka. Poglejmo definicijo:<\/p>\n<blockquote><p>\"Javna oblaka so definirana kot ra\u010dunalni\u0161ke storitve, ki jih ponujajo tretji ponudniki prek javnega interneta, kar jih naredi dostopne vsakomur, ki jih \u017eeli uporabljati ali kupiti. Lahko so brezpla\u010dne ali prodane po povpra\u0161evanju, kar omogo\u010da strankam, da pla\u010dajo le za uporabo, glede na procesorska cikla, shranjevanje ali pasovno \u0161irino, ki jo porabijo.\"<\/p><\/blockquote>\n<p>\n Obstaja prepri\u010danje, da so javna oblaka draga. Vendar pa je njihova klju\u010dna ideja zmanj\u0161anje stro\u0161kov podjetja. Kot smo \u017ee omenili, javna oblaka omogo\u010dajo pridobitev virov po povpra\u0161evanju in pla\u010dilo le za \u010das njihove uporabe. Prav tako v\u010dasih pozabimo, da zaposleni prejemajo pla\u010de, \u0161tevilni strokovnjaki pa so prav tako dragoceni viri. Treba je upo\u0161tevati, da javna oblaka znatno olaj\u0161ajo podporo infrastrukturi, kar in\u017eenirjem omogo\u010da, da se osredoto\u010dijo na pomembnej\u0161e naloge.\u00a0<\/p>\n<h3>Vrednost za infrastrukturo avtomatizacije<\/h3>\n<p>\n Katere natan\u010dne vire potrebujemo za end-to-end UI teste? V glavnem so to virtualni stroji ali grozdi (o Kubernetesu bomo govorili v naslednjem razdelku), ki se uporabljajo za zagon brskalnikov in emulatorjev. Ve\u010d brskalnikov in emulatorjev \u017eelimo zagnati hkrati, ve\u010d CPU in pomnilnika potrebujemo in toliko ve\u010d denarja bomo morali za to pla\u010dati. Javno obla\u010dilo v kontekstu avtomatizacije testiranja nam tako omogo\u010da zagon velikega \u0161tevila (100, 200, 1000 ...) brskalnikov\/emulatorjev na zahtevo, pridobitev rezultatov testiranja \u010dim hitreje in prenehanje pla\u010devanja za tak\u0161ne obupne vire.\u00a0<\/p>\n<p>Najbolj priljubljeni obla\u010dni ponudniki so Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP). V prakti\u010dnem priro\u010dniku so predstavljeni primeri uporabe GCP, vendar na splo\u0161no ni pomembno, kaj natan\u010dno boste uporabili za avtomatizacijske naloge. Vsi ponujajo pribli\u017eno enake funkcionalnosti. Obi\u010dajno priro\u010dnik za izbiro ponudnika osredoto\u010da na celotno infrastrukturo podjetja in poslovne zahteve, kar je zunaj okvira tega \u010dlanka. In\u017eenirje avtomatizacije bo bolj zanimalo primerjati uporabo obla\u010dnih ponudnikov s platformami v oblaku, specifi\u010dnimi za testiranje, kot so Sauce Labs, BrowserStack, BitBar in tako naprej. Torej, poglejmo to! Po mojem mnenju je Sauce Labs najbolj znana platforma za obla\u010dno testiranje, zato sem jo izbral za primerjavo.\u00a0<\/p>\n<p><u>GCP proti Sauce Labs za avtomatizacijske namene:<\/u><\/p>\n<p>Predstavljajmo si, da moramo hkrati izvesti 8 spletnih testov in 8 Android testov. V ta namen bomo uporabili GCP in zagnali 2 virtualni napravi s Selenoid. Na prvi bomo zagnali 8 kontejnerjev z brskalniki. Na drugi \u2013 8 kontejnerjev z emulatorji. Poglejmo si cene:\u00a0\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/e4688fd2e6e5593d2e1c22fc57f59484.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Za zagon enega kontejnerja s Chromeom potrebujemo <strong>n1-standard-1 <\/strong>napravo. V primeru Androida pa bo to <strong>n1-standard-4 <\/strong>za enega emulatorja. V resnici je bolj fleksibilen in cenej\u0161i na\u010din, da dolo\u010dite specifi\u010dne uporabni\u0161ke vrednosti za CPU\/pomnilnik, vendar trenutno to ni bistveno za primerjavo s Sauce Labs.<\/p>\n<p>Tukaj so tarife za uporabo Sauce Labs:<\/p>\n<p><img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/1367d2b59bbef9603b4b4be166e8d721.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDomnevam, da ste \u017ee opazili razliko, vendar vseeno prina\u0161am tabelo z izra\u010duni za na\u0161e naloge:<\/p>\n<p><strong>Zahtevani viri<\/strong><br \/>\n<strong>Mese\u010dno<\/strong><br \/>\n<strong>Delovne ure<\/strong><strong>(8.00 - 20.00)<\/strong><br \/>\n<strong>Delovne ure<\/strong><strong>+ Preemptible<\/strong><\/p>\n<p><strong>GCP za splet<\/strong><br \/>\nn1-standard-1 x 8 = n1-standard-8<br \/>\n$194.18<br \/>\n23 \u0434\u043d\u0438 * 12\u0447 * 0.38 = 104.88$\u00a0<br \/>\n23 \u0434\u043d\u0438 * 12\u0447 * 0.08 = 22.08$<\/p>\n<p><strong>Sauce Labs \u0437\u0430 \u0432\u0435\u0431<\/strong><br \/>\n\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 Cloud8 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b<br \/>\n$1.559<br \/>\n\u2014<br \/>\n\u2014<\/p>\n<p><strong>GCP \u0437\u0430 Android<\/strong><br \/>\nn1-standard-4 x 8: n1-standard-16<br \/>\n$776.72<br \/>\n23 \u0434\u043d\u0438 * 12\u0447 * 1.52 = 419.52$\u00a0<br \/>\n23 \u0434\u043d\u0438 * 12\u0447 * 0.32 = 88.32$<\/p>\n<p><strong>Sauce Labs \u0437\u0430 Android<\/strong><br \/>\n\u041e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 8 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432<br \/>\n$1.999<br \/>\n\u2014<br \/>\n\u2014<\/p>\n<p>\n\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0433\u0440\u043e\u043c\u043d\u0430, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0434\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u0438\u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a. \u041d\u043e \u043c\u043e\u0436\u043d\u043e \u0435\u0449\u0435 \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0434\u044b, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c preemptible \u043c\u0430\u0448\u0438\u043d\u044b. \u0427\u0442\u043e \u0436\u0435 \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435?<\/p>\n<blockquote><p>Preemptible VM \u2013 \u044d\u0442\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u043e\u0439 \u0446\u0435\u043d\u0435, \u0447\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b. \u041e\u0434\u043d\u0430\u043a\u043e Compute Engine \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c (preempt) \u044d\u0442\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b, \u0435\u0441\u043b\u0438 \u0435\u043c\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u0442\u0438\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u0430\u0434\u0430\u0447. Preemptible \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u2013 \u044d\u0442\u043e \u0438\u0437\u0431\u044b\u0442\u043e\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 Compute Engine, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0432\u0430\u0440\u044c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 \u0441\u0442\u043e\u0439\u043a\u043e\u0441\u0442\u044c\u044e \u043a \u0441\u0431\u043e\u044f\u043c \u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432, \u0442\u043e preemptible \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0432\u0430\u0448\u0438 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 Compute Engine. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0430 preemptible \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u0445. \u0415\u0441\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u044d\u0442\u0438\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0440\u0430\u0431\u043e\u0442\u0430 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442\u0441\u044f, \u043d\u043e \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e. Preemptible \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0442 \u0432\u0430\u0448\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044f \u043e\u0442 \u0432\u0430\u0441 \u043f\u043b\u0430\u0442\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u0443\u044e \u0446\u0435\u043d\u0443 \u0437\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b.<\/p><\/blockquote>\n<p>\n \u0418 \u044d\u0442\u043e \u0432\u0441\u0435 \u0435\u0449\u0435 \u043d\u0435 \u043a\u043e\u043d\u0435\u0446! \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u044f \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0442\u0435\u0441\u0442\u044b \u043f\u043e 12 \u0447\u0430\u0441\u043e\u0432 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0440\u044b\u0432\u0430. \u0418 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0430\u043a, \u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b. \u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0441\u043d\u0438\u0437\u0438\u0442\u044c\u0441\u044f \u0434\u043e 6 \u0447\u0430\u0441\u043e\u0432 \u0432 \u0434\u0435\u043d\u044c. \u0422\u043e\u0433\u0434\u0430 \u043e\u043f\u043b\u0430\u0442\u0430 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u0441\u044f \u0434\u043e 11$ \u0432 \u043c\u0435\u0441\u044f\u0446 \u0437\u0430 8 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432. \u0420\u0430\u0437\u0432\u0435 \u044d\u0442\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e? \u041d\u043e \u0441 preemptible \u043c\u0430\u0448\u0438\u043d\u0430\u043c\u0438 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b \u0438 \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\u043c \u0438 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435, \u0445\u043e\u0442\u044f \u044d\u0442\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e. \u041e\u043d\u043e \u0442\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u0442!<\/p>\n<p>\u041d\u043e \u043d\u0438 \u0432 \u043a\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u044e \u2018\u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0435\u0440\u043c\u044b\u2019. \u041e\u043d\u0438 \u0438\u043c\u0435\u044e\u0442 \u0440\u044f\u0434 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432. \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430, \u0430 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \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\u0430\u0431\u043e\u0440\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438: \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f, \u043b\u043e\u0433\u0438, \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b, \u0432\u0438\u0434\u0435\u043e\u0437\u0430\u043f\u0438\u0441\u044c, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0412\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0437\u0430\u043c\u0435\u043d\u0438\u043c\u043e\u0439 \u0448\u0438\u043a\u0430\u0440\u043d\u043e\u0439 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043e\u0439. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0434\u043b\u044f IOS-\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u043a\u0430 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e Linux\/Windows-\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041d\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u043f\u0440\u043e IOS \u0431\u0443\u0434\u0435\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445. \u042f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0438 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0437\u0430\u0434\u0430\u0447: \u0432 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u043a\u0430, \u0430 \u0432 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e \u0441\u0442\u043e\u044f\u0442 \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u0434\u0435\u043d\u0435\u0433.<\/p>\n<h3>Ilustracija trenutnega stanja infrastrukture<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/f68770c9e27677b9d762af574726c90e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Povezave za nadaljnje raziskovanje<\/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 pricing<\/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\/\">Comparing Cloud Providers<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Podobna orodja:<\/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. Orkestracija<\/h2>\n<p><\/p>\n<h3>Kratak opis tehnologije<\/h3>\n<p>\n Imam dobre novice - skoraj smo na koncu \u010dlanka! Na\u0161a infrastruktura avtomatizacije trenutno vklju\u010duje spletne in Android teste, ki jih izvajamo prek GitLab CI so\u010dasno, z uporabo orodij, ki podpirajo Docker: Selenium grid in Selenoid. Poleg tega uporabljamo virtualne stroje, ustvarjene preko GCP, za zagon kontejnerjev z brskalniki in emulatorji. Da bi zmanj\u0161ali stro\u0161ke, zagnamo te virtualne stroje samo na zahtevo in jih ustavimo, ko testiranje ni v teku. Ali obstaja \u0161e kaj, kar bi lahko izbolj\u0161alo na\u0161o infrastrukturo? Odgovor je - da! Sre\u010damo Kubernetes (K8s)!<\/p>\n<p>Najprej poglejmo, kako so besede orkestracija, klaster in Kubernetes povezane. Na vi\u0161ji ravni je orkestracija sistem, ki uvaja in upravlja aplikacije. Za avtomatizacijo testiranja so tak\u0161ne kontejnerizirane aplikacije Selenium grid in Selenoid. Docker in K8s se dopolnjujeta. Prvi se uporablja za uvajanje aplikacij, drugi pa za orkestracijo. K8s je klaster. Naloga klustra je, da uporablja virtualne stroje kot vozli\u0161\u010da, kar omogo\u010da namestitev razli\u010dnih funkcionalnosti, programov in storitev v okviru enega stre\u017enika (klustra). \u010ce katero koli od vozli\u0161\u010d odpove, prevzamejo druga vozli\u0161\u010da, kar zagotavlja neprekinjeno delovanje na\u0161e aplikacije. Poleg tega ima K8s pomembno funkcionalnost, povezano s skaliranjem, ki nam omogo\u010da, da samodejno pridobimo optimalno \u0161tevilo virov, na podlagi obremenitve in nastavljenih omejitev.<\/p>\n<p>Resni\u010dno, ro\u010dno uvajanje Kubernetes-a od ni\u010d ni povsem trivialna naloga. Pustil bom povezavo do znanega prakti\u010dnega priro\u010dnika \u00bbKubernetes The Hard Way\u00ab. \u010ce vas zanima, lahko preizkusite. Na sre\u010do pa obstajajo alternativne metode in orodja. Najla\u017eje je uporabiti Google Kubernetes Engine (GKE) v GCP, kar bo omogo\u010dilo, da dobite pripravljen klaster po nekaj klikih. Za za\u010detek u\u010denja priporo\u010dam, da uporabite prav ta pristop, saj vam bo omogo\u010dil, da se osredoto\u010dite na u\u010denje, kako uporabiti K8s za svoje naloge, namesto da raziskujete, kako morajo biti notranje komponente med seboj integrirane.\u00a0<\/p>\n<h3>Vrednost za infrastrukturo avtomatizacije<\/h3>\n<p>\nOglejmo si nekaj pomembnih funkcij, ki jih nudi K8s:<\/p>\n<ul>\n<li>uvajanje aplikacije: uporaba multi-nodnega klasterja namesto VM-ov;<\/li>\n<li>dinami\u010dno skaliranje: zmanj\u0161uje stro\u0161ke virov, ki se uporabljajo le po potrebi;<\/li>\n<li>samopopravljanje (Self-healing): samodejno obnavljanje pods (kar obnavlja tudi kontejnere);<\/li>\n<li>izvajanje posodobitev in povratnih sprememb brez ustavljanja: posodabljanje orodij, brskalnikov in emulatorjev ne prekine dela trenutnih uporabnikov.<\/li>\n<\/ul>\n<p>\n Ampak K8s \u0161e vedno ni \u010darobna palica. Da bi razumeli vse prednosti in omejitve v kontekstu obravnavanih orodij (Selenium grid, Selenoid), bomo na kratko obravnavali zgradbo K8s. Klaster vsebuje dva tipa nodov: Master Nodes in Workers Nodes. Master Nodes so odgovorni za upravljanje, uvajanje in odlo\u010ditve o razporejanju. Workers nodes so tisti, kjer so aplikacije zagnane. Nodes vsebujejo tudi okolje za zagon kontejnerjev. V na\u0161em primeru je to Docker, ki je odgovoren za operacije, povezane s kontejnerji. Obstajajo pa tudi alternativne re\u0161itve, na primer<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containerd\/containerd\"> containerd<\/a><\/noindex>. Pomembno je razumeti, da skaliranje ali samopopravljanje ni neposredno povezano s kontejnerji. To se izvaja z dodajanjem\/odvzemom \u0161tevila pods, ki po drugi strani vsebujejo kontejnerje (obi\u010dajno en kontejner na pod, vendar je odvisno od naloge lahko tudi ve\u010d). Visokonavridna hierarhija predstavlja delovno vozli\u0161\u010de, znotraj katerega se nahajajo pods, znotraj katerih so zagnani kontejnerji.<\/p>\n<p>Funkcija skaliranja je klju\u010dna i mo\u017ee se primeniti i na \u010dvorove unutar klastera node-pool, kao i na pods unutar \u010dvora. Postoje 2 tipa skaliranja koja se odnose i na \u010dvorove i na pods. Prvi tip \u2013 horizontalno \u2013 skaliranje se vr\u0161i pove\u0107anjem broja \u010dvorova\/podova. Ovaj tip je vi\u0161e preferiran. Drugi tip, prema tome, je vertikalno. Skaliranje se vr\u0161i pove\u0107anjem veli\u010dina \u010dvorova\/podova, a ne njihovog broja.<\/p>\n<p>Sada \u0107emo pogledati na\u0161e alate u kontekstu gore pomenutih termina.<\/p>\n<p><u>Selenium grid<\/u><\/p>\n<p>Kao \u0161to je ranije pomenuto, Selenium grid je veoma popularan alat, i nije iznena\u0111uju\u0107e \u0161to je containerizovan. Stoga, nije iznena\u0111enje \u0161to se Selenium grid mo\u017ee rasporediti u K8s. Primer kako to uraditi mo\u017ee se prona\u0107i u zvani\u010dnom K8s repozitorijumu. Kao obi\u010dno, prila\u017eem linkove na kraju sekcije. Pored toga, u prakti\u010dnom vodi\u010du je prikazano kako to uraditi putem Terraform-a. Tako\u0111e postoji uputstvo o tome kako skalirati broj podova koji sadr\u017ee kontejnere sa pretra\u017eiva\u010dima. Me\u0111utim, opcija automatskog skaliranja u kontekstu K8s ostaje jo\u0161 uvek nejasan zadatak. Kada sam zapo\u010deo u\u010denje, nisam na\u0161ao nikakav prakti\u010dni vodi\u010d ili preporuke. Nakon nekoliko istra\u017eivanja i eksperimenata uz podr\u0161ku DevOps tima, odabrali smo pristup podizanja kontejnera sa potrebnim pretra\u017eiva\u010dima unutar jednog poda, koji se nalazi unutar jednog radnog \u010dvora. Ovaj na\u010din nam omogu\u0107ava da primenimo strategiju horizontalnog skaliranja \u010dvorova pove\u0107anjem njihovog broja. Nadam se da \u0107e se situacija u budu\u0107nosti promeniti i da \u0107emo videti sve vi\u0161e i vi\u0161e opisa najboljih pristupa i gotovih re\u0161enja, posebno nakon izlaska Selenium grid 4 sa izmenjenom unutra\u0161njom arhitekturom.<\/p>\n<p><u>Selenoid<\/u>:<\/p>\n<p>Trenutno je raspore\u0111ivanje Selenoid-a u K8s najve\u0107e razo\u010daranje. Oni nisu kompatibilni. Teoretski mo\u017eemo podi\u0107i Slenoid kontejner unutar poda, ali kada Selenoid po\u010dne da pokre\u0107e kontejnere sa pretra\u017eiva\u010dima, oni \u0107e i dalje biti unutar istog poda. To \u010dini skaliranje nemogu\u0107im i, kao rezultat, rad Selenoid-a unutar klastera ne\u0107e se razlikovati od rada unutar virtuelne ma\u0161ine. Kraj pri\u010de.<\/p>\n<p><u>Moon<\/u>:<\/p>\n<p>Zavedajo\u010d temu ozkemu grlu pri delu s Selenoidom so razvijalci izdali mo\u010dnej\u0161e orodje, ki so ga poimenovali Moon. To orodje je bilo prvotno zasnovano za delo s Kubernetesom in kot rezultat je mogo\u010de in potrebno uporabiti funkcijo avto\u0161irjenja. Poleg tega bi rekel, da je to trenutno <u>jedina<\/u> najbolj\u0161e orodje v svetu Selenium, ki iz \u0161katle ima podporo za native K8s cluster (<i>niti ne, glej naslednje orodje <\/i>). Klju\u010dna zna\u010dilnost Moona, ki omogo\u010da to podporo, je:\u00a0<\/p>\n<blockquote><p>Popolnoma brezstavno. Selenoid shranjuje v pomnilniku informacije o trenutno aktivnih sejah brskalnika. \u010ce iz kak\u0161nega razloga proces propade, se vse aktivne seje izgubijo. Moon pa nima notranjega stanja in ga lahko repliciramo \u010dez podatkovne centre. Seje brskalnika ostanejo aktivne, tudi \u010de ena ali ve\u010d replik preneha delovati.<\/p><\/blockquote>\n<p>Tako je Moon odli\u010dna re\u0161itev, vendar ima en problem, ni brezpla\u010den. Cena je odvisna od \u0161tevila sej. Brezpla\u010dno lahko za\u017eenete samo 0-4 seje, kar ni ravno koristno. Ampak od pete seje naprej je treba pla\u010dati 5 $ za vsako. Situacija se lahko razlikuje od podjetja do podjetja, vendar v na\u0161em primeru uporaba Moona ni smiselna. Kot sem opisal zgoraj, lahko po potrebi za\u017eenemo VM-e s Selenium Grid ali pove\u010damo \u0161tevilo nod v klastru. Na en pipeline obi\u010dajno za\u017eenemo 500 brskalnikov in vse vire ustavimo po kon\u010danih testih. \u010ce bi uporabljali Moon, bi morali pla\u010dati dodatnih 500 x 5 = 2500 $ na mesec, ne glede na to, kako pogosto izvajamo teste. In ponovno, ne govorim 'ne uporabljajte Moona'. Za va\u0161e naloge je to lahko nepogre\u0161ljiva re\u0161itev, na primer, \u010de imate veliko projektov\/timov v organizaciji in potrebujete velik skupen klaster za vse. Kot vedno, na koncu pustim povezavo in priporo\u010dam, da izvedete vse potrebne izra\u010dune v kontekstu va\u0161e naloge.<\/p>\n<p><u>Callisto<\/u>: (<i><strong>Opozorilo! To ni v prvotni \u010dlanku in je vsebovano samo v ruskem prevodu<\/strong><\/i>)<\/p>\n<p>Kot sem \u017ee povedal, je Selenium zelo priljubljeno orodje, IT sektor pa se hitro razvija. Medtem ko sem delal na prevodu, se je na spletu pojavil nov obetaven instrument Callisto (pozdrav Cypress in drugim ubijalcem Seleniuma). Deluje nativno s K8s in omogo\u010da zagon Selenoid kontejnerjev v pods, razdeljeno po Nodes. Vse deluje takoj iz \u0161katle, vklju\u010dno z avtomatskim skaliranjem. Fantasti\u010dno, a treba ga je testirati. \u017de uspelo mi je nalo\u017eiti to orodje in izvesti nekaj poskusov. Vendar je \u0161e prezgodaj za dokon\u010dne zaklju\u010dke, po prejemu rezultatov na dolgi rok bom morda napisal pregled v naslednjih \u010dlankih. Zaenkrat pu\u0161\u010dam samo povezave za samostojne raziskave.\u00a0\u00a0<\/p>\n<h3>Ilustracija trenutnega stanja infrastrukture<\/p>\n<h3><img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/c9c2ffd21df2a261947df809dcec7108.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Povezave za nadaljnje raziskovanje<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/setup\/\">Kubernetes: nastavitev<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\">Kubernetes: te\u017eja pot<\/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 knjiga<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MmdGyqNqs9w\">Distribuirana avtomatizacija z uporabo 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>Podobna orodja<\/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. Infrastruktura kot koda (IaC)<\/h2>\n<p><\/p>\n<h3>Kratak opis tehnologije<\/h3>\n<p>\n In tu smo pri\u0161li do zadnjega poglavja. Obi\u010dajno ta tehnologija in z njo povezane naloge niso v odgovornosti in\u017eenirjev za avtomatizacijo. In za to so razlogi. Prvi\u010d, v mnogih organizacijah so infrastrukturne zadeve pod nadzorom devops oddelka in ekipa razvojni\u0161ki ne skrbi preve\u010d o tem, kako pipeline deluje in kak\u0161ne podpore je potrebna za vse, kar je s tem povezano. Drugi\u010d, bodimo iskreni, praksa 'Infrastruktura kot koda (IaC)' se \u0161e vedno ne uporablja v mnogih podjetjih. Toda zagotovo je to postalo priljubljen trend in pomembno je truditi se biti vklju\u010den v povezane procese, pristope in orodja. Ali pa vsaj biti na teko\u010dem s dogodki.<\/p>\n<p>Za\u010dnimo z motivacijo za uporabo tega pristopa. \u017de smo razpravljali, da za zagon testov v GitlabCI potrebujemo vsaj vire za zagon Gitlab Runnerja. Za zagon kontejnerjev z brskalniki\/emulatorji pa moramo rezervirati VM ali grozd. Poleg virov za testiranje potrebujemo tudi znatno \u0161tevilo zmogljivosti za vzdr\u017eevanje razvojnih, staging in produkcijskih okolij, kar vklju\u010duje tudi baze podatkov, avtomatizirane urnike, mre\u017ene konfiguracije, uravnote\u017eevalnik obremenitve, uporabni\u0161ka dovoljenja in \u0161e ve\u010d. Klju\u010dni problem so potrebni napori za vzdr\u017eevanje vsega tega. Obstaja ve\u010d na\u010dinov, kako lahko vna\u0161amo spremembe in uvajamo posodobitve. Na primer, v kontekstu GCP lahko uporabimo UI konzolo v brskalniku in izvajamo vse akcije s klikom na gumbe. Alternativna mo\u017enost je uporaba API klicev za interakcijo s stre\u017eni\u0161kimi entitetami ali uporaba ukazne vrstice orodja gcloud za izvajanje potrebnih operacij. Vendar pa pri resni\u010dno velikem \u0161tevilu razli\u010dnih entitet in infrastrukturnih elementov postane te\u017eko ali celo nemogo\u010de izvesti vse operacije ro\u010dno. Kar je \u0161e huje, vse te ro\u010dne akcije so neobvladljive. Ne moremo jih poslati na pregled pred izvedbo, uporabiti sistema za nadzor razli\u010dic in hitro razveljaviti spremembe, ki so pripeljale do incidenta. Za re\u0161evanje tovrstnih te\u017eav so in\u017eenirji razvili in \u0161e razvijajo avtomatizirane bash\/shell skripte, kar ni veliko bolj\u0161e od prej\u0161njih metod, saj jih ni tako enostavno hitro prebrati, razumeti, vzdr\u017eevati in modificirati v proceduralnem slogu.<\/p>\n<p>V tem \u010dlanku in prakti\u010dnem vodi\u010du uporabljam 2 orodji, povezana s prakso IaC. To sta Terraform in Ansible. Nekateri menijo, da nima smisla uporabljati ju hkrati, saj imata podobne funkcionalnosti in sta medsebojno zamenljiva. Vendar pa je dejstvo, da sta ta orodja prvotno zasnovana za zelo razli\u010dne naloge. Potrdili so, da bi se ta orodja morala dopolnjevati, na skupni predstavitvi razvijalcev podjetij HashiCorp in RedHat. Konceptualna razlika je v tem, da je Terraform orodje za provisioning za upravljanje samih stre\u017enikov. Medtem ko je Ansible orodje za upravljanje s konfiguracijami, katerega naloga je namestitev, nastavitev in upravljanje programske opreme na teh stre\u017enikih.<\/p>\n<p>\u0160e ena klju\u010dna zna\u010dilnost teh orodij je slog pisanja kode. Za razliko od bash in Ansible, Terraform uporablja deklarativni slog, ki temelji na opisu \u017eelenega kon\u010dnega stanja, ki ga je treba dose\u010di. Na primer, \u010de nameravamo ustvariti 10 VM-ov in uveljaviti spremembe preko Terraform, bomo dobili 10 VM-ov. \u010ce skripto ponovno za\u017eenemo, se ne bo zgodilo ni\u010d, saj \u017ee imamo 10 VM-ov, in Terraform to ve, saj shranjuje trenutno stanje infrastrukture v state-datoteko. Ansible pa uporablja proceduralni pristop in, \u010de ga prosimo, da ustvari 10 VM-ov, bomo ob prvem zagonu dobili 10 VM-ov, podobno kot pri Terraform. A po ponovnem zagonu jih bomo imeli \u017ee 20. To je bistvena razlika. V proceduralnem slogu ne shranjujemo trenutnega stanja in preprosto opisujemo zaporedje korakov, ki jih je treba izvesti. Seveda lahko obdelamo razli\u010dne situacije, dodamo nekaj preverjanj glede obstoja virov in trenutnega stanja, vendar ni smiselno izgubljati \u010dasa in naprezati se nad nadzorom te logike. Poleg tega pove\u010duje tveganje za napake.\u00a0<\/p>\n<p>Skozi vse zgoraj navedeno lahko sklenemo, da je za provisioning stre\u017enikov bolj primerno orodje Terraform in deklarativna notacija. Upravljanje s konfiguracijami pa je bolje delegirati na Ansible. Ko to razjasnimo, si poglejmo primere uporabe v kontekstu avtomatizacije.<\/p>\n<h3>Vrednost za infrastrukturo avtomatizacije<\/h3>\n<p>\n Pomembno je razumeti, da mora biti infrastruktura za avtomatizacijo testiranja obravnavana kot del celotne infrastrukture podjetja. To pomeni, da morajo biti vse prakse IaC globalno uporabljene za vire celotne organizacije. Kdo je za to odgovoren, je odvisno od va\u0161ih procesov. DevOps ekipa ima ve\u010d izku\u0161enj na tem podro\u010dju, saj vidijo celotno sliko. Vendar so QA in\u017eenirji bolj vklju\u010deni v proces konstrukcije avtomatizacije in strukturo pipeline-a, kar jim omogo\u010da bolj\u0161i vpogled v vse zahtevane spremembe in mo\u017enosti za izbolj\u0161ave. Najbolj\u0161a mo\u017enost je sodelovati, izmenjavati znanje in ideje za dosego pri\u010dakovanega rezultata.\u00a0<\/p>\n<p>Prikazal bom nekaj primerov uporabe Terraform-a in Ansible-a v kontekstu avtomatizacije testiranja ter orodij, o katerih smo se prej pogovarjali:<\/p>\n<p>1. Opisati preko Terraform-a potrebne zna\u010dilnosti in parametre VMs in clustrov.<\/p>\n<p>2. Namestiti s pomo\u010djo Ansible-a potrebna orodja za testiranje: docker, Selenoid, Selenium Grid ter nalo\u017eiti potrebne razli\u010dice brskalnikov\/emulatorjev.<\/p>\n<p>3. Opisati preko Terraform-a zna\u010dilnosti VM, v kateri bo zagnan GitLab Runner.<\/p>\n<p>4. Namestiti s pomo\u010djo Ansible-a GitLab Runner in potrebna spremljevalna orodja, dolo\u010diti nastavitve in konfiguracije.<\/p>\n<h3>Ilustracija trenutnega stanja infrastrukture<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/5d793a800a4ef62e181e6cb3a3f0544e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Viri za \u0161tudij:<\/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 in Terraform skupaj sta bolj\u0161a<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/blog.gruntwork.io\/a-comprehensive-guide-to-terraform-b3d32832baca\">Kompleten vodnik za 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\">Zakaj uporabljamo Terraform in ne Chef, Puppet, Ansible, SaltStack ali 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>Podobna orodja<\/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>Povzemimo!<\/h2>\n<p><\/p>\n<p><strong>Korak<\/strong><br \/>\n<strong>Tehnologija<\/strong><br \/>\n<strong>Instrumenti<\/strong><br \/>\n<strong>Vrednost za infrastrukturo avtomatizacije<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nLokalno delovanje<br \/>\nNode.js, Selenium, Appium<\/p>\n<ul>\n<li>Najbolj priljubljena orodja za splet in mobilne naprave<\/li>\n<li>Podpora mnogim jezikom in platformam (vklju\u010dno z Node.js)<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>2<\/strong><br \/>\nSistemi za kontrolu verzija\u00a0<br \/>\nGit<\/p>\n<ul>\n<li>Podobne prednosti s kodom razvoja<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>3<\/strong><br \/>\nKontejnerizacija<br \/>\nDocker, Selenium grid, Selenoid (Web, Android)<\/p>\n<ul>\n<li>Vzporedno izvajanje testov<\/li>\n<li>Izolirana okolja<\/li>\n<li>Enostavno, fleksibilno posodabljanje razli\u010dic<\/li>\n<li>Dinami\u010dno ustavljanje neuporabljenih virov<\/li>\n<li>Enostavno nastaviti<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>4<\/strong><br \/>\nCI \/ CD<br \/>\nGitlab CI<\/p>\n<ul>\n<li>Testi so del konvejerja<\/li>\n<li>Hitro povratno obve\u0161\u010danje<\/li>\n<li>Vidnost za celotno podjetje \/ ekipo<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>5<\/strong><br \/>\nCloud platforme<br \/>\nGoogle Cloud Platform<\/p>\n<ul>\n<li>Viri po potrebi (pla\u010damo le, ko so potrebni)<\/li>\n<li>Enostavno upravljanje in posodabljanje<\/li>\n<li>Vidnost in nadzor vseh virov<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>6<\/strong><br \/>\nOrkestracija<br \/>\nKubernetes<br \/>\nV kontekstu kontejnerjev z brskalniki\/emulatorji znotraj pods:<\/p>\n<ul>\n<li>\u0160irjenje \/ avtomatsko \u0161irjenje<\/li>\n<li>Samovzpostavitev<\/li>\n<li>Posodobitve in povratki brez prekinitev<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>7<\/strong><br \/>\nInfrastruktura kao kod (IaC)<br \/>\nTerraform, Ansible<\/p>\n<ul>\n<li>Podobne prednosti z infrastrukturo razvoja<\/li>\n<li>Vse prednosti verzioniranja kode<\/li>\n<li>Enostavne spremembe in vzdr\u017eevanje<\/li>\n<li>Popolnoma avtomatizirano<\/li>\n<\/ul>\n<p><\/p>\n<h2>Mind map diagrami: evolucija infrastrukture<\/h2>\n<p>\nkorak1: Lokalan<br \/>\n<img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/507908ba097a603adc3b301ab2f94a8d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>korak2: VCS<br \/>\n<img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/71c5170293d98375d8ab86d05eb47a33.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>korak3: Kontejnerizacija\u00a0<br \/>\n<img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/da33442a592851e07c3f5800c3ee9ead.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>korak4: CI\/CD\u00a0<br \/>\n<img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/900f18b45124412a1ad00d3901efb40e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>korak5: Cloud platforme<br \/>\n<img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/840e5063141ac8787612e2fc46b5d690.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>korak6: Orkestracija<br \/>\n<img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/4651b552efdc893695cbf359c6992e9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>korak7: IaC<br \/>\n<img decoding=\"async\" alt=\"DevOps alati ne samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule\" src=\"\/wp-content\/uploads\/2020\/04\/e784130f570260fc6c3aa263916e3db5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Kaj zdaj?<\/h2>\n<p>\nDakle, ovo je kraj \u010dlanka. Ali na kraju bih \u017eeleo da postavim neke dogovore s vama.<\/p>\n<p><u>Sa va\u0161e strane<\/u><br \/>\n Kao \u0161to je re\u010deno na po\u010detku, \u017eeleo bih da \u010dlanak bude od prakti\u010dne koristi i da vam pomogne da primenite ste\u010deno znanje u stvarnom radu. Ponovo dodajem<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> link na prakti\u010dni vodi\u010d<\/a><\/noindex>.<\/p>\n<p>Ali \u010dak i nakon toga ne stajte, ve\u017ebajte, istra\u017eujte relevantne linkove i knjige, saznajte kako to funkcioni\u0161e u va\u0161oj kompaniji, prona\u0111ite mesta koja se mogu pobolj\u0161ati i u\u010destvujte u tome. Sre\u0107no!<\/p>\n<p><u>S moje strane<\/u><\/p>\n<p>Iz naslova je jasno da je ovo bila samo prva deo. Iako je ispao prili\u010dno obiman, ovde jo\u0161 uvek nisu obra\u0111ene va\u017ene teme. U drugom delu planiram da razmotrim infrastrukturu automatizacije u kontekstu IOS-a. Zbog ograni\u010denja Appla, povezanih sa pokretanjem IOS simulacija samo na macOS sistemima, na\u0161 skup re\u0161enja je ograni\u010den. Na primer, li\u0161eni smo mogu\u0107nosti da koristimo Docker za pokretanje simulacije ili javnih oblaka za pokretanje virtuelnih ma\u0161ina. Ali to ne zna\u010di da ne postoje druge alternative. Poku\u0161a\u0107u da vas obavestim o najnaprednijim re\u0161enjima i modernim alatima!<\/p>\n<p>Tako\u0111e nisam spomenuo prili\u010dno obimne teme vezane za nadzor. U delu 3 planiram da razmotrim najpopularnije alate za nadgledanje infrastrukture, kao i koje podatke i metrike treba uzeti u obzir.<\/p>\n<p>I na kraju. U budu\u0107nosti planiram da objavim video kurs o izgradnji testne infrastrukture i popularnim alatima. Trenutno na internetu ima mnogo kurseva i predavanja o DevOps-u, ali svi materijali su predstavljeni u kontekstu razvoja, a ne automatizacije testiranja. U ovom pitanju mi je zaista potrebna povratna informacija, da li bi takav kurs bio zanimljiv i vredan za zajednicu testera i automatizatora. Unapred hvala!<\/h3>\n<\/h3>\n<p>Izvor: <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\/sl\/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=\"sl_SI\" \/>\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\/sl\/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 alati nisu samo za DevOps. Proces izgradnje infrastrukture automatizacije testiranja od nule | ProHoster","description":"Deo 1: Web \/ Android Napomena: ovaj \u010dlanak je prevod originalnog \u010dlanka na ruski jezik","canonical_url":"https:\/\/prohoster.info\/sl\/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":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/78676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=78676"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/78676\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/78677"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=78676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=78676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=78676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}