{"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\/ro\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","title":{"rendered":"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Partea 1: Web \/ Android<\/h1>\n<p>\n <u>Not\u0103<\/u>: <i>aceast\u0103 articol este o traducere \u00een limba rom\u00e2n\u0103 a articolului original\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>\u201eTool-urile DevOps nu sunt doar pentru DevOps. Construirea unei infrastrucuturi de automatizare a testelor de la zero\u201d.<\/i><\/a><\/noindex><i> Cu toate acestea, toate ilustra\u021biile, linkurile, citatele \u0219i termenii sunt p\u0103stra\u021bi \u00een limba original\u0103, pentru a evita distorsionarea sensului \u00een traducerea \u00een limba rom\u00e2n\u0103. \u00ce\u021bi doresc un studiu pl\u0103cut!<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" 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 \u00cen prezent, specialitatea DevOps este una dintre cele mai c\u0103utate \u00een industria IT. Dac\u0103 deschizi site-uri populare de c\u0103utare a locurilor de munc\u0103 \u0219i aplici un filtru dup\u0103 salarii, vei observa c\u0103 joburile legate de DevOps sunt la \u00eenceputul listei. Totu\u0219i, este important de \u00een\u021beles c\u0103 aceasta se refer\u0103 \u00een principal la pozi\u021bia 'Senior', ceea ce implic\u0103 faptul c\u0103 solicitantul are un nivel \u00eenalt de abilit\u0103\u021bi, cuno\u0219tin\u021be despre tehnologii \u0219i instrumente. De asemenea, vine cu un grad \u00eenalt de responsabilitate, legat\u0103 de continuitatea opera\u021biunilor de produc\u021bie. Cu toate acestea, am \u00eenceput s\u0103 uit\u0103m ce \u00eenseamn\u0103 DevOps. La \u00eenceput, acesta nu a fost o persoan\u0103 sau un departament anume. Dac\u0103 c\u0103ut\u0103m defini\u021biile acestui termen, vom g\u0103si multe substantive frumoase \u0219i corecte, cum ar fi metodologie, practici, filosofie cultural\u0103, grup de concepte \u0219i a\u0219a mai departe.<\/p>\n<p>Specializarea mea este inginer de automatizare a test\u0103rii (QA automation engineer), dar cred c\u0103 nu ar trebui s\u0103 fie legat\u0103 doar de scrierea testelor automate sau de dezvoltarea arhitecturii framework-ului de testare. \u00cen 2020, cuno\u0219tin\u021bele despre infrastructura de automatizare sunt, de asemenea, necesare. Aceasta permite organizarea procesului de automatizare independent, \u00eencep\u00e2nd de la rularea testelor \u0219i termin\u00e2nd cu furnizarea rezultatelor tuturor p\u0103r\u021bilor interesate, conform obiectivelor stabilite. Drept urmare, abilit\u0103\u021bile DevOps sunt un factor obligatoriu pentru a realiza aceast\u0103 munc\u0103. \u0218i toate acestea sunt bune, dar, din p\u0103cate, exist\u0103 o problem\u0103 (<i>spoiler: acest articol face o \u00eencercare de a simplifica aceast\u0103 problem\u0103<\/i>). Problema const\u0103 \u00een faptul c\u0103 DevOps este complicat. \u0218i este evident c\u0103 firmele nu vor pl\u0103ti mult pentru ceea ce este u\u0219or de realizat\u2026 \u00cen lumea DevOps exist\u0103 o mul\u021bime de instrumente, termeni, practici pe care trebuie s\u0103 le st\u0103p\u00e2ne\u0219ti. \u00cen special, acest lucru este dificil la \u00eenceputul carierei \u0219i depinde de experien\u021ba tehnic\u0103 acumulat\u0103.<\/p>\n<p><img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/20712bd4acf881d5346b87f5a2b359d2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSursa: <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>Aici cred c\u0103 putem \u00eencheia partea introductiv\u0103 \u0219i s\u0103 ne concentr\u0103m asupra scopului acestui articol.\u00a0<\/p>\n<h3>Despre ce este acest articol<\/h3>\n<p>\n\u00cen acest articol, voi \u00eemp\u0103rt\u0103\u0219i experien\u021ba mea \u00een construirea unei infrastructuri pentru automatizarea test\u0103rii. \u00cen mediul online exist\u0103 multe surse de informa\u021bii despre diverse instrumente \u0219i modul de utilizare a acestora, dar a\u0219 dori s\u0103 le discut exclusiv \u00een contextul automatiz\u0103rii. Cred c\u0103 mul\u021bi ingineri de automatizare se confrunt\u0103 cu situa\u021bia \u00een care testele create de ei nu sunt rulate \u0219i \u00eentre\u021binute de nimeni altcineva. Ca rezultat, testele devin \u00eenvechite \u0219i trebuie s\u0103 investe\u0219ti timp pentru a le actualiza. Din nou, la \u00eenceputul carierei, aceasta poate fi o provocare destul de dificil\u0103: a decide corect ce instrumente ar trebui s\u0103 te ajute s\u0103 rezolvi aceast\u0103 problem\u0103, cum s\u0103 le alegi, s\u0103 le configurezi \u0219i s\u0103 le \u00eentre\u021bii. Unii testeri apeleaz\u0103 la DevOps (persoane) \u0219i, s\u0103 fim sinc\u00e9ri, aceast\u0103 abordare func\u021bioneaz\u0103. \u00cen multe cazuri, aceasta poate fi singura op\u021biune, deoarece ne lipse\u0219te vizibilitatea tuturor dependen\u021belor. Dar, a\u0219a cum \u0219tim, DevOps sunt oameni foarte ocupa\u021bi, deoarece trebuie s\u0103 se g\u00e2ndeasc\u0103 la infrastructura \u00eentregii companii, la deployment, monitorizare, microservicii \u0219i alte sarcini similare, \u00een func\u021bie de organiza\u021bie \/ echip\u0103. A\u0219a cum se \u00eent\u00e2mpl\u0103 de obicei, automatizarea nu este o prioritate. \u00cen acest caz, trebuie s\u0103 \u00eencerc\u0103m s\u0103 facem tot posibilul din partea noastr\u0103 de la \u00eenceput p\u00e2n\u0103 la sf\u00e2r\u0219it. Acest lucru va reduce dependen\u021bele, va accelera fluxul de lucru, va \u00eembun\u0103t\u0103\u021bi abilit\u0103\u021bile noastre \u0219i ne va permite s\u0103 vedem o imagine mai larg\u0103 a ceea ce se \u00eent\u00e2mpl\u0103.<\/p>\n<p>Articolul prezint\u0103 instrumentele cele mai solicitate \u0219i populare, ar\u0103t\u00e2nd cum s\u0103 le folose\u0219ti pentru a construi pas cu pas infrastructura pentru automatizare. Fiecare grup este reprezentat de instrumente care au fost testate personal. Dar asta nu \u00eenseamn\u0103 c\u0103 trebuie s\u0103 folose\u0219ti acelea\u0219i lucruri. Instrumentele \u00een sine nu sunt importante, ele apar \u0219i ajung s\u0103 fie dep\u0103\u0219ite. Sarcina noastr\u0103 de inginerie este s\u0103 \u00een\u021belegem principiile de baz\u0103: de ce avem nevoie de acest grup de instrumente \u0219i ce sarcini de lucru putem rezolva cu ajutorul lor. De aceea, la sf\u00e2r\u0219itul fiec\u0103rei sec\u021biuni, las linkuri c\u0103tre instrumente similare care, probabil, sunt utilizate \u00een organiza\u021bia ta.<\/p>\n<h3>Ce nu este \u00een acest articol<\/h3>\n<p>\nReiterez c\u0103 articolul nu este despre uneltele specifice, a\u0219a c\u0103 nu vor fi inser\u021bii de cod din documenta\u021bie sau descrierea unor comenzi concrete. Dar la finalul fiec\u0103rei sec\u021biuni las linkuri pentru studiu detaliat.<\/p>\n<p>Aceasta s-a f\u0103cut din urm\u0103toarele motive:\u00a0<\/p>\n<ul>\n<li>acest material este foarte u\u0219or de g\u0103sit \u00een diverse surse (documenta\u021bie, c\u0103r\u021bi, cursuri video);<\/li>\n<li>dac\u0103 ne ad\u00e2ncim, va trebui s\u0103 scriem 10, 20, 30 de p\u0103r\u021bi ale acestui articol (\u00een timp ce \u00een planuri sunt 2-3);<\/li>\n<li>pur \u0219i simplu nu vreau s\u0103 v\u0103 irosesc timpul, deoarece este posibil s\u0103 dori\u021bi s\u0103 folosi\u021bi alte unelte pentru a atinge acelea\u0219i obiective.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Practic\u0103<\/h3>\n<p>\nMi-ar pl\u0103cea foarte mult ca acest material s\u0103 fie util pentru fiecare cititor, nu doar s\u0103 fie citit \u0219i uitat. \u00cen orice proces de \u00eenv\u0103\u021bare, practica este o component\u0103 foarte important\u0103. De aceea am preg\u0103tit<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> un depozit GitHub cu un ghid pas cu pas despre cum s\u0103 face\u021bi totul de la zero<\/a><\/noindex>. De asemenea, v\u0103 a\u0219teapt\u0103 teme de cas\u0103 pentru a fi siguri c\u0103 nu a\u021bi copiat f\u0103r\u0103 s\u0103 g\u00e2ndi\u021bi r\u00e2ndurile comenzilor executate <\/p>\n<h3>Plan<\/h3>\n<p><\/p>\n<p><strong>Pas<\/strong><br \/>\n<strong>Tehnologie<\/strong><br \/>\n<strong>Instrumente<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nRulare local\u0103 (preg\u0103ti\u021bi teste demo web \/ android \u0219i rula\u021bi-le local)\u00a0<br \/>\nNode.js, Selenium, Appium<\/p>\n<p><strong>2<\/strong><br \/>\nSisteme de control al versiunilor\u00a0<br \/>\nGit<\/p>\n<p><strong>3<\/strong><br \/>\nContainerizare<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 \/>\nPlatforme cloud<br \/>\nGoogle Cloud Platform<\/p>\n<p><strong>6<\/strong><br \/>\nOrchestrare<br \/>\nKubernetes<\/p>\n<p><strong>7<\/strong><br \/>\nInfrastructur\u0103 ca cod (IaC)<br \/>\nTerraform, Ansible<\/p>\n<p><\/p>\n<h3>Structura fiec\u0103rei sec\u021biuni<\/h3>\n<p>\nPentru a men\u021bine nara\u021biunea \u00eentr-o form\u0103 vizibil\u0103, fiecare sec\u021biune este descris\u0103 conform urm\u0103torului plan:<\/p>\n<ul>\n<li>descriere scurt\u0103 a tehnologiei,<\/li>\n<li>valoare pentru infrastructura de automatizare,<\/li>\n<li>ilustrarea st\u0103rii actuale a infrastructurii,<\/li>\n<li>linkuri pentru studiu,<\/li>\n<li>unelte similare.<\/li>\n<\/ul>\n<p><\/p>\n<h2>1. Rularea local\u0103 a testelor<\/h2>\n<p><\/p>\n<h3>Descriere scurt\u0103 a tehnologiei<\/h3>\n<p>\nAceasta este doar o etap\u0103 preg\u0103titoare pentru a rula teste demo local \u0219i pentru a verifica c\u0103 acestea trec cu succes. \u00cen partea practic\u0103 se folose\u0219te Node.js, dar limbajul de programare \u0219i platforma nu sunt importante, se pot folosi cele pe care le utilizeaz\u0103 compania dumneavoastr\u0103.\u00a0<\/p>\n<p>Cu toate acestea, ca unelte de automatizare, v\u0103 recomand s\u0103 folosi\u021bi Selenium WebDriver pentru platformele web \u0219i Appium pentru platforma Android, deoarece \u00een pa\u0219ii urm\u0103tori vom utiliza imagini Docker care sunt optimizate pentru a lucra specific cu aceste unelte. Mai mult, referindu-se la cerin\u021bele din anun\u021burile de angajare, aceste unelte sunt cele mai solicitate pe pia\u021b\u0103.<\/p>\n<p>Dup\u0103 cum a\u021bi observat, ne concentr\u0103m doar pe testele web \u0219i Android. Din p\u0103cate, IOS este o poveste complet diferit\u0103 (mul\u021bumesc Apple). Pl\u0103nuiesc s\u0103 demonstrez solu\u021biile \u0219i practicile legate de IOS \u00een p\u0103r\u021bile urm\u0103toare.<\/p>\n<h3>Valoarea pentru infrastructura de automatizare<\/h3>\n<p>\nDin punct de vedere al infrastructurii, rularea local\u0103 nu are nicio valoare. Verifica\u021bi doar c\u0103 testele func\u021bioneaz\u0103 pe ma\u0219ina local\u0103 \u00een browserele locale \u0219i simulatoarele. Dar, \u00een orice caz, aceasta este un punct de plecare necesar.<\/p>\n<h3>Ilustrarea st\u0103rii curente a infrastructurii<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/504f28744e29938f66be41c32d9a7dc6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Linkuri pentru studiu<\/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\">Emulator Android<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/tree\/master\/javascript\/node\/selenium-webdriver\/example\">Exemple Selenium JS pe GitHub<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/appium\/appium\/tree\/master\/sample-code\/javascript-wd\">Exemple Appium JS pe GitHub<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Instrumente similare<\/h3>\n<p><\/p>\n<ul>\n<li>orice limbaj de programare prefera\u021bi, \u00eempreun\u0103 cu testele Selenium\/Appium;<\/li>\n<li>orice teste;<\/li>\n<li>orice runner de teste.<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Sisteme de control al versiunilor (Git)<\/h2>\n<p><\/p>\n<h3>Descriere scurt\u0103 a tehnologiei<\/h3>\n<p>\n Nu va fi o mare descoperire pentru nimeni dac\u0103 spun c\u0103 sistemul de control al versiunilor este o parte extrem de important\u0103 a dezvolt\u0103rii, at\u00e2t \u00een echipe, c\u00e2t \u0219i individual. Baz\u00e2ndu-ne pe diverse surse, putem afirma cu \u00eencredere c\u0103 Git este cel mai popular reprezentant. Sistemul de control al versiunilor ofer\u0103 multiple avantaje, cum ar fi partajarea codului, stocarea versiunilor, restaurarea pe ramuri anterioare, monitorizarea istoricului proiectului, backup-uri. Nu vom discuta fiecare punct \u00een detaliu, deoarece sunt sigur c\u0103 sunte\u021bi familiariza\u021bi cu aceste aspecte \u0219i le folosi\u021bi \u00een activitatea de zi cu zi. Dar, dac\u0103 cumva nu sunte\u021bi, v\u0103 recomand s\u0103 \u00eentrerupe\u021bi lectura acestui articol \u0219i s\u0103 completa\u021bi aceast\u0103 lacun\u0103 c\u00e2t mai repede.<\/p>\n<h3>Valoarea pentru infrastructura de automatizare<\/h3>\n<p>\n \u0218i aici pute\u021bi pune o \u00eentrebare rezonabil\u0103: \u201eDe ce ne poveste\u0219te despre Git? Toat\u0103 lumea \u0219tie \u0219i folose\u0219te pentru dezvoltarea codului, c\u00e2t \u0219i pentru codul testelor automate\u201d. Ve\u021bi avea absolut dreptate, dar \u00een acest articol discut\u0103m despre infrastructur\u0103, iar aceast\u0103 sec\u021biune joac\u0103 rolul de previzualizare pentru sec\u021biunea 7: \u201eInfrastructura ca cod (IaC)\u201d. Pentru noi, aceasta \u00eenseamn\u0103 c\u0103 \u00eentreaga infrastructur\u0103, inclusiv cea de testare, este descris\u0103 sub form\u0103 de cod, astfel \u00eenc\u00e2t putem aplica \u0219i sistemele de versionare \u0219i ob\u021bine acelea\u0219i avantaje ca pentru codul de dezvoltare \u0219i automatizare.<\/p>\n<p>Vom analiza IaC mai detaliat \u00een pasul 7, dar chiar \u0219i acum se poate \u00eencepe s\u0103 folose\u0219ti Git local, cre\u00e2nd un depozit local. Imaginea de ansamblu va fi extins\u0103 odat\u0103 ce vom ad\u0103uga un depozit remote la infrastructur\u0103.<\/p>\n<h3>Ilustrarea st\u0103rii curente a infrastructurii<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/f17c1d2b2f18aa814c44f7c443e49416.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Linkuri pentru studiu<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.atlassian.com\/git\/tutorials\/what-is-version-control\">Ce este controlul versiunilor<\/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\">Primii pa\u0219i \u2014 Despre controlul versiunilor<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Instrumente similare<\/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 (acum face parte din Azure DevOps Services)<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2>3. Contenerizarea (Docker)<\/h2>\n<p><\/p>\n<h3>Descriere scurt\u0103 a tehnologiei<\/h3>\n<p>\n Pentru a demonstra cum a schimbat contenizarea regulile jocului, s\u0103 c\u0103l\u0103torim \u00eenapoi cu c\u00e2teva decenii. \u00cen acele vremuri, oamenii achizi\u021bionau \u0219i foloseau servere pentru a rula aplica\u021bii. \u00cens\u0103, \u00een cele mai multe cazuri, resursele necesare pentru rulare nu erau cunoscute dinainte. Ca urmare, companiile cheltuiau bani pe achizi\u021bionarea de servere puternice, dar o parte din aceste capacit\u0103\u021bi nu erau utilizate complet.<\/p>\n<p>Urm\u0103toarea etap\u0103 a evolu\u021biei au fost ma\u0219inile virtuale (VM), care au rezolvat problema cheltuielilor pe resursele neutilizate. Aceast\u0103 tehnologie a permis rularea aplica\u021biilor independent una de alta pe un singur server, aloc\u00e2nd un spa\u021biu complet izolat. Dar, din p\u0103cate, orice tehnologie are dezavantajele sale. Rularea VM-urilor necesit\u0103 un sistem de operare complet, care consum\u0103 CPU, RAM, stocare \u0219i, \u00een func\u021bie de OS, trebuie s\u0103 iei \u00een considerare cheltuielile pentru licen\u021b\u0103. Ace\u0219ti factori influen\u021beaz\u0103 viteza de \u00eenc\u0103rcare \u0219i complic\u0103 portabilitatea.<\/p>\n<p>\u0218i iat\u0103 ne apropiem de contenizare. Din nou, aceast\u0103 tehnologie a rezolvat problema anterioar\u0103, deoarece containerele nu folosesc un sistem de operare complet, ceea ce permite eliberarea unui num\u0103r semnificativ de resurse \u0219i ofer\u0103 o solu\u021bie rapid\u0103 \u0219i flexibil\u0103 pentru portabilitate.<\/p>\n<p>Desigur, tehnologia containeriz\u0103rii nu este ceva nou \u0219i a fost introdus\u0103 pentru prima dat\u0103 la sf\u00e2r\u0219itul anilor '70. Atunci au fost realizate multe studii, progrese \u0219i \u00eencerc\u0103ri. Dar tocmai Docker a adaptat aceast\u0103 tehnologie \u0219i a f\u0103cut-o u\u0219or accesibil\u0103 pentru mase. \u00cen ziua de azi, c\u00e2nd vorbim despre containere, de cele mai multe ori ne referim la Docker. Atunci c\u00e2nd vorbim despre containere Docker, ne g\u00e2ndim la containere Linux. Putem utiliza sisteme Windows \u0219i macOS pentru a rula containere, dar este important s\u0103 \u00een\u021belegem c\u0103, \u00een acest caz, apare un strat suplimentar. De exemplu, Docker pe Mac lanseaz\u0103 pe furi\u0219 containere \u00een interiorul unei VM Linux u\u0219oare. Vom reveni la acest subiect c\u00e2nd vom discuta despre rularea emulatoarelor Android \u00een containere, deoarece aici apare un detaliu foarte important care trebuie analizat mai \u00een detaliu.<\/p>\n<h3>Valoarea pentru infrastructura de automatizare<\/h3>\n<p>\n Am stabilit c\u0103 containerizarea \u0219i Docker sunt fantastice. S\u0103 vedem acest concept \u00een contextul automatiz\u0103rii, deoarece orice instrument sau tehnologie trebuie s\u0103 rezolve o problem\u0103. S\u0103 identific\u0103m problemele evidente ale automatiz\u0103rii testelor \u00een contextul testelor UI:<\/p>\n<ul>\n<li>o cantitate uria\u0219\u0103 de dependen\u021be la instalarea Selenium \u0219i, \u00een special, Appium;<\/li>\n<li>probleme de compatibilitate \u00eentre versiunile browserelor, simulatoarelor \u0219i driverelor;<\/li>\n<li>lipsa unui spa\u021biu izolat pentru browsere\/simulatoare, ceea ce este deosebit de crucial pentru rularea paralel\u0103;<\/li>\n<li>dificult\u0103\u021bi \u00een gestionare \u0219i \u00eentre\u021binere, dac\u0103 trebuie s\u0103 rula\u021bi 10, 50, 100 sau chiar 1000 de browsere simultan.<\/li>\n<\/ul>\n<p>\nDar, deoarece Selenium este cel mai popular instrument de automatizare, iar Docker este cel mai popular instrument de containerizare, nimeni nu ar trebui s\u0103 se mire c\u0103 cineva a \u00eencercat s\u0103 le combine pentru a ob\u021bine un instrument puternic pentru a rezolva problemele men\u021bionate mai sus. S\u0103 analiz\u0103m aceste solu\u021bii \u00een detaliu.\u00a0<\/p>\n<p><u>Selenium grid \u00een docker<\/u><\/p>\n<p>Acest instrument este cel mai popular din lume pentru Selenium, folosit pentru a rula mai multe browsere pe mai multe ma\u0219ini \u0219i a le gestiona dintr-un nod central. Pentru a-l porni, este necesar s\u0103 \u00eenregistr\u0103m cel pu\u021bin 2 componente: Hub \u0219i Node(s). Hub-ul este nodul central care prime\u0219te toate cererile de la teste \u0219i le distribuie c\u0103tre Node-urile corespunz\u0103toare. Pentru fiecare Node, putem configura o configura\u021bie specific\u0103, de exemplu, specific\u00e2nd browserul dorit \u0219i versiunea acestuia. Cu toate acestea, trebuie s\u0103 ne ocup\u0103m personal de driverele compatibile pentru browsere \u0219i s\u0103 le instal\u0103m pe Node-urile necesare. Din acest motiv, Selenium Grid nu este folosit \u00een forma sa pur\u0103, except\u00e2nd cazurile c\u00e2nd avem de-a face cu browsere care nu pot fi instalate pe Linux OS. Pentru toate celelalte cazuri, o solu\u021bie mult mai flexibil\u0103 \u0219i corect\u0103 este utilizarea imaginilor Docker pentru a lansa Hub-ul \u0219i Node-urile Selenium Grid. Aceast\u0103 abordare simplific\u0103 gestionarea nodurilor, deoarece putem alege imaginea dorit\u0103, care are deja instalate versiunile compatibile ale browserelor \u0219i driverelor.<\/p>\n<p>\u00cen ciuda recenziilor negative privind stabilitatea func\u021bion\u0103rii, \u00een special atunci c\u00e2nd se lanseaz\u0103 un num\u0103r mare de Node-uri \u00een paralel, Selenium Grid r\u0103m\u00e2ne cel mai popular instrument pentru rularea paralel\u0103 a testelor Selenium. Este important de men\u021bionat c\u0103, \u00een open-source, apar constant diverse \u00eembun\u0103t\u0103\u021biri \u0219i modific\u0103ri ale acestui instrument, care abordeaz\u0103 diferitele col\u021buri neagr\u0103.<\/p>\n<p><u>Selenoid pentru Web<\/u><\/p>\n<p>Acest instrument reprezint\u0103 o inova\u021bie \u00een lumea Selenium, func\u021bion\u00e2nd imediat din cutie \u0219i facilit\u00e2nd semnificativ via\u021ba multor ingineri de automatizare. \u00cen primul r\u00e2nd, nu este o simpl\u0103 modificare a Selenium Grid. \u00cen schimb, dezvoltatorii au creat o versiune complet nou\u0103 a Selenium Hub \u00een limbajul Golang, ceea ce, \u00eempreun\u0103 cu imaginile Docker u\u0219oare pentru diverse browsere, a accelerat dezvoltarea automatiz\u0103rii test\u0103rii. Mai mult dec\u00e2t at\u00e2t, \u00een cazul Selenium Grid, trebuie s\u0103 definim din timp toate browserele \u0219i versiunile necesare, ceea ce nu reprezint\u0103 o problem\u0103 atunci c\u00e2nd lucr\u0103m cu un singur browser. \u00cens\u0103, c\u00e2nd vine vorba de mai multe browsere suportate, Selenoid este solu\u021bia num\u0103rul unu, datorit\u0103 func\u021biei 'browser la cerere'. Tot ce trebuie s\u0103 facem este s\u0103 desc\u0103rc\u0103m din timp imaginile necesare cu browserele \u0219i s\u0103 actualiz\u0103m fi\u0219ierul de configurare cu care interac\u021bioneaz\u0103 Selenoid. Odat\u0103 ce Selenoid prime\u0219te o solicitare de la teste, va lansa automat containerul necesar cu browserul dorit. Dup\u0103 ce testul se finalizeaz\u0103, Selenoid va \u00eenchide containerul, eliber\u00e2nd astfel resursele pentru urm\u0103toarele solicit\u0103ri. Astfel de abordare elimin\u0103 complet problema cunoscut\u0103 a 'degrad\u0103rii nodurilor', cu care ne \u00eent\u00e2lnim frecvent \u00een Selenium Grid.<\/p>\n<p>Dar, din p\u0103cate, Selenoid nu este \u00eenc\u0103 un panaceu. Am ob\u021binut func\u021bia 'browser la cerere', dar func\u021bia 'resurse la cerere' nu este \u00eenc\u0103 disponibil\u0103. Pentru a utiliza Selenoid, trebuie s\u0103-l desf\u0103\u0219ur\u0103m pe hardware fizic sau pe VM, ceea ce \u00eenseamn\u0103 c\u0103 trebuie s\u0103 \u0219tim din timp c\u00e2te resurse trebuie alocate. Consider c\u0103 nu este o problem\u0103 pentru proiectele mici care ruleaz\u0103 10, 20 sau chiar 30 de browsere simultan. Dar ce se \u00eent\u00e2mpl\u0103 dac\u0103 avem nevoie de 100, 500, 1000 \u0219i mai mult? Nu are sens s\u0103 men\u021binem \u0219i s\u0103 pl\u0103tim pentru un astfel de num\u0103r de resurse constant. \u00cen sec\u021biunile 5 \u0219i 6 ale acestui articol, vom discuta solu\u021bii care permit scalarea, reduc\u00e2nd astfel semnificativ costurile companiei.<\/p>\n<p><u>Selenoid pentru Android<\/u><\/p>\n<p>Dup\u0103 succesul Selenoid ca instrument pentru automatizarea web, oamenii au dorit s\u0103 ob\u021bin\u0103 ceva similar pentru Android. \u0218i acest lucru s-a \u00eent\u00e2mplat \u2013 Selenoid a fost lansat cu suport pentru Android. Din perspectiva utilizatorului, principiul de func\u021bionare este similar cu cel al automatiz\u0103rii web. Singura diferen\u021b\u0103 este c\u0103, \u00een loc de containere cu browsere, Selenoid ruleaz\u0103 containere cu emulatori Android. Din punctul meu de vedere, \u00een prezent, acesta este cel mai puternic instrument gratuit pentru a rula teste Android \u00een paralel.<\/p>\n<p>Nu mi-ar pl\u0103cea deloc s\u0103 vorbesc despre laturile negative ale acestui instrument, deoarece chiar \u00eemi place foarte mult. Totu\u0219i, exist\u0103 acelea\u0219i dezavantaje care se refer\u0103 \u0219i la automatizarea web, legate de scalabilitate. \u00cen plus, trebuie s\u0103 men\u021bionez o alt\u0103 limitare, care poate deveni o surpriz\u0103 dac\u0103 configur\u0103m instrumentul pentru prima dat\u0103. Pentru a rula imaginile Android, avem nevoie de o ma\u0219in\u0103 fizic\u0103 sau de o VM cu suport pentru virtualizare \u00eencorporat\u0103. \u00cen ghidul practic, voi demonstra cum s\u0103 activ\u0103m acest lucru pe o VM Linux. Totu\u0219i, dac\u0103 e\u0219ti utilizator macOS \u0219i vrei s\u0103 desf\u0103\u0219ori Selenoid local, nu va fi posibil s\u0103 rulezi teste Android. Dar po\u021bi rula \u00eentotdeauna o VM Linux local cu virtualizarea \u00eencorporat\u0103 configurat\u0103 \u0219i s\u0103 desf\u0103\u0219ori Selenoid \u00een interior.<\/p>\n<h3>Ilustrarea st\u0103rii curente a infrastructurii<\/h3>\n<p>\n \u00cen contextul acestui articol, vom ad\u0103uga 2 instrumente pentru a ilustra infrastructura. Acestea sunt Selenium Grid pentru teste web \u0219i Selenoid pentru teste Android. \u00cen ghidul de pe GitHub, voi ar\u0103ta, de asemenea, cum s\u0103 folose\u0219ti Selenoid pentru a rula teste web.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/1202ae79eba9cffc965f3a5b2648c755.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Linkuri pentru studiu<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/resources\/what-container\">Docker: ce este un container<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/get-started\">Docker: \u00eenceputuri<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/containerjournal.com\/topics\/container-ecosystems\/5-container-alternatives-to-docker\/\">5 alternative la container 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\">Setare KVM pentru emulatoarele Android<\/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\">Carte Docker Deep Dive<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Instrumente similare<\/h3>\n<p><\/p>\n<ul>\n<li>Exist\u0103 \u0219i alte instrumente de containerizare, dar Docker este cel mai popular. Dac\u0103 dore\u0219ti s\u0103 \u00eencerci ceva diferit, re\u021bine c\u0103 instrumentele pe care le-am discutat pentru rularea paralel\u0103 a testelor Selenium nu vor func\u021biona din cutie.\u00a0\u00a0<\/li>\n<li>A\u0219a cum am spus, exist\u0103 multe modific\u0103ri ale Selenium Grid, de exemplu,<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>Descriere scurt\u0103 a tehnologiei<\/h3>\n<p>\n Practicile de integrare continu\u0103 sunt destul de populare \u00een dezvoltare \u0219i se afl\u0103 la fel de importante ca \u0219i sistemele de control al versiunilor. Cu toate acestea, simt c\u0103 exist\u0103 confuzie \u00een termeni. \u00cen acest paragraf, a\u0219 dori s\u0103 descriu 3 modific\u0103ri ale acestei tehnologii din perspectiva mea. Pe internet, ve\u021bi g\u0103si multe articole cu diverse interpret\u0103ri, iar acest lucru este absolut normal dac\u0103 opinia dumneavoastr\u0103 este diferit\u0103. Cel mai important este s\u0103 fi\u021bi pe aceea\u0219i lungime de und\u0103 cu colegii dumneavoastr\u0103.<\/p>\n<p>A\u0219adar, exist\u0103 3 termeni: CI \u2014 Continuous Integration (integrare continu\u0103), CD \u2014 Continuous Delivery (livrare continu\u0103) \u0219i din nou CD \u2014 Continuous Deployment (implementare continu\u0103).\u00a0 (<i>\u00cen continuare, voi folosi ace\u0219ti termeni \u00een limba englez\u0103<\/i>). Fiecare modificare adaug\u0103 c\u00e2teva etape suplimentare \u00een procesul dumneavoastr\u0103 de dezvoltare. \u00cens\u0103 cuv\u00e2ntul <u>continuous<\/u> (ne\u00eentrerupt) este cel mai important. \u00cen acest context, ne referim la ceva care se desf\u0103\u0219oar\u0103 de la \u00eenceput p\u00e2n\u0103 la sf\u00e2r\u0219it, f\u0103r\u0103 \u00eentreruperi sau interven\u021bii manuale. S\u0103 analiz\u0103m CI &#038; CD \u0219i CD \u00een acest context.<\/p>\n<ul>\n<li><strong>Continuous Integration \u2013<\/strong> este primul pas \u00een evolu\u021bie. Dup\u0103 ce trimitem un cod nou pe server, ne a\u0219tept\u0103m s\u0103 primim rapid feedback c\u0103 modific\u0103rile noastre sunt \u00een regul\u0103. De obicei, CI include rularea instrumentelor de analiz\u0103 static\u0103 a codului \u0219i teste unitare\/intern API. Aceasta ne permite s\u0103 ob\u021binem informa\u021bii despre codul nostru la c\u00e2teva secunde\/minute dup\u0103.<\/li>\n<li><strong>Continuous Delivery<\/strong> este un pas mai avansat, \u00een care rul\u0103m teste de integrare\/UI. Totu\u0219i, \u00een aceast\u0103 etap\u0103 nu ob\u021binem rezultatele la fel de repede ca \u00een cazul CI. \u00cen primul r\u00e2nd, aceste tipuri de teste necesit\u0103 mai mult timp pentru a fi executate. \u00cen al doilea r\u00e2nd, \u00eenainte de a rula, trebuie s\u0103 desf\u0103\u0219ur\u0103m modific\u0103rile noastre pe medii de testare\/staging. Mai mult, dac\u0103 vorbim despre dezvoltarea de aplica\u021bii mobile, apare o etap\u0103 suplimentar\u0103 de creare a versiuni aplica\u021biei noastre.<\/li>\n<li><strong>Continuous Deployment<\/strong> presupune c\u0103 eliber\u0103m automat (release) modific\u0103rile noastre \u00een production, dac\u0103 toate testele de acceptare au fost finalizate \u00een etapele anterioare. \u00cen plus, dup\u0103 etapa release, se pot configura diverse etape, cum ar fi lansarea testelor smoke pe production \u0219i colectarea metrilor de interes. Continuous Deployment este posibil doar cu o acoperire bun\u0103 a testelor automatizate. Dac\u0103 sunt necesare interven\u021bii manuale, inclusiv testarea, atunci aceasta nu mai este <u>Continu<\/u> (continu). Atunci putem spune c\u0103 pipeline-ul nostru respect\u0103 doar practica Continuous Delivery.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Valoarea pentru infrastructura de automatizare<\/h3>\n<p>\n \u00cen aceast\u0103 sec\u021biune trebuie s\u0103 clarific c\u0103, atunci c\u00e2nd vorbim despre teste UI end-to-end, \u00eenseamn\u0103 c\u0103 trebuie s\u0103 desf\u0103\u0219ur\u0103m modific\u0103rile noastre \u0219i serviciile asociate pe medii de testare. Continuous Integration - procesul nu este aplicabil pentru aceast\u0103 sarcin\u0103 \u0219i trebuie s\u0103 ne asum\u0103m implementarea m\u0103car a practicilor Continuous Delivery. Continuous Deployment are de asemenea sens \u00een contextul testelor UI, dac\u0103 inten\u021bion\u0103m s\u0103 le rul\u0103m pe production.<\/p>\n<p>\u0218i \u00eenainte de a ne uita la ilustrarea modific\u0103rii arhitecturii, vreau s\u0103 spun c\u00e2teva cuvinte despre GitLab CI. Spre deosebire de alte instrumente CI\/CD, GitLab ofer\u0103 un repository remote \u0219i multe alte func\u021bionalit\u0103\u021bi suplimentare. Astfel, GitLab este mai mult dec\u00e2t CI. Include din cutie gestionarea codului surs\u0103, management Agile, pipeline-uri CI\/CD, unelte de logging \u0219i colectare de metrici. Arhitectura GitLab const\u0103 \u00een Gitlab CI\/CD \u0219i GitLab Runner. Iat\u0103 o descriere scurt\u0103 de pe site-ul oficial:<\/p>\n<blockquote><p>Gitlab CI\/CD este o aplica\u021bie web cu un API care \u00ee\u0219i stocheaz\u0103 starea \u00eentr-o baz\u0103 de date, gestioneaz\u0103 proiecte\/build-uri \u0219i ofer\u0103 o interfa\u021b\u0103 utilizator. GitLab Runner este o aplica\u021bie care proceseaz\u0103 build-urile. Poate fi desf\u0103\u0219urat separat \u0219i lucreaz\u0103 cu GitLab CI\/CD printr-un API. Pentru rularea testelor ai nevoie at\u00e2t de instan\u021ba Gitlab, c\u00e2t \u0219i de Runner.<\/p><\/blockquote>\n<p><\/p>\n<h3>Ilustrarea st\u0103rii curente a infrastructurii<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/a05ece39b6c6a9aaec4177d4b5242722.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Linkuri pentru studiu<\/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\">carte Continuous Integration<\/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=\">carte Continuous Delivery<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Instrumente similare<\/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>\u0218i multe altele<\/li>\n<\/ul>\n<p><\/p>\n<h2>5. Platforme cloud<\/h2>\n<p><\/p>\n<h3>Descriere scurt\u0103 a tehnologiei<\/h3>\n<p>\n \u00cen aceast\u0103 sec\u021biune, vom discuta despre o tendin\u021b\u0103 popular\u0103 numit\u0103 'cloud-uri publice'. Cu toate c\u0103 tehnologiile de virtualizare \u0219i containerizare men\u021bionate mai sus ofer\u0103 beneficii enorme, avem \u00een continuare nevoie de resurse computa\u021bionale. Companiile cump\u0103r\u0103 servere scumpe sau \u00eenchiriaz\u0103 centre de date, dar \u00een acest caz trebuie s\u0103 fac\u0103 calcule (uneori nerealiste) cu privire la c\u00e2t de multe resurse ne vor fi necesare, dac\u0103 le vom folosi 24\/7 \u0219i \u00een ce scopuri. De exemplu, pentru produc\u021bie, este necesar un server care func\u021bioneaz\u0103 nonstop, dar avem nevoie de resurse similare pentru testare \u00een afara orelor de lucru? Acest lucru depinde \u0219i de tipul test\u0103rii efectuate. Un exemplu sunt testele de sarcin\u0103\/stres, pe care le planific\u0103m s\u0103 le rul\u0103m \u00een afara orelor de lucru pentru a ob\u021bine rezultate \u00een ziua urm\u0103toare. Cu toate acestea, disponibilitatea non-stop a serverelor nu este necesar\u0103 pentru testele auto-end-to-end, mai ales pentru mediile de testare manual\u0103. Pentru astfel de situa\u021bii, ar fi util s\u0103 ob\u021binem resurse conforme cerin\u021belor pe care s\u0103 le utiliz\u0103m \u0219i s\u0103 nu mai pl\u0103tim c\u00e2nd nu mai sunt necesare. Mai mult, ar fi grozav s\u0103 le ob\u021binem instantaneu, f\u0103c\u00e2nd c\u00e2teva clicuri sau rul\u00e2nd c\u00e2teva scripturi. Aici intervin cloud-urile publice. S\u0103 vedem defini\u021bia:<\/p>\n<blockquote><p>\u00abCloud-ul public este definit ca servicii de computing oferite de furnizori ter\u021bi prin Internetul public, f\u0103c\u00e2ndu-le disponibile oricui dore\u0219te s\u0103 le foloseasc\u0103 sau s\u0103 le achizi\u021bioneze. Acestea pot fi gratuite sau v\u00e2ndute la cerere, permi\u021b\u00e2nd clien\u021bilor s\u0103 pl\u0103teasc\u0103 doar pentru utilizarea ciclurilor CPU, a spa\u021biului de stocare sau a l\u0103\u021bimii de band\u0103 pe care le consum\u0103\u00bb.<\/p><\/blockquote>\n<p>\n Exist\u0103 o p\u0103rere c\u0103 cloud-urile publice sunt scumpe. Dar ideea lor principal\u0103 este reducerea cheltuielilor companiei. A\u0219a cum s-a men\u021bionat anterior, cloud-urile publice permit ob\u021binerea de resurse la cerere \u0219i plata doar pentru timpul \u00een care sunt folosite. De asemenea, uneori uit\u0103m c\u0103 angaja\u021bii primesc salarii, iar speciali\u0219tii sunt, de asemenea, o resurs\u0103 scump\u0103. Este important de re\u021binut c\u0103 cloud-urile publice faciliteaz\u0103 semnificativ \u00eentre\u021binerea infrastructurii, permi\u021b\u00e2nd inginerilor s\u0103 se concentreze pe sarcini mai importante.\u00a0<\/p>\n<h3>Valoarea pentru infrastructura de automatizare<\/h3>\n<p>\n Ce resurse specifice ne sunt necesare pentru teste UI end-to-end? \u00cen principal, acestea sunt ma\u0219ini virtuale sau clustere (vom discuta despre Kubernetes \u00een sec\u021biunea urm\u0103toare) pentru a rula browsere \u0219i emulatori. Cu c\u00e2t dorim s\u0103 rul\u0103m mai multe browsere \u0219i emulatori simultan, cu at\u00e2t mai mult CPU \u0219i memorie sunt necesare, iar costurile vor cre\u0219te. Astfel, cloud-urile publice \u00een contextul automatiz\u0103rii test\u0103rii ne permit s\u0103 lans\u0103m un num\u0103r mare (100, 200, 1000...) de browsere\/emulatori la cerere, pentru a ob\u021bine rezultate ale testelor c\u00e2t mai repede \u0219i pentru a nu mai pl\u0103ti pentru astfel de resurse extrem de costisitoare.\u00a0<\/p>\n<p>Cei mai populari furnizori de cloud sunt Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP). \u00cen ghidul practic sunt prezentate exemple de utilizare a GCP, dar \u00een general nu conteaz\u0103 ce anume ve\u021bi folosi pentru sarcinile de automatizare. To\u021bi ofer\u0103 cam acela\u0219i set de func\u021bionalit\u0103\u021bi. De obicei, pentru a alege un furnizor, ghidul se concentreaz\u0103 pe \u00eentreaga infrastructur\u0103 a companiei \u0219i cerin\u021bele de afaceri, ceea ce este dincolo de subiectul acestui articol. Pentru inginerii de automatizare ar fi mai interesant s\u0103 compar\u0103m utilizarea furnizorilor de cloud cu utilizarea platformelor cloud specifice pentru teste, cum ar fi Sauce Labs, BrowserStack, BitBar \u0219i a\u0219a mai departe. A\u0219adar, s\u0103 facem asta! Din punctul meu de vedere, Sauce Labs este cea mai cunoscut\u0103 ferm\u0103 de testare \u00een cloud, a\u0219a c\u0103 am ales-o pentru compara\u021bie.\u00a0<\/p>\n<p><u>GCP vs Sauce Labs pentru scopurile de automatizare:<\/u><\/p>\n<p>S\u0103 presupunem c\u0103 trebuie s\u0103 rul\u0103m simultan 8 teste web \u0219i 8 teste Android. Pentru aceasta, vom folosi GCP \u0219i vom lansa 2 ma\u0219ini virtuale cu Selenoid. Pe prima vom ridica 8 containere cu browsere. Pe a doua \u2013 8 containere cu emulatori. Hai s\u0103 ne uit\u0103m la pre\u021buri:\u00a0\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/e4688fd2e6e5593d2e1c22fc57f59484.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Pentru a lansa un container cu Chrome, avem nevoie de <strong>n1-standard-1 <\/strong>ma\u0219in\u0103. \u00cen cazul Android, va fi <strong>n1-standard-4 <\/strong>pentru un emulator. De fapt, o metod\u0103 mai flexibil\u0103 \u0219i mai ieftin\u0103 este stabilirea unor valori personalizate specifice pentru CPU\/Memorie, dar \u00een prezent, pentru compara\u021bia cu Sauce Labs, acest aspect nu este esen\u021bial.<\/p>\n<p>Iat\u0103 tarifele pentru utilizarea Sauce Labs:<\/p>\n<p><img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/1367d2b59bbef9603b4b4be166e8d721.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPresupun c\u0103 a\u021bi observat deja diferen\u021ba, dar voi prezenta totu\u0219i un tabel cu calcule pentru sarcina noastr\u0103:<\/p>\n<p><strong>Resurse necesare<\/strong><br \/>\n<strong>Lunar<\/strong><br \/>\n<strong>Ore de lucru<\/strong><strong>(8 a.m \u2014 8 p.m)<\/strong><br \/>\n<strong>Ore de lucru<\/strong><strong>+ Preemptible<\/strong><\/p>\n<p><strong>GCP pentru Web<\/strong><br \/>\nn1-standard-1 x 8 = n1-standard-8<br \/>\n$194.18<br \/>\n23 de zile * 12h * 0.38 = 104.88$\u00a0<br \/>\n23 de zile * 12h * 0.08 = 22.08$<\/p>\n<p><strong>Sauce Labs pentru Web<\/strong><br \/>\nTest\u0103ri paralele \u00een Cloud Virtual8<br \/>\n$1.559<br \/>\n\u2014<br \/>\n\u2014<\/p>\n<p><strong>GCP pentru Android<\/strong><br \/>\nn1-standard-4 x 8: n1-standard-16<br \/>\n$776.72<br \/>\n23 de zile * 12h * 1.52 = 419.52$\u00a0<br \/>\n23 de zile * 12h * 0.32 = 88.32$<\/p>\n<p><strong>Sauce Labs pentru Android<\/strong><br \/>\nTest\u0103ri paralele \u00een Real Device Cloud 8<br \/>\n$1.999<br \/>\n\u2014<br \/>\n\u2014<\/p>\n<p>\nDup\u0103 cum se poate observa, diferen\u021ba de cost este uria\u0219\u0103, \u00een special dac\u0103 testezi doar \u00een intervalul de lucru de 12 ore. Dar po\u021bi reduce \u0219i mai mult costurile dac\u0103 folose\u0219ti ma\u0219ini preemptible. Ce sunt acestea?<\/p>\n<blockquote><p>O VM preemptible este o instan\u021b\u0103 pe care o po\u021bi crea \u0219i rula la un pre\u021b mult mai mic dec\u00e2t instan\u021bele normale. Totu\u0219i, Compute Engine ar putea s\u0103 termine (preempt) aceste instan\u021be dac\u0103 are nevoie de acces la acele resurse pentru alte sarcini. Instan\u021bele preemptible reprezint\u0103 capacitatea excesiv\u0103 a Compute Engine, a\u0219a c\u0103 disponibilitatea lor variaz\u0103 \u00een func\u021bie de utilizare.<\/p>\n<p>Dac\u0103 aplica\u021biile tale sunt tolerate la erori \u0219i pot suporta posibile preemptii ale instan\u021belor, atunci instan\u021bele preemptible pot reduce semnificativ costurile tale de Compute Engine. De exemplu, lucr\u0103rile de procesare \u00een loturi pot rula pe instan\u021be preemptible. Dac\u0103 unele dintre acele instan\u021be sunt terminate \u00een timpul proces\u0103rii, lucrarea \u00eencetine\u0219te, dar nu se opre\u0219te complet. Instan\u021bele preemptible finalizeaz\u0103 sarcinile tale de procesare \u00een loturi f\u0103r\u0103 a pune o sarcin\u0103 suplimentar\u0103 pe instan\u021bele tale existente \u0219i f\u0103r\u0103 a necesita s\u0103 pl\u0103te\u0219ti pre\u021bul \u00eentreg pentru instan\u021be normale adi\u021bionale.<\/p><\/blockquote>\n<p>\n \u0218i asta nu este tot! \u00cen realitate, sunt sigur c\u0103 nimeni nu ruleaz\u0103 teste timp de 12 ore f\u0103r\u0103 pauz\u0103. \u0218i dac\u0103 este a\u0219a, atunci po\u021bi automatiza pornirea \u0219i oprirea instan\u021belor virtuale c\u00e2nd nu sunt necesare. Timpul real de utilizare poate sc\u0103dea la 6 ore pe zi. Atunci, plata \u00een contextul sarcinii noastre ar putea sc\u0103dea la doar 11$ pe lun\u0103 pentru 8 browsere. Nu este minunat? Dar cu ma\u0219inile preemptible trebuie s\u0103 fim aten\u021bi \u0219i preg\u0103ti\u021bi pentru \u00eentreruperi \u0219i func\u021bionare instabil\u0103, de\u0219i aceste situa\u021bii pot fi prev\u0103zute \u0219i gestionate programatic. Merit\u0103!<\/p>\n<p>Dar cu siguran\u021b\u0103 nu spun 'niciodat\u0103 nu folosi\u021bi ferme de teste cloud'. Acestea au o serie de avantaje. \u00cen primul r\u00e2nd, nu este doar o ma\u0219in\u0103 virtual\u0103, ci o solu\u021bie complet\u0103 pentru automatizarea test\u0103rii, cu un set de func\u021bionalit\u0103\u021bi oferite din cutie: acces de la distan\u021b\u0103, jurnalizare, capturi de ecran, \u00eenregistrare video, diverse browsere \u0219i dispozitive mobile fizice. \u00cen multe situa\u021bii, aceasta poate fi o alternativ\u0103 extravagant\u0103 indispensabil\u0103. \u00cen special, platformele de testare sunt utile pentru automatizarea iOS, c\u00e2nd cloudurile publice pot oferi doar sisteme Linux\/Windows. Dar discu\u021bia despre iOS va avea loc \u00een articolele urm\u0103toare. Recomand \u00eentotdeauna s\u0103 analiz\u0103m situa\u021bia \u0219i s\u0103 ne baz\u0103m pe sarcini: \u00een anumite cazuri, este mai ieftin \u0219i mai eficient s\u0103 folosim clouduri publice, iar \u00een altele, platformele de testare merit\u0103 cu siguran\u021b\u0103 banii cheltui\u021bi.<\/p>\n<h3>Ilustrarea st\u0103rii curente a infrastructurii<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/f68770c9e27677b9d762af574726c90e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Linkuri pentru studiu<\/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: Pre\u021buri VM<\/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\/\">Compararea furnizorilor de cloud<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Instrumente similare:<\/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. Orchestrare<\/h2>\n<p><\/p>\n<h3>Descriere scurt\u0103 a tehnologiei<\/h3>\n<p>\n Am ve\u0219ti bune \u2013 suntem aproape de finalul articolului! \u00cen prezent, infrastructura noastr\u0103 de automatizare const\u0103 din teste web \u0219i Android, pe care le execut\u0103m prin GitLab CI \u00een paralel, folosind instrumente cu suport pentru Docker: Selenium grid \u0219i Selenoid. \u00cen plus, folosim ma\u0219ini virtuale create prin GCP pentru a ridica containere cu browsere \u0219i simulatoare. Pentru a reduce costurile, activ\u0103m aceste ma\u0219ini virtuale doar la cerere \u0219i le oprim c\u00e2nd testarea nu este efectuat\u0103. Exist\u0103 ceva ce ar putea \u00eembun\u0103t\u0103\u021bi infrastructura noastr\u0103? R\u0103spunsul este da! O \u00eent\u00e2mpin\u0103m pe Kubernetes (K8s)!<\/p>\n<p>Pentru \u00eenceput, s\u0103 analiz\u0103m cum sunt legate cuvintele orchestrare, cluster \u0219i Kubernetes. La un nivel \u00eenalt, orchestrarea este un sistem care desf\u0103\u0219oar\u0103 \u0219i gestioneaz\u0103 aplica\u021bii. Pentru automatizarea test\u0103rii, aplica\u021biile containerizabile sunt Selenium grid \u0219i Selenoid. Docker \u0219i K8s se completeaz\u0103 reciproc. Primul este folosit pentru desf\u0103\u0219urarea aplica\u021biilor, iar al doilea \u2013 pentru orchestrare. K8s este, \u00een esen\u021b\u0103, un cluster. Sarcina cluster-ului este de a utiliza VM-uri ca noduri, ceea ce permite instalarea diferitelor func\u021bionalit\u0103\u021bi, programe \u0219i servicii \u00eentr-un singur server (cluster). Dac\u0103 vreunul dintre noduri se defecteaz\u0103, alte noduri preiau, asigur\u00e2nd func\u021bionarea ne\u00eentrerupt\u0103 a aplica\u021biei noastre. \u00cen plus, K8s are func\u021bionalit\u0103\u021bi importante legate de scalare, ceea ce ne ofer\u0103 automat cantitatea optim\u0103 de resurse, baz\u00e2ndu-ne pe \u00eenc\u0103rcare \u0219i limitele stabilite.<\/p>\n<p>Adev\u0103rul este c\u0103 desf\u0103\u0219urarea manual\u0103 a Kubernetes de la zero este o sarcin\u0103 destul de complicat\u0103. Voi l\u0103sa un link c\u0103tre binecunoscutul ghid practic \u201eKubernetes The Hard Way\u201d, iar dac\u0103 sunte\u021bi interesa\u021bi, pute\u021bi practica. Dar, din fericire, exist\u0103 alternative \u0219i instrumente. Cea mai simpl\u0103 dintre ele este utilizarea Google Kubernetes Engine (GKE) din GCP, ceea ce va permite ob\u021binerea unui cluster preg\u0103tit dup\u0103 c\u00e2teva clicuri. Pentru a \u00eencepe \u00eenv\u0103\u021barea, recomand s\u0103 folosi\u021bi aceast\u0103 abordare, deoarece v\u0103 va permite s\u0103 v\u0103 concentra\u021bi pe \u00eenv\u0103\u021barea modului \u00een care s\u0103 utiliza\u021bi K8s pentru sarcinile dumneavoastr\u0103, \u00een loc s\u0103 explora\u021bi cum trebuie integrate \u00eentre ele componentele interne.\u00a0<\/p>\n<h3>Valoarea pentru infrastructura de automatizare<\/h3>\n<p>\nS\u0103 analiz\u0103m c\u00e2teva func\u021bii semnificative pe care le ofer\u0103 K8s:<\/p>\n<ul>\n<li>desf\u0103\u0219urarea aplica\u021biei: utilizarea unui cluster multi-noduri, \u00een loc de VMs;<\/li>\n<li>scalarea dinamic\u0103: reduce costurile cu resursele utilizate doar la cerere;<\/li>\n<li>auto-reparare (Self-healing): recuperarea automat\u0103 a pods (ceea ce duce la recuperarea \u0219i containerelor);<\/li>\n<li>implementarea actualiz\u0103rilor \u0219i reveniri \u00eenapoi f\u0103r\u0103 downtime: actualizarea instrumentelor, browserelor \u0219i emulatorilor nu \u00eentrerupe activitatea utilizatorilor actuali.<\/li>\n<\/ul>\n<p>\n Dar K8s nu este \u00eenc\u0103 o solu\u021bie ideal\u0103. Pentru a \u00een\u021belege toate avantajele \u0219i limit\u0103rile \u00een contextul instrumentelor discutate (Selenium grid, Selenoid), s\u0103 discut\u0103m pe scurt structura K8s. Clusterul con\u021bine dou\u0103 tipuri de Noduri: Noduri Master \u0219i Noduri Worker. Nodurile Master sunt responsabile pentru gestionarea, desf\u0103\u0219urarea \u0219i deciziile de programare. Nodurile Worker sunt cele \u00een care sunt desf\u0103\u0219urate aplica\u021biile. Nodurile con\u021bin de asemenea mediu de execu\u021bie pentru containere. \u00cen cazul nostru, acesta este Docker, care se ocup\u0103 de opera\u021biile legate de containere. Dar exist\u0103 \u0219i solu\u021bii alternative, cum ar fi<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containerd\/containerd\"> containerd<\/a><\/noindex>. Este important s\u0103 \u00een\u021belegem c\u0103 scalarea sau auto-repararea nu se refer\u0103 direct la containere. Acest lucru se realizeaz\u0103 prin ad\u0103ugarea\/\u00eendep\u0103rtarea num\u0103rului de pods, care la r\u00e2ndul lor con\u021bin containere (de obicei un container pe pod, dar \u00een func\u021bie de sarcin\u0103 poate fi \u0219i mai mult). Ierarhia la nivel \u00eenalt reprezint\u0103 nodurile worker, \u00een interiorul c\u0103rora se afl\u0103 pods, \u00een interiorul c\u0103rora sunt ridicate containere.<\/p>\n<p>Func\u021bia de scalare este esen\u021bial\u0103 \u0219i poate fi aplicat\u0103 at\u00e2t la nodurile din pool-ul de noduri al cluster-ului, c\u00e2t \u0219i la pod-uri \u00een interiorul unui nod. Exist\u0103 dou\u0103 tipuri de scalare care se refer\u0103 at\u00e2t la noduri, c\u00e2t \u0219i la pod-uri. Primul tip \u2013 scalarea orizontal\u0103 \u2013 se realizeaz\u0103 prin cre\u0219terea num\u0103rului de noduri\/pod-uri. Acest tip este preferabil. Al doilea tip, respectiv, scalarea vertical\u0103. Scalarea se face prin cre\u0219terea dimensiunilor nodurilor\/pod-urilor, nu prin num\u0103rul acestora.<\/p>\n<p>Acum s\u0103 analiz\u0103m instrumentele noastre \u00een contextul termenilor men\u021biona\u021bi anterior.<\/p>\n<p><u>Selenium grid<\/u><\/p>\n<p>Dup\u0103 cum s-a men\u021bionat anterior, Selenium grid este un instrument foarte popular, \u0219i nu este o surpriz\u0103 c\u0103 a fost containerizat. Prin urmare, nu este de mirare c\u0103 Selenium grid poate fi desf\u0103\u0219urat \u00een K8s. Un exemplu de cum se face acest lucru poate fi g\u0103sit \u00een depozitul oficial K8s. A\u0219a cum este obi\u0219nuin\u021ba, voi ad\u0103uga linkuri la sf\u00e2r\u0219itul sec\u021biunii. \u00cen plus, \u00een ghidul practic este explicat cum se face acest lucru prin Terraform. De asemenea, exist\u0103 instruc\u021biuni despre cum s\u0103 scal\u0103m num\u0103rul de pod-uri care con\u021bin containere cu browsere. \u00cens\u0103, func\u021bia de scalare automat\u0103 \u00een contextul K8s este \u00eenc\u0103 o sarcin\u0103 care nu este pe deplin clar\u0103. C\u00e2nd am \u00eenceput studiile, nu am g\u0103sit niciun ghid practic sau recomand\u0103ri. Dup\u0103 c\u00e2teva cercet\u0103ri \u0219i experimente cu suportul echipei DevOps, noi am ales abordarea de a ridica containerele cu browserele necesare \u00eentr-un singur pod, care se afl\u0103 \u00eentr-un singur nod lucr\u0103tor. Aceast\u0103 metod\u0103 ne permite s\u0103 aplic\u0103m strategia de scalare orizontal\u0103 a nodurilor prin cre\u0219terea num\u0103rului acestora. Sper c\u0103 \u00een viitor, situa\u021bia se va schimba \u0219i vom vedea din ce \u00een ce mai multe descrieri ale celor mai bune abord\u0103ri \u0219i solu\u021bii gata, mai ales dup\u0103 lansarea Selenium grid 4 cu arhitectura intern\u0103 modificat\u0103.<\/p>\n<p><u>Selenoid<\/u>:<\/p>\n<p>\u00cen prezent, desf\u0103\u0219urarea Selenoid \u00een K8s este cea mai mare dezam\u0103gire. Ele nu sunt compatibile. Teoretic, putem ridica un container Selenoid \u00een interiorul unui pod, dar c\u00e2nd Selenoid \u00eencepe s\u0103 ruleze containere cu browsere, acestea vor r\u0103m\u00e2ne \u00een continuare \u00een interiorul aceluia\u0219i pod. Acest lucru face scalarea imposibil\u0103 \u0219i, ca rezultat, func\u021bionarea Selenoid \u00een cadrul cluster-ului nu va diferi de func\u021bionarea sa \u00eentr-o ma\u0219in\u0103 virtual\u0103. Sf\u00e2r\u0219itul pove\u0219tii.<\/p>\n<p><u>Moon<\/u>:<\/p>\n<p>\u0218tiind acest punct slab \u00een utilizarea Selenoid, dezvoltatorii au lansat un instrument mai puternic, pe care l-au numit Moon. Acest instrument a fost ini\u021bial g\u00e2ndit pentru a lucra cu Kubernetes \u0219i, ca rezultat, se poate \u0219i trebuie folosit\u0103 func\u021bia de autoscalare. Mai mult, a\u0219 spune c\u0103 \u00een prezent este <u>singura<\/u> instrumentul din lumea Selenium, care are suport pentru cluster K8s nativ din cutie (<i>nu mai este, vezi instrumentul urm\u0103tor <\/i>). Caracteristica principal\u0103 a Moon, care asigur\u0103 acest suport, este:\u00a0<\/p>\n<blockquote><p>Complet f\u0103r\u0103 stare. Selenoid stocheaz\u0103 \u00een memorie informa\u021bii despre sesiunile de browser care ruleaz\u0103 \u00een prezent. Dac\u0103 dintr-un motiv anume procesul s\u0103u se blocheaz\u0103 \u2014 atunci toate sesiunile active sunt pierdute. Moon, \u00een schimb, nu are o stare intern\u0103 \u0219i poate fi replicat \u00eentre centrele de date. Sesiunile de browser r\u0103m\u00e2n active chiar \u0219i dac\u0103 una sau mai multe replici cedeaz\u0103.<\/p><\/blockquote>\n<p>Deci, Moon este o solu\u021bie fantastic\u0103, dar cu o problem\u0103: nu este gratuit. Pre\u021bul depinde de num\u0103rul de sesiuni. Po\u021bi rula gratuit doar 0-4 sesiuni, ceea ce nu este foarte util. Dar, \u00eencep\u00e2nd cu sesiunea a cincea, va trebui s\u0103 pl\u0103te\u0219ti 5$ pentru fiecare. Situa\u021bia poate varia de la o companie la alta, dar \u00een cazul nostru utilizarea Moon este f\u0103r\u0103 sens. A\u0219a cum am descris mai sus, putem rula VMs cu Selenium Grid la cerere sau putem cre\u0219te num\u0103rul de noduri \u00een cluster. Aproximativ pentru un pipeline rul\u0103m 500 de browsere \u0219i oprim toate resursele dup\u0103 finalizarea testelor. Dac\u0103 am folosi Moon, ar trebui s\u0103 pl\u0103tim 500 x 5 = 2500 $ pe lun\u0103, indiferent c\u00e2t de des rul\u0103m testele. \u0218i din nou, nu spun \u201enu folosi\u021bi Moon\u201d. Pentru nevoile dumneavoastr\u0103, ar putea fi o solu\u021bie indispensabil\u0103, de exemplu, dac\u0103 ave\u021bi \u00een organiza\u021bie multe proiecte\/echipe \u0219i ave\u021bi nevoie de un cluster comun imens pentru to\u021bi. Ca de obicei, las un link la final \u0219i recomand s\u0103 face\u021bi toate calculele necesare \u00een contextul sarcinii dumneavoastr\u0103.<\/p>\n<p><u>Callisto<\/u>: (<i><strong>Aten\u021bie! Acest lucru nu se reg\u0103se\u0219te \u00een articolul original \u0219i este con\u021binut doar \u00een traducerea \u00een rus\u0103.<\/strong><\/i>)<\/p>\n<p>A\u0219a cum am spus, Selenium este un instrument foarte popular, iar domeniul IT evolueaz\u0103 foarte rapid. \u00cen timp ce lucram la traducere, pe internet a ap\u0103rut un nou instrument promi\u021b\u0103tor numit Callisto (salut Cypress \u0219i al\u021bi uciga\u0219i ai Selenium). Acesta func\u021bioneaz\u0103 nativ cu K8s \u0219i permite rularea containerelor Selenoid \u00een pods, distribuite pe Nodes. Totul func\u021bioneaz\u0103 imediat din cutie, inclusiv scalarea automat\u0103. Fantastic, dar trebuie testat. Am reu\u0219it deja s\u0103 implementez acest instrument \u0219i s\u0103 fac c\u00e2teva experimente. Dar este prea devreme pentru concluzii; dup\u0103 ce ob\u021bin rezultatele pe termen lung, este posibil s\u0103 fac un review \u00een articolele urm\u0103toare. P\u00e2n\u0103 atunci, las doar linkuri pentru cercet\u0103ri autonome.\u00a0\u00a0<\/p>\n<h3>Ilustrarea st\u0103rii curente a infrastructurii<\/p>\n<h3><img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/c9c2ffd21df2a261947df809dcec7108.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Linkuri pentru studiu<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/setup\/\">Kubernetes: configurare<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\">Kubernetes: pe calea dificil\u0103<\/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: motorul Kubernetes<\/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\">Cartea Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MmdGyqNqs9w\">Automatizare distribuit\u0103 folosind 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>Instrumente similare<\/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. Infrastructur\u0103 ca \u0219i cod (IaC)<\/h2>\n<p><\/p>\n<h3>Descriere scurt\u0103 a tehnologiei<\/h3>\n<p>\n \u0218i iat\u0103 c\u0103 am ajuns la ultima sec\u021biune. De obicei, aceast\u0103 tehnologie \u0219i sarcinile asociate nu intr\u0103 \u00een sfera de responsabilitate a inginerilor de automatizare. \u0218i exist\u0103 motive \u00eentemeiate pentru asta. \u00cen primul r\u00e2nd, \u00een multe organiza\u021bii, problemele de infrastructur\u0103 sunt controlate de departamentul DevOps, iar echipele de dezvoltare nu se \u00eengrijesc prea mult de ceea ce face ca pipeline-ul s\u0103 func\u021bioneze \u0219i cum trebuie \u00eentre\u021binute toate cele legate de acesta. \u00cen al doilea r\u00e2nd, s\u0103 fim sinceri, practica \u201eInfrastructur\u0103 ca \u0219i cod (IaC)\u201d \u00eenc\u0103 nu este aplicat\u0103 \u00een multe companii. Dar, f\u0103r\u0103 \u00eendoial\u0103, a devenit o tendin\u021b\u0103 popular\u0103 \u0219i este important s\u0103 ne str\u0103duim s\u0103 fim implica\u021bi \u00een procesele, abord\u0103rile \u0219i instrumentele asociate cu aceasta. Sau, cel pu\u021bin, s\u0103 fim la curent cu evenimentele.<\/p>\n<p>S\u0103 \u00eencepem cu motiva\u021bia pentru utilizarea acestui abordare. Am discutat deja c\u0103, pentru a rula teste \u00een GitlabCI, avem nevoie de cel pu\u021bin resurse pentru a lansa Gitlab Runner. Iar pentru a rula containere cu browsere\/emulatoare, trebuie s\u0103 rezerv\u0103m o VM sau un cluster. Pe l\u00e2ng\u0103 resursele pentru testare, avem nevoie de un num\u0103r semnificativ de capacit\u0103\u021bi pentru a sus\u021bine mediile de dezvoltare, staging, production, ceea ce include de asemenea baze de date, program\u0103ri automate, configura\u021bii de re\u021bea, un load balancer, drepturi de utilizator \u0219i a\u0219a mai departe. Problema cheie const\u0103 \u00een eforturile necesare pentru a sus\u021bine toate acestea. Exist\u0103 mai multe moduri \u00een care putem face modific\u0103ri \u0219i lansa actualiz\u0103ri. De exemplu, \u00een contextul GCP, putem folosi consola UI \u00een browser \u0219i efectua toate ac\u021biunile, f\u0103c\u00e2nd clic pe butoane. O alternativ\u0103 poate fi utilizarea apelurilor API pentru a interac\u021biona cu entit\u0103\u021bile cloud sau aplicarea utilitarului de linie de comand\u0103 gcloud pentru a efectua manipul\u0103rile necesare. Dar, \u00eentr-o situa\u021bie de num\u0103r mare de entit\u0103\u021bi \u0219i elemente infrastructurale, devine greu sau chiar imposibil s\u0103 execut\u0103m toate opera\u021biunile manual. Mai mult dec\u00e2t at\u00e2t, toate aceste ac\u021biuni manuale sunt necontrolate. Nu putem s\u0103 le trimitem la review \u00eenainte de execu\u021bie, s\u0103 folosim un sistem de control al versiunilor \u0219i s\u0103 anul\u0103m rapid modific\u0103rile care au dus la incident. Pentru a rezolva astfel de probleme, inginerii au creat \u0219i creeaz\u0103 scripturi automate bash\/shell, care nu sunt cu mult mai bune dec\u00e2t metodele anterioare, deoarece nu sunt chiar at\u00e2t de u\u0219or de citit, \u00een\u021beles, \u00eentre\u021binut \u0219i modificat \u00een stil procedural.<\/p>\n<p>\u00cen acest articol \u0219i ghid practic, folosesc 2 unelte care se refer\u0103 la practica IaC. Acestea sunt Terraform \u0219i Ansible. Unii cred c\u0103 nu are sens s\u0103 le folosim simultan, deoarece func\u021bionalit\u0103\u021bile lor sunt similare \u0219i sunt interschimbabile. Dar, de fapt, sarcinile pe care le au ini\u021bial sunt complet diferite. Faptul c\u0103 aceste unelte ar trebui s\u0103 se completeze reciproc a fost confirmat \u00eentr-o prezentare comun\u0103 de c\u0103tre dezvoltatori care reprezint\u0103 companiile HashiCorp \u0219i RedHat. Diferen\u021ba conceptual\u0103 const\u0103 \u00een faptul c\u0103 Terraform este un instrument de provisioning pentru gestionarea serverelor \u00een sine. \u00cen timp ce Ansible este un instrument de management al configura\u021biilor, av\u00e2nd ca sarcin\u0103 instalarea, configurarea \u0219i gestionarea software-ului pe aceste servere.<\/p>\n<p>O alt\u0103 caracteristic\u0103 distinctiv\u0103 important\u0103 a acestor unelte este stilul de scriere a codului. Spre deosebire de bash \u0219i Ansible, Terraform folose\u0219te un stil declarativ, bazat pe descrierea st\u0103rii finale dorite, care trebuie atins\u0103 \u00een urma execu\u021biei. De exemplu, dac\u0103 inten\u021bion\u0103m s\u0103 cre\u0103m 10 VMs \u0219i s\u0103 aplic\u0103m modific\u0103rile prin Terraform, atunci vom ob\u021bine 10 VMs. Dac\u0103 aplic\u0103m din nou scriptul, nu se va \u00eent\u00e2mpla nimic, deoarece avem deja 10 VMs, iar Terraform \u0219tie despre acest lucru, deoarece stocheaz\u0103 starea curent\u0103 a infrastructurii \u00een fi\u0219ierul de stare. Pe de alt\u0103 parte, Ansible folose\u0219te o abordare procedural\u0103 \u0219i, dac\u0103 \u00eei cerem s\u0103 creeze 10 VMs, atunci la prima execu\u021bie vom ob\u021bine 10 VMs, similar cu Terraform. Dar dup\u0103 o re-execu\u021bie, vom avea deja 20 VMs. Aceasta este o distinc\u021bie important\u0103. \u00cen stilul procedural nu stoc\u0103m starea curent\u0103 \u0219i pur \u0219i simplu descriem secven\u021ba de pa\u0219i care trebuie urma\u021bi. Desigur, putem gestiona diferite situa\u021bii, putem ad\u0103uga c\u00e2teva verific\u0103ri privind existen\u021ba resurselor \u0219i starea curent\u0103, dar nu are sens s\u0103 ne pierdem timpul \u0219i s\u0103 ne str\u0103duim s\u0103 control\u0103m aceast\u0103 logic\u0103. \u00cen plus, asta cre\u0219te riscul de a comite gre\u0219eli.\u00a0<\/p>\n<p>Sintez\u00e2nd tot ce s-a spus mai sus, putem concluziona c\u0103 pentru provisioning-ul serverelor, instrumentul mai potrivit este Terraform \u0219i notarea declarativ\u0103. Pe de alt\u0103 parte, gestionarea configura\u021biilor ar trebui delegat\u0103 lui Ansible. Dup\u0103 ce am \u00een\u021beles acest lucru, s\u0103 ne uit\u0103m la exemplele de utilizare \u00een contextul automatiz\u0103rii.<\/p>\n<h3>Valoarea pentru infrastructura de automatizare<\/h3>\n<p>\n Este important s\u0103 \u00een\u021belegem c\u0103 infrastructura de automatizare a test\u0103rii trebuie considerat\u0103 ca parte a \u00eentregii infrastructuri a companiei. Asta \u00eenseamn\u0103 c\u0103 toate practicile IaC trebuie aplicate global resurselor \u00eentregii organiza\u021bii. Cine este responsabil pentru asta depinde de procesele voastre. Echipa DevOps este mai experimentat\u0103 \u00een aceste aspecte, deoarece vedem \u00eentreaga situa\u021bie de ansamblu. Cu toate acestea, inginerii QA sunt mai implica\u021bi \u00een procesul de construc\u021bie a automatiz\u0103rii \u0219i structura pipeline-ului, ceea ce le permite s\u0103 observe mai bine toate modific\u0103rile necesare \u0219i oportunit\u0103\u021bile de \u00eembun\u0103t\u0103\u021bire. Cel mai bun mod este s\u0103 colaboreze, s\u0103 \u00eemp\u0103rt\u0103\u0219easc\u0103 cuno\u0219tin\u021be \u0219i idei pentru a atinge rezultatul dorit.\u00a0<\/p>\n<p>Iat\u0103 c\u00e2teva exemple de utilizare a Terraform \u0219i Ansible \u00een contextul automatiz\u0103rii test\u0103rii \u0219i instrumentelor pe care le-am discutat anterior:<\/p>\n<p>1. S\u0103 descriem prin Terraform caracteristicile \u0219i parametrii necesari pentru VMs \u0219i clustere.<\/p>\n<p>2. S\u0103 instal\u0103m cu ajutorul Ansible instrumentele necesare pentru testare: docker, Selenoid, Selenium Grid \u0219i s\u0103 \u00eenc\u0103rc\u0103m versiunile corespunz\u0103toare de browsere\/emulatoare.<\/p>\n<p>3. S\u0103 descriem prin Terraform caracteristicile VM \u00een care va fi rulat GitLab Runner.<\/p>\n<p>4. S\u0103 instal\u0103m cu ajutorul Ansible GitLab Runner \u0219i instrumentele aferente necesare, s\u0103 set\u0103m configura\u021biile \u0219i set\u0103rile.<\/p>\n<h3>Ilustrarea st\u0103rii curente a infrastructurii<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/5d793a800a4ef62e181e6cb3a3f0544e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Linkuri pentru studiu:<\/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 \u0219i Terraform mai bine \u00eempreun\u0103<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/blog.gruntwork.io\/a-comprehensive-guide-to-terraform-b3d32832baca\">Un Ghid Cuprinz\u0103tor pentru 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\">De ce folosim Terraform \u0219i nu Chef, Puppet, Ansible, SaltStack sau 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>Instrumente similare<\/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>S\u0103 tragem concluzii!<\/h2>\n<p><\/p>\n<p><strong>Pas<\/strong><br \/>\n<strong>Tehnologie<\/strong><br \/>\n<strong>Instrumente<\/strong><br \/>\n<strong>Valoarea pentru infrastructura de automatizare<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nExecutare local\u0103<br \/>\nNode.js, Selenium, Appium<\/p>\n<ul>\n<li>Cele mai populare instrumente pentru web \u0219i mobile<\/li>\n<li>Suport pentru multe limbi \u0219i platforme (inclusiv Node.js)<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>2<\/strong><br \/>\nSisteme de control al versiunilor\u00a0<br \/>\nGit<\/p>\n<ul>\n<li>Avantaje similare cu codul de dezvoltare<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>3<\/strong><br \/>\nContainerizare<br \/>\nDocker, Selenium grid, Selenoid (Web, Android)<\/p>\n<ul>\n<li>Executarea testelor \u00een paralel<\/li>\n<li>Mediile izolate<\/li>\n<li>Actualiz\u0103ri simple \u0219i flexibile ale versiunilor<\/li>\n<li>Oprirea dinamic\u0103 a resurselor neutilizate<\/li>\n<li>U\u0219or de configurat<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>4<\/strong><br \/>\nCI \/ CD<br \/>\nGitlab CI<\/p>\n<ul>\n<li>Testele fac parte din pipeline<\/li>\n<li>Feedback rapid<\/li>\n<li>Vizibilitate pentru \u00eentreaga companie \/ echip\u0103<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>5<\/strong><br \/>\nPlatforme cloud<br \/>\nGoogle Cloud Platform<\/p>\n<ul>\n<li>Resurse la cerere (pl\u0103tim doar c\u00e2nd sunt necesare)<\/li>\n<li>U\u0219or de gestionat \u0219i actualizat<\/li>\n<li>Vizibilitate \u0219i control asupra tuturor resurselor<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>6<\/strong><br \/>\nOrchestrare<br \/>\nKubernetes<br \/>\n\u00cen contextul containerelor cu browsere\/emulatoare \u00een interiorul pods:<\/p>\n<ul>\n<li>Scalare \/ auto-scare<\/li>\n<li>Auto-reparare<\/li>\n<li>Actualiz\u0103ri \u0219i reveniri f\u0103r\u0103 \u00eentreruperi<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>7<\/strong><br \/>\nInfrastructur\u0103 ca cod (IaC)<br \/>\nTerraform, Ansible<\/p>\n<ul>\n<li>Avantaje similare cu infrastructura de dezvoltare<\/li>\n<li>Toate avantajele version\u0103rii codului<\/li>\n<li>Modific\u0103ri u\u0219or de realizat \u0219i de \u00eentre\u021binut<\/li>\n<li>Complet automatizat<\/li>\n<\/ul>\n<p><\/p>\n<h2>Diagrama h\u0103r\u021bilor mentale: evolu\u021bia infrastructurii<\/h2>\n<p>\npasul 1: Local<br \/>\n<img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/507908ba097a603adc3b301ab2f94a8d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>pasul 2: VCS<br \/>\n<img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/71c5170293d98375d8ab86d05eb47a33.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>pasul 3: Contenorizare\u00a0<br \/>\n<img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/da33442a592851e07c3f5800c3ee9ead.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>pasul 4: CI\/CD\u00a0<br \/>\n<img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/900f18b45124412a1ad00d3901efb40e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>pasul 5: Platforme Cloud<br \/>\n<img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/840e5063141ac8787612e2fc46b5d690.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>pasul 6: Orchestrare<br \/>\n<img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/4651b552efdc893695cbf359c6992e9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>pasul 7: IaC<br \/>\n<img decoding=\"async\" alt=\"Instrumentele DevOps nu sunt doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero\" src=\"\/wp-content\/uploads\/2020\/04\/e784130f570260fc6c3aa263916e3db5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Ce urmeaz\u0103?<\/h2>\n<p>\nDeci, aceasta este sf\u00e2r\u0219itul articolului. Dar, \u00een concluzie, a\u0219 dori s\u0103 stabilim c\u00e2teva \u00een\u021belegeri cu voi.<\/p>\n<p><u>Din partea voastr\u0103<\/u><br \/>\n A\u0219a cum am spus la \u00eenceput, mi-ar pl\u0103cea ca articolul s\u0103 fie de folos \u0219i s\u0103 v\u0103 ajute s\u0103 aplica\u021bi cuno\u0219tin\u021bele ob\u021binute \u00een activitatea real\u0103. Revin cu<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> link-ul c\u0103tre ghidul practic<\/a><\/noindex>.<\/p>\n<p>Dar chiar \u0219i dup\u0103 asta, nu v\u0103 opri\u021bi, exersa\u021bi, studia\u021bi link-urile \u0219i c\u0103r\u021bile relevante, afla\u021bi cum func\u021bioneaz\u0103 la voi \u00een companie, g\u0103si\u021bi locuri care pot fi \u00eembun\u0103t\u0103\u021bite \u0219i participa\u021bi la aceasta. Mult succes!<\/p>\n<p><u>Din partea mea<\/u><\/p>\n<p>Din titlu, este evident c\u0103 aceasta a fost doar prima parte. De\u0219i a ie\u0219it destul de lung\u0103, \u00eenc\u0103 nu sunt abordate teme importante. \u00cen partea a doua, inten\u021bionez s\u0103 discut infrastructura de automatizare \u00een contextul IOS. Din cauza restric\u021biilor Apple legate de rularea simulatoarelor IOS doar pe sistemele macOS, setul nostru de solu\u021bii este restr\u00e2ns. De exemplu, nu avem posibilitatea de a folosi Docker pentru a rula simulatorul sau cloud-uri publice pentru a lansa ma\u0219ini virtuale. Dar aceasta nu \u00eenseamn\u0103 c\u0103 nu exist\u0103 alte alternative. Voi \u00eencerca s\u0103 v\u0103 men\u021bin la curent cu solu\u021biile de v\u00e2rf \u0219i instrumentele moderne!<\/p>\n<p>De asemenea, nu am men\u021bionat teme destul de ample legate de monitorizare. \u00cen partea 3, inten\u021bionez s\u0103 discut cele mai populare instrumente pentru monitorizarea infrastructurii, precum \u0219i ce date \u0219i metrici ar trebui s\u0103 le lu\u0103m \u00een considerare.<\/p>\n<p>\u0218i, \u00een cele din urm\u0103. \u00cen viitor, inten\u021bionez s\u0103 lansez un curs video despre construirea infrastructurii de testare \u0219i instrumentele sale populare. \u00cen prezent, exist\u0103 o mul\u021bime de cursuri \u0219i prelegeri online despre DevOps, dar toate materialele sunt prezentate \u00een contextul dezvolt\u0103rii, nu al automatiz\u0103rii test\u0103rii. \u00cen aceast\u0103 privin\u021b\u0103, am nevoie foarte mult de feedback, dac\u0103 un astfel de curs ar fi interesant \u0219i valoros pentru comunitatea testerilor \u0219i automatizatorilor. V\u0103 mul\u021bumesc anticipat!<\/h3>\n<\/h3>\n<p>Sursa: <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.2.1 - 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\/ro\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Instrumente DevOps nu doar pentru DevOps. Procesul de construire a infrastructurii de automatizare a test\u0103rii de la zero | ProHoster","description":"Partea 1: Web \/ Android Not\u0103: acest articol este o traducere \u00een limba rom\u00e2n\u0103 a articolului original","canonical_url":"https:\/\/prohoster.info\/ro\/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":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/78676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=78676"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/78676\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/78677"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=78676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=78676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=78676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}