{"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\/it\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","title":{"rendered":"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un'infrastruttura di automazione dei test da zero.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Parte 1: Web \/ Android<\/h1>\n<p>\n <u>Nota<\/u>: <i>questo articolo \u00e8 una traduzione in italiano dell'articolo originale\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>\u00abGli strumenti DevOps non sono solo per DevOps. Costruire un'infrastruttura di automazione dei test da zero\u00bb.<\/i><\/a><\/noindex><i> Tuttavia, tutte le illustrazioni, i link, le citazioni e i termini sono mantenuti nella lingua originale, per evitare distorsioni del significato nella traduzione in italiano. Ti auguro una buona lettura!<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da 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 Attualmente, la professione di DevOps \u00e8 tra le pi\u00f9 richieste nell'industria IT. Se visiti i siti di ricerca di lavoro pi\u00f9 popolari e imposti il filtro per stipendi, noterai che le offerte di lavoro legate a DevOps sono in cima alla lista. Tuttavia, \u00e8 importante comprendere che questo si riferisce principalmente alla posizione di 'Senior', il che implica che il candidato possiede un alto livello di competenze, conoscenza delle tecnologie e degli strumenti. Ci\u00f2 implica anche un alto grado di responsabilit\u00e0 legato al funzionamento senza interruzioni della produzione. Tuttavia, abbiamo cominciato a dimenticare cosa significhi DevOps. Originariamente non era una persona specifica o un dipartimento. Se cerchiamo definizioni di questo termine, troveremo molti sostantivi belli e corretti, come metodologia, pratiche, filosofia culturale, gruppo di concetti e cos\u00ec via.<\/p>\n<p>La mia specializzazione \u00e8 ingegnere di automazione dei test (QA automation engineer), ma credo che non debba essere legata solo alla scrittura di test automatici o allo sviluppo dell'architettura di un framework di test. Nel 2020, la conoscenza dell'infrastruttura di automazione \u00e8 diventata fondamentale. Questo permette di organizzare autonomamente il processo di automazione, dalla esecuzione dei test fino alla condivisione dei risultati con tutte le parti interessate, in base agli obiettivi prefissati. Di conseguenza, le competenze DevOps diventano un fattore necessario per svolgere tale lavoro. E va tutto bene, ma purtroppo c'\u00e8 un problema (<i>spoiler: questo articolo cerca di semplificare questo problema<\/i>). Consiste nel fatto che DevOps \u00e8 complicato. E questo \u00e8 ovvio, poich\u00e9 le aziende non pagano bene per ci\u00f2 che \u00e8 facile da fare... Nel mondo DevOps ci sono un gran numero di strumenti, termini e pratiche da padroneggiare. Questo \u00e8 particolarmente difficile all'inizio della carriera e dipende dall'esperienza tecnica accumulata.<\/p>\n<p><img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/20712bd4acf881d5346b87f5a2b359d2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nFonte: <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>Qui, probabilmente, concludiamo la parte introduttiva e ci concentreremo sull'obiettivo di questo articolo.\u00a0<\/p>\n<h3>Di cosa parla questo articolo<\/h3>\n<p>\nIn questo articolo intendo condividere la mia esperienza nella costruzione di un'infrastruttura di automazione dei test. Su Internet si possono trovare molte fonti di informazioni su vari strumenti e su come usarli, ma vorrei considerarli esclusivamente nel contesto dell'automazione. Penso che molti ingegneri di automazione possano riconoscere la situazione in cui i test sviluppati vengono eseguiti solo da loro e non ci si prende cura della loro manutenzione. Di conseguenza, i test diventano obsoleti e si finisce per perdere tempo per aggiornarli. Anche all'inizio della carriera, questo pu\u00f2 rappresentare una sfida difficile: decidere quali strumenti debbano aiutare a risolvere questo problema, come sceglierli, configurarli e mantenerli. Alcuni tester si rivolgono a DevOps (persone) e, a essere onesti, questo approccio funziona. In molti casi, potrebbe essere l'unica opzione, dato che non abbiamo visibilit\u00e0 su tutte le dipendenze. Ma, come sappiamo, i DevOps sono ragazzi molto occupati, poich\u00e9 devono occuparsi dell'infrastruttura dell'intera azienda, del deployment, del monitoraggio, dei microservizi e di altri compiti simili a seconda dell'organizzazione\/team. Come spesso accade, l'automazione non \u00e8 una priorit\u00e0. In tal caso, dobbiamo cercare di fare tutto il possibile da parte nostra, dall'inizio alla fine. Questo ridurr\u00e0 le dipendenze, accelerer\u00e0 il flusso di lavoro, migliorer\u00e0 le nostre competenze e ci consentir\u00e0 di avere una visione pi\u00f9 ampia della situazione.<\/p>\n<p>Nell'articolo sono presentati gli strumenti pi\u00f9 richiesti e popolari e viene mostrato come usarli per costruire passo dopo passo un'infrastruttura di automazione. Ogni gruppo \u00e8 rappresentato da strumenti che sono stati testati a livello personale. Ma questo non significa che tu debba usare gli stessi. Gli strumenti in s\u00e9 non sono importanti, appaiono e diventano obsoleti. Il nostro compito ingegneristico \u00e8 comprendere i principi di base: perch\u00e9 abbiamo bisogno di questo gruppo di strumenti e quali compiti possiamo risolvere con il loro aiuto. Pertanto, alla fine di ogni sezione lascio link a strumenti simili che potrebbero essere utilizzati nella tua organizzazione.<\/p>\n<h3>Cosa non c'\u00e8 in questo articolo<\/h3>\n<p>\nRipeto ancora una volta che l'articolo non riguarda strumenti specifici, quindi non ci saranno inserimenti di codice dalla documentazione e descrizioni di comandi specifici. Tuttavia, alla fine di ogni sezione lascer\u00f2 dei link per un approfondimento.<\/p>\n<p>Questo \u00e8 stato fatto per il motivo che:\u00a0<\/p>\n<ul>\n<li>questo materiale \u00e8 molto facile da trovare in diverse fonti (documentazione, libri, corsi video);<\/li>\n<li>se iniziamo ad approfondire, dovremmo scrivere 10, 20 o 30 parti di questo articolo (mentre i piani prevedono 2-3);<\/li>\n<li>non voglio semplicemente farvi perdere tempo, dato che forse volete usare altri strumenti per raggiungere gli stessi obiettivi.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Pratica<\/h3>\n<p>\nVorrei davvero che questo materiale fosse utile per ogni lettore e non fosse semplicemente letto e dimenticato. In ogni studio, la pratica \u00e8 una componente molto importante. A tal fine, ho preparato<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> un repository GitHub con una guida passo passo su come fare tutto da zero<\/a><\/noindex>. Avrete anche un compito a casa, per assicurarvi di non aver copiato le righe dei comandi senza pensarci. <\/p>\n<h3>Piano<\/h3>\n<p><\/p>\n<p><strong>Step<\/strong><br \/>\n<strong>Technology<\/strong><br \/>\n<strong>Strumenti<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nEsecuzione locale (preparare test demo web\/android e eseguirli localmente)\u00a0<br \/>\nNode.js, Selenium, Appium<\/p>\n<p><strong>2<\/strong><br \/>\nSistemi di controllo versione\u00a0<br \/>\nGit<\/p>\n<p><strong>3<\/strong><br \/>\nContainerizzazione<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 \/>\nPiattaforme cloud<br \/>\nGoogle Cloud Platform<\/p>\n<p><strong>6<\/strong><br \/>\nOrchestrazione<br \/>\nKubernetes<\/p>\n<p><strong>7<\/strong><br \/>\nInfrastructure as a code (IaC)<br \/>\nTerraform, Ansible<\/p>\n<p><\/p>\n<h3>Struttura di ogni sezione<\/h3>\n<p>\nPer mantenere la narrazione in modo visivo, ogni sezione \u00e8 descritta secondo il seguente piano:<\/p>\n<ul>\n<li>breve descrizione della tecnologia,<\/li>\n<li>valore per l'infrastruttura di automazione,<\/li>\n<li>illustrazione dello stato attuale dell'infrastruttura,<\/li>\n<li>link per lo studio,<\/li>\n<li>strumenti simili.<\/li>\n<\/ul>\n<p><\/p>\n<h2>1. Esecuzione locale dei test<\/h2>\n<p><\/p>\n<h3>Breve descrizione della tecnologia<\/h3>\n<p>\nQuesto \u00e8 solo un passaggio preparatorio per eseguire test dimostrativi localmente e per verificare che passino con successo. Nella parte pratica si utilizza Node.js, ma il linguaggio di programmazione e la piattaforma non sono importanti e possono essere utilizzati quelli in uso nella vostra azienda.\u00a0<\/p>\n<p>Tuttavia, come strumenti di automazione, consiglio di utilizzare Selenium WebDriver per le piattaforme web e Appium per le piattaforme Android, dato che nei passaggi successivi utilizzeremo immagini Docker progettate per lavorare specificamente con questi strumenti. Inoltre, riferendosi alle richieste nei posti di lavoro, questi strumenti sono i pi\u00f9 richiesti nel mercato.<\/p>\n<p>Come avrete notato, stiamo considerando solo test web e Android. Sfortunatamente, IOS \u00e8 una storia completamente differente (grazie Apple). Ho in programma di mostrare soluzioni e pratiche relative a IOS nei prossimi capitoli.<\/p>\n<h3>Valore per l'infrastruttura di automazione<\/h3>\n<p>\nDal punto di vista dell'infrastruttura, l'esecuzione locale non porta alcun valore. Si verifica solo che i test funzionino sulla macchina locale nei browser e simulatori locali. Ma in ogni caso, \u00e8 un punto di partenza necessario.<\/p>\n<h3>Illustrazione dello stato attuale dell'infrastruttura<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/504f28744e29938f66be41c32d9a7dc6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Link per lo studio<\/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\">Esempi GitHub di Selenium JS<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/appium\/appium\/tree\/master\/sample-code\/javascript-wd\">Esempi GitHub di Appium JS<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Strumenti simili<\/h3>\n<p><\/p>\n<ul>\n<li>qualsiasi linguaggio di programmazione che preferite in combinazione con i test Selenium\/Appium;<\/li>\n<li>qualunque test;<\/li>\n<li>qualsiasi test runner.<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Sistemi di controllo delle versioni (Git)<\/h2>\n<p><\/p>\n<h3>Breve descrizione della tecnologia<\/h3>\n<p>\n Non sar\u00e0 una grande rivelazione se dico che il sistema di controllo versione \u00e8 una parte estremamente importante dello sviluppo sia in team che individualmente. Basandosi su diverse fonti, si pu\u00f2 affermare con certezza che Git \u00e8 il rappresentante pi\u00f9 popolare. Il sistema di controllo versione offre numerosi vantaggi, come la condivisione del codice, la conservazione delle versioni, il ripristino a rami precedenti, il monitoraggio della storia del progetto e backup. Non discuteremo ogni punto nei dettagli, poich\u00e9 sono sicuro che gi\u00e0 lo conosci e lo utilizzi nel tuo lavoro quotidiano. Ma se cos\u00ec non fosse, ti consiglio di sospendere la lettura di questo articolo e di colmare al pi\u00f9 presto questa lacuna.<\/p>\n<h3>Valore per l'infrastruttura di automazione<\/h3>\n<p>\n E qui puoi porre una domanda ragionevole: \u00abPerch\u00e9 ci parla di Git? Tutti lo conoscono e lo usano sia per lo sviluppo del codice che per i test automatici\u00bb. Avresti assolutamente ragione, ma in questo articolo parliamo di infrastruttura e questa sezione funge da anteprima per la sezione 7: \u00abInfrastructure as code (IaC)\u00bb. Per noi questo significa che tutta l'infrastruttura, compresa quella di test, viene descritta in forma di codice, quindi possiamo anche applicare sistemi di versionamento e ottenere vantaggi analoghi a quelli per il codice di sviluppo e di automazione.<\/p>\n<p>Esamineremo IaC pi\u00f9 nel dettaglio nel passaggio 7, ma anche ora puoi iniziare a utilizzare Git localmente, creando un repository locale. Il quadro generale sar\u00e0 ampliato quando aggiungeremo un repository remoto all'infrastruttura.<\/p>\n<h3>Illustrazione dello stato attuale dell'infrastruttura<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/f17c1d2b2f18aa814c44f7c443e49416.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Link per lo studio<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.atlassian.com\/git\/tutorials\/what-is-version-control\">What is version control<\/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\">Getting Started \u2014 About Version Control<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Strumenti simili<\/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 (ora \u00e8 parte di Azure DevOps Services)<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2>3. Containerizzazione (Docker)<\/h2>\n<p><\/p>\n<h3>Breve descrizione della tecnologia<\/h3>\n<p>\n Per dimostrare come la containerizzazione abbia cambiato le regole del gioco, facciamo un salto indietro di alcuni decenni. In passato, le persone acquistavano e utilizzavano macchine server per eseguire applicazioni. Tuttavia, nella maggior parte dei casi, le risorse necessarie per l'esecuzione non erano conosciute in anticipo. Di conseguenza, le aziende spendevano soldi per l'acquisto di server potenti e costosi, ma parte di questa potenza non veniva mai utilizzata completamente.<\/p>\n<p>Il passo successivo nell'evoluzione sono state le macchine virtuali (VM), che hanno risolto il problema della spesa per risorse inutilizzate. Questa tecnologia ha permesso di eseguire applicazioni in modo indipendente l'una dall'altra all'interno di un unico server, riservando uno spazio completamente isolato. Tuttavia, sfortunatamente, ogni tecnologia ha i suoi svantaggi. L'esecuzione di VM richiede un sistema operativo completo, che consuma CPU, RAM, spazio di archiviazione e, a seconda del sistema operativo, bisogna considerare anche i costi di licenza. Questi fattori influenzano la velocit\u00e0 di avvio e complicano la portabilit\u00e0.<\/p>\n<p>Ed ecco arrivare la containerizzazione. Anche in questo caso, questa tecnologia ha risolto il problema precedente, poich\u00e9 i container non utilizzano un sistema operativo completo, liberando cos\u00ec molte risorse e fornendo una soluzione rapida e flessibile per la portabilit\u00e0.<\/p>\n<p>Naturalmente, la tecnologia della containerizzazione non \u00e8 qualcosa di nuovo e fu introdotta per la prima volta alla fine degli anni '70. In quel periodo sono stati condotti molti studi, ricerche e tentativi. Ma \u00e8 stato Docker a adattare questa tecnologia e renderla ampiamente accessibile. Oggi, quando parliamo di container, ci riferiamo nella maggior parte dei casi a Docker. Quando parliamo di container Docker, intendiamo i container Linux. Possiamo utilizzare sistemi Windows e macOS per eseguire container, ma \u00e8 importante capire che in questo caso viene introdotto uno strato aggiuntivo. Ad esempio, Docker su Mac avvia silenziosamente i container all'interno di una leggera VM Linux. Torneremo su questo tema quando discuteremo dell'esecuzione di emulatori Android all'interno dei container, poich\u00e9 qui si presenta un aspetto molto importante che merita un'analisi pi\u00f9 approfondita.<\/p>\n<h3>Valore per l'infrastruttura di automazione<\/h3>\n<p>\n Abbiamo scoperto che la containerizzazione e Docker sono ottimi. Vediamo come si inseriscono nel contesto dell'automazione, poich\u00e9 ogni strumento o tecnologia deve affrontare un problema specifico. Identifichiamo i problemi evidenti dell'automazione dei test nell'ambito dei test UI:<\/p>\n<ul>\n<li>un numero elevato di dipendenze nell'installazione di Selenium e, in particolare, di Appium;<\/li>\n<li>problemi di compatibilit\u00e0 tra le versioni dei browser, simulatori e driver;<\/li>\n<li>mancanza di uno spazio isolato per browser\/simulatori, particolarmente critico per l'esecuzione parallela;<\/li>\n<li>\u00e8 difficile gestire e mantenere se \u00e8 necessario eseguire contemporaneamente 10, 50, 100 o addirittura 1000 browser.<\/li>\n<\/ul>\n<p>\nMa poich\u00e9 Selenium \u00e8 lo strumento di automazione pi\u00f9 popolare e Docker \u00e8 lo strumento di containerizzazione pi\u00f9 popolare, non deve sorprendere che qualcuno abbia cercato di combinarli per ottenere uno strumento potente in grado di risolvere i problemi sopra menzionati. Esaminiamo queste soluzioni pi\u00f9 nel dettaglio.\u00a0<\/p>\n<p><u>Selenium grid in docker<\/u><\/p>\n<p>Questo strumento \u00e8 il pi\u00f9 popolare al mondo in Selenium per avviare pi\u00f9 browser su pi\u00f9 macchine e gestirli da un nodo centrale. Per l'avvio, \u00e8 necessario registrare almeno 2 componenti: Hub e Node(s). Hub \u00e8 il nodo centrale che riceve tutte le richieste dai test e le distribuisce ai nodi corrispondenti. Per ogni nodo, possiamo configurare una configurazione specifica, ad esempio specificando il browser desiderato e la sua versione. Tuttavia, dobbiamo ancora occuparci noi stessi dei driver compatibili per i browser e installarli sui nodi necessari. Per questo motivo, Selenium grid non \u00e8 utilizzato nella sua forma pura, tranne nei casi in cui dobbiamo lavorare con browser che non possono essere installati su sistemi operativi Linux. In tutti gli altri casi, l'utilizzo di immagini Docker per eseguire Selenium grid Hub e Nodes sar\u00e0 una soluzione molto pi\u00f9 flessibile e corretta. Questo approccio semplifica notevolmente la gestione dei nodi, poich\u00e9 possiamo scegliere l'immagine desiderata con gi\u00e0 installate le versioni compatibili di browser e driver.<\/p>\n<p>Nonostante le recensioni negative sulla stabilit\u00e0 operativa, specialmente quando si eseguono un gran numero di nodi in parallelo, Selenium grid rimane ancora lo strumento pi\u00f9 popolare per l'esecuzione parallela dei test Selenium. \u00c8 importante notare che nel mondo open-source ci sono costantemente nuove implementazioni e modifiche a questo strumento, che affrontano vari colli di bottiglia.<\/p>\n<p><u>Selenoid per Web<\/u><\/p>\n<p>Questo strumento rappresenta una svolta nel mondo di Selenium, poich\u00e9 funziona immediatamente e ha semplificato notevolmente il lavoro di molti ingegneri di automazione. In primo luogo, non \u00e8 una mera modifica di Selenium Grid. Gli sviluppatori hanno creato una versione completamente nuova di Selenium Hub in linguaggio Golang, che, insieme alle immagini Docker leggere per diversi browser, ha dato una spinta allo sviluppo dell'automazione dei test. Inoltre, nel caso di Selenium Grid, dobbiamo definire in anticipo tutti i browser e le loro versioni richieste, il che non \u00e8 un problema quando lavoriamo esclusivamente con un singolo browser. Ma quando si tratta di pi\u00f9 browser supportati, Selenoid diventa la soluzione numero uno, grazie alla funzione 'browser on demand'. Tutto ci\u00f2 che dobbiamo fare \u00e8 caricare in anticipo le immagini necessarie con i browser e aggiornare il file di configurazione con cui interagisce Selenoid. Dopo che Selenoid riceve una richiesta dai test, avvier\u00e0 automaticamente il contenitore richiesto con il browser desiderato. Una volta concluso il test, Selenoid fermer\u00e0 il contenitore, liberando cos\u00ec risorse per le richieste successive. Questo approccio elimina completamente il noto problema della 'degradazione dei nodi', che incontriamo frequentemente in Selenium Grid.<\/p>\n<p>Tuttavia, Selenoid non \u00e8 ancora una soluzione miracolosa. Abbiamo ottenuto la funzione 'browser on demand', ma la funzione 'risorse on demand' non \u00e8 ancora disponibile. Per utilizzare Selenoid, dobbiamo installarlo su hardware fisico o su una VM, il che significa che \u00e8 necessario sapere in anticipo quante risorse devono essere allocate. Credo che ci\u00f2 non rappresenti un problema per piccoli progetti, che eseguono 10, 20 o anche 30 browser in parallelo. Ma cosa succede se ci servono 100, 500, 1000 o pi\u00f9? Non ha senso mantenere e pagare per una tale quantit\u00e0 di risorse continuamente. Nelle sezioni 5 e 6 di questo articolo discuteremo delle soluzioni che consentono di scalare, riducendo cos\u00ec significativamente i costi aziendali.<\/p>\n<p><u>Selenoid for Android<\/u><\/p>\n<p>Dopo il successo di Selenoid come strumento per l'automazione web, le persone desideravano qualcosa di simile per Android. E cos\u00ec \u00e8 stato: \u00e8 stata rilasciata Selenoid con supporto per Android. Dal punto di vista dell'utente, il principio di funzionamento \u00e8 simile a quello dell'automazione web. L'unica differenza \u00e8 che, invece di contenitori con i browser, Selenoid avvia contenitori con emulatori Android. A mio avviso, al momento \u00e8 lo strumento gratuito pi\u00f9 potente per l'esecuzione di test Android in parallelo.<\/p>\n<p>Non mi piace parlare degli aspetti negativi di questo strumento, poich\u00e9 mi piace davvero molto. Tuttavia, ci sono le stesse limitazioni relative all'automazione web, soprattutto in termini di scalabilit\u00e0. Inoltre, c\u2019\u00e8 un altro vincolo da menzionare, che pu\u00f2 sorprendere chi configura lo strumento per la prima volta. Per eseguire le immagini Android abbiamo bisogno di una macchina fisica o di una VM con supporto per la virtualizzazione nidificata. Nella guida pratica mostro come attivare questa funzione su una VM Linux. Tuttavia, se sei un utente macOS e desideri installare Selenoid localmente, sar\u00e0 impossibile eseguire test Android. Ma puoi sempre avviare una VM Linux localmente con la 'virtualizzazione nidificata' attivata e installare Selenoid al suo interno.<\/p>\n<h3>Illustrazione dello stato attuale dell'infrastruttura<\/h3>\n<p>\n Nel contesto di questo articolo, aggiungeremo 2 strumenti per illustrare l'infrastruttura. Questi sono Selenium Grid per i test web e Selenoid per i test Android. Nella guida su GitHub mostrer\u00f2 anche come utilizzare Selenoid per eseguire test web.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/1202ae79eba9cffc965f3a5b2648c755.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Link per lo studio<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/resources\/what-container\">Docker: che cos'\u00e8 un contenitore<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/get-started\">Docker: per iniziare<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/containerjournal.com\/topics\/container-ecosystems\/5-container-alternatives-to-docker\/\">5 alternative a 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\">Docker Selenium<\/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\">Configurazione KVM per emulatori 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\">Libro Docker Deep Dive<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Strumenti simili<\/h3>\n<p><\/p>\n<ul>\n<li>Esistono altri strumenti di containerizzazione, ma Docker \u00e8 il pi\u00f9 popolare. Se desideri provare qualcos'altro, tieni presente che gli strumenti che abbiamo esaminato per l'esecuzione parallela dei test Selenium non funzioneranno out of the box.\u00a0\u00a0<\/li>\n<li>Come gi\u00e0 detto, ci sono molte modifiche a Selenium Grid, come ad esempio<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>Breve descrizione della tecnologia<\/h3>\n<p>\n La pratica dell'integrazione continua \u00e8 piuttosto popolare nello sviluppo e si colloca al pari dei sistemi di controllo versione. Tuttavia, sento che c'\u00e8 confusione nella terminologia. In questo paragrafo vorrei descrivere 3 varianti di questa tecnologia dalla mia prospettiva. Su Internet puoi trovare molti articoli con diverse interpretazioni, ed \u00e8 assolutamente normale se la tua opinione differisce. L'importante \u00e8 che tu sia sulla stessa lunghezza d'onda dei tuoi colleghi.<\/p>\n<p>Quindi, ci sono 3 termini: CI - Continuous Integration (integrazione continua), CD - Continuous Delivery (consegna continua), e di nuovo CD - Continuous Deployment (distribuzione continua).<i>In seguito utilizzer\u00f2 questi termini in lingua inglese<\/i>). Ogni modifica aggiunge ulteriori fasi al tuo processo di sviluppo. Ma la parola <u>continuous<\/u> (continuo) \u00e8 il principale. In questo contesto, intendiamo qualcosa che avviene dall'inizio alla fine, senza interruzioni o interventi manuali. Vediamo CI &#038; CD e CD in questo contesto.<\/p>\n<ul>\n<li><strong>Continuous Integration \u2013<\/strong> \u00e8 il primo passo dell'evoluzione. Dopo aver inviato un nuovo codice al server, ci aspettiamo un feedback rapido sul fatto che le nostre modifiche siano corrette. Di solito, CI include l'esecuzione di strumenti di analisi statica del codice e test di unit\u00e0\/API interni. Questo ci consente di avere informazioni sul nostro codice gi\u00e0 dopo pochi secondi\/minuti.<\/li>\n<li><strong>Continuous Delivery<\/strong> \u00e8 un passo pi\u00f9 avanzato, durante il quale eseguiamo test di integrazione\/UI. Tuttavia, in questa fase non otteniamo risultati cos\u00ec rapidamente come nel caso del CI. In primo luogo, questi tipi di test richiedono pi\u00f9 tempo per essere completati. In secondo luogo, prima di eseguirli, dobbiamo distribuire le nostre modifiche in un ambiente di test\/staging. Inoltre, se parliamo di sviluppo mobile, c'\u00e8 un ulteriore passaggio per creare la build della nostra applicazione.<\/li>\n<li><strong>Continuous Deployment<\/strong> significa che rilasciamo automaticamente le nostre modifiche in produzione, se tutti i test di accettazione sono stati superati nelle fasi precedenti. Inoltre, dopo la fase di rilascio, \u00e8 possibile configurare diverse fasi, come l'esecuzione di test di smoke in produzione e la raccolta di metriche rilevanti. Il Continuous Deployment \u00e8 possibile solo con una buona copertura di test automatizzati. Se sono necessari interventi manuali, compresi i test, allora questo non \u00e8 pi\u00f9 <u>Continuous<\/u> (continuo). Allora possiamo dire che il nostro processo corrisponde solo alla pratica del Continuous Delivery.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Valore per l'infrastruttura di automazione<\/h3>\n<p>\n In questa sezione devo chiarire che, quando parliamo di test UI end-to-end, intendiamo che dobbiamo distribuire le nostre modifiche e i servizi correlati negli ambienti di test. La Continuous Integration non \u00e8 applicabile a questo compito e dobbiamo assicurarci di implementare almeno le pratiche di Continuous Delivery. Anche il Continuous Deployment ha senso nel contesto dei test UI, se intendiamo eseguirli in produzione.<\/p>\n<p>E prima di dare un'occhiata all'illustrazione delle modifiche architetturali, voglio dire alcune parole su GitLab CI. A differenza di altri strumenti CI\/CD, GitLab fornisce un repository remoto e molte altre funzionalit\u00e0 aggiuntive. Pertanto, GitLab \u00e8 pi\u00f9 che CI. Include gestione del codice sorgente, gestione Agile, pipeline CI\/CD, strumenti di logging e raccolta di metriche. L'architettura di GitLab consiste in GitLab CI\/CD e GitLab Runner. Ecco una breve descrizione dal sito ufficiale:<\/p>\n<blockquote><p>GitLab CI\/CD \u00e8 un'applicazione web con API che memorizza il suo stato in un database, gestisce progetti\/build e fornisce un'interfaccia utente. GitLab Runner \u00e8 un'applicazione che elabora le build. Pu\u00f2 essere distribuita separatamente e lavora con GitLab CI\/CD tramite un'API. Per l'esecuzione dei test hai bisogno sia di un'istanza GitLab che di un Runner.<\/p><\/blockquote>\n<p><\/p>\n<h3>Illustrazione dello stato attuale dell'infrastruttura<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/a05ece39b6c6a9aaec4177d4b5242722.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Link per lo studio<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/articles\/continuousIntegration.html\">Martin Fowler: Continuous Integration<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/ee\/ci\/\">GitLab CI\/CD<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Continuous-Integration-Improving-Software-Reducing\/dp\/0321336380\">Continuous Integration book<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Continuous-Delivery-Deployment-Automation-Addison-Wesley-ebook-dp-B003YMNVC0\/dp\/B003YMNVC0\/ref=mt_kindle?_encoding=UTF8&amp;me=&amp;qid=\">Continuous Delivery book<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Strumenti simili<\/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>E molti altri<\/li>\n<\/ul>\n<p><\/p>\n<h2>5. Piattaforme cloud<\/h2>\n<p><\/p>\n<h3>Breve descrizione della tecnologia<\/h3>\n<p>\n In questa sezione parleremo di una tendenza popolare chiamata 'cloud pubblici'. Nonostante i grandi vantaggi offerti dalle tecnologie di virtualizzazione e containerizzazione sopra descritte, abbiamo ancora bisogno di risorse di calcolo. Le aziende acquistano costosi server o affittano data center, ma in tal caso \u00e8 necessario fare calcoli (a volte poco realistici) su quante risorse avremo bisogno, se le utilizzeremo 24\/7 e per quali scopi. Ad esempio, per la produzione \u00e8 necessario un server funzionante 24 ore su 24, ma abbiamo bisogno di risorse simili per i test durante l'orario non lavorativo? Questo dipende anche dal tipo di test in corso. Un esempio potrebbero essere i test di carico\/stress che intendiamo eseguire durante l'orario non lavorativo per ottenere risultati il giorno successivo. Ma, sicuramente, la disponibilit\u00e0 continua dei server non \u00e8 necessaria per i test automatici end-to-end e soprattutto per gli ambienti di testing manuale. Per queste situazioni sarebbe utile avere accesso a risorse richieste on-demand, utilizzarle e smettere di pagare quando non sono pi\u00f9 necessarie. Inoltre, sarebbe fantastico ottenerle immediatamente, effettuando pochi clic del mouse o eseguendo un paio di script. A questo servono i cloud pubblici. Andiamo a vedere la definizione:<\/p>\n<blockquote><p>\u00abIl cloud pubblico \u00e8 definito come servizi di computing offerti da fornitori terzi su Internet pubblico, rendendoli disponibili a chiunque desideri utilizzarli o acquistarli. Possono essere gratuiti o venduti su richiesta, consentendo ai clienti di pagare solo per l'uso delle risorse, come i cicli di CPU, lo stoccaggio o la larghezza di banda che consumano\u00bb.<\/p><\/blockquote>\n<p>\n Esiste un'opinione condivisa che i cloud pubblici siano costosi. Ma la loro idea principale \u00e8 la riduzione delle spese aziendali. Come accennato in precedenza, i cloud pubblici permettono di ottenere risorse on-demand e pagare solo per il tempo di utilizzo. Inoltre, a volte dimentichiamo che i dipendenti ricevono uno stipendio e gli esperti sono anch'essi una risorsa costosa. \u00c8 importante considerare che i cloud pubblici semplificano notevolmente la gestione dell'infrastruttura, permettendo agli ingegneri di concentrarsi su attivit\u00e0 pi\u00f9 rilevanti.\u00a0<\/p>\n<h3>Valore per l'infrastruttura di automazione<\/h3>\n<p>\n Quali risorse specifiche ci servono per i test UI end-to-end? Fondamentalmente, si tratta di macchine virtuali o cluster (parleremo di Kubernetes nella sezione successiva) per eseguire browser ed emulatori. Maggiore \u00e8 il numero di browser ed emulatori che vogliamo eseguire contemporaneamente, maggiori saranno le risorse CPU e memoria necessarie, e cos\u00ec pi\u00f9 alto sar\u00e0 il costo. In questo modo, i cloud pubblici nel contesto dell'automazione dei test ci permettono di avviare un gran numero (100, 200, 1000 ...) di browser\/emulatori on-demand, ricevere i risultati dei test il prima possibile e smettere di pagare per potenze cos\u00ec resource-intensive.\u00a0<\/p>\n<p>I fornitori di cloud pi\u00f9 popolari sono Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP). Nel manuale pratico vengono forniti esempi di utilizzo di GCP, ma in generale non importa cosa utilizzi per le attivit\u00e0 di automazione. Offrono tutti funzioni simili. Di solito la scelta del fornitore si concentra sull'intera infrastruttura aziendale e sui requisiti di business, cosa che va oltre il tema di questo articolo. Per gli ingegneri dell'automazione, sar\u00e0 pi\u00f9 interessante confrontare l'uso dei fornitori di cloud con piattaforme cloud specifiche per scopi di test, come Sauce Labs, BrowserStack, BitBar e cos\u00ec via. Quindi facciamolo! A mio avviso, Sauce Labs \u00e8 il pi\u00f9 noto fornitore di testing cloud, quindi l'ho scelto per il confronto.\u00a0<\/p>\n<p><u>GCP contro Sauce Labs per scopi di automazione:<\/u><\/p>\n<p>Immaginiamo di dover eseguire simultaneamente 8 test web e 8 test Android. Per questo utilizzeremo GCP e avvieremo 2 macchine virtuali con Selenoid. Sulla prima avvieremo 8 contenitori con i browser. Sulla seconda \u2013 8 contenitori con gli emulatori. Diamo un'occhiata ai prezzi:\u00a0\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/e4688fd2e6e5593d2e1c22fc57f59484.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Per avviare un contenitore con Chrome, avremo bisogno di <strong>n1-standard-1 <\/strong>macchina. Nel caso di Android, sar\u00e0 <strong>n1-standard-4 <\/strong>per un emulatore. In realt\u00e0, un approccio pi\u00f9 flessibile e conveniente \u00e8 quello di definire valori specifici per CPU\/Memoria, ma al momento, per il confronto con Sauce Labs, non \u00e8 fondamentale.<\/p>\n<p>Ecco le tariffe per l'utilizzo di Sauce Labs:<\/p>\n<p><img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/1367d2b59bbef9603b4b4be166e8d721.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPenso che tu abbia gi\u00e0 notato la differenza, ma comunque fornir\u00f2 una tabella con i calcoli per il nostro compito:<\/p>\n<p><strong>Risorse richieste<\/strong><br \/>\n<strong>Mensile<\/strong><br \/>\n<strong>Ore lavorative<\/strong><strong>(8 a.m \u2014 8 p.m)<\/strong><br \/>\n<strong>Ore lavorative<\/strong><strong>+ Preemptible<\/strong><\/p>\n<p><strong>GCP per Web<\/strong><br \/>\nn1-standard-1 x 8 = n1-standard-8<br \/>\n$194.18<br \/>\n23 giorni * 12h * 0.38 = 104.88$\u00a0<br \/>\n23 giorni * 12h * 0.08 = 22.08$<\/p>\n<p><strong>Sauce Labs per Web<\/strong><br \/>\nTest paralleli Virtual Cloud8<br \/>\n$1.559<br \/>\n\u2014<br \/>\n\u2014<\/p>\n<p><strong>GCP per Android<\/strong><br \/>\nn1-standard-4 x 8: n1-standard-16<br \/>\n$776.72<br \/>\n23 giorni * 12h * 1.52 = 419.52$\u00a0<br \/>\n23 giorni * 12h * 0.32 = 88.32$<\/p>\n<p><strong>Sauce Labs per Android<\/strong><br \/>\nTest paralleli Real Device Cloud 8<br \/>\n$1.999<br \/>\n\u2014<br \/>\n\u2014<\/p>\n<p>\nCome possiamo notare, la differenza di costo \u00e8 enorme, specialmente se si eseguono test solo durante l'orario lavorativo di dodici ore. Ma \u00e8 possibile ridurre ulteriormente le spese utilizzando macchine preemptible. Cosa sono esattamente?<\/p>\n<blockquote><p>Una VM preemptible \u00e8 un'istanza che puoi creare e far funzionare a un costo molto inferiore rispetto alle normali istanze. Tuttavia, il Compute Engine pu\u00f2 terminare (preempt) queste istanze se ha bisogno di accedere a quelle risorse per altri compiti. Le istanze preemptible sono capacit\u00e0 eccessive del Compute Engine, quindi la loro disponibilit\u00e0 varia in base all'utilizzo.<\/p>\n<p>Se le tue app sono tolleranti ai guasti e possono resistere a possibili interruzioni delle istanze, allora le istanze preemptible possono ridurre significativamente i tuoi costi del Compute Engine. Ad esempio, i lavori di elaborazione batch possono essere eseguiti su istanze preemptible. Se alcune di queste istanze terminano durante l'elaborazione, il lavoro rallenta ma non si ferma completamente. Le istanze preemptible completano i tuoi compiti di elaborazione batch senza aumentare il carico di lavoro sulle tue istanze esistenti e senza richiedere di pagare il prezzo pieno per ulteriori istanze normali.<\/p><\/blockquote>\n<p>\n E questo non \u00e8 ancora tutto! In realt\u00e0, sono sicuro che nessuno esegue test per 12 ore senza una pausa. E se \u00e8 cos\u00ec, puoi avviare e fermare automaticamente le macchine virtuali quando non sono necessarie. Il tempo reale di utilizzo pu\u00f2 ridursi a 6 ore al giorno. Allora, il pagamento nel contesto del nostro compito potrebbe scendere a solo 11$ al mese per 8 browser. Non \u00e8 fantastico? Ma con le macchine preemptible dobbiamo essere cauti e pronti a interruzioni e instabilit\u00e0, anche se queste situazioni possono essere previste e gestite programmabilmente. Ne vale la pena!<\/p>\n<p>Ma in nessun modo dico 'mai utilizzare i cloud testing farm'. Essi hanno diversi vantaggi. Prima di tutto, non si tratta solo di una macchina virtuale, ma di una vera e propria soluzione per l'automazione dei test con un insieme di funzionalit\u00e0 pronte all'uso: accesso remoto, log, screenshot, registrazione video, diversi browser e dispositivi mobili fisici. In molte situazioni, questa pu\u00f2 essere un'alternativa ricca e insostituibile. Le piattaforme di test sono particolarmente utili per l'automazione su IOS, dove i cloud pubblici possono offrire solo sistemi Linux\/Windows. Ma parleremo di IOS nei prossimi articoli. Raccomando sempre di valutare la situazione e di basarsi sulle necessit\u00e0: in alcuni casi \u00e8 pi\u00f9 economico ed efficace utilizzare i cloud pubblici, mentre in altri le piattaforme di test valgono decisamente il costo sostenuto.<\/p>\n<h3>Illustrazione dello stato attuale dell'infrastruttura<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/f68770c9e27677b9d762af574726c90e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Link per lo studio<\/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\/\">Confronto tra i fornitori di cloud<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Strumenti analoghi:<\/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. Orchestrazione<\/h2>\n<p><\/p>\n<h3>Breve descrizione della tecnologia<\/h3>\n<p>\n Ho buone notizie \u2013 siamo quasi alla fine dell'articolo! Attualmente, la nostra infrastruttura di automazione consiste in test web e Android, che eseguiamo tramite GitLab CI in parallelo, utilizzando strumenti con supporto per Docker: Selenium grid e Selenoid. Inoltre, utilizziamo macchine virtuali create tramite GCP per l'esecuzione di contenitori con browser ed emulatori. Per ridurre i costi, avviamo queste macchine virtuali solo su richiesta e le fermiamo quando non ci sono test in corso. C'\u00e8 qualcos'altro che potrebbe migliorare la nostra infrastruttura? La risposta \u00e8 s\u00ec! Presentiamo Kubernetes (K8s)!<\/p>\n<p>Iniziamo a esaminare come i termini orchestrazione, cluster e Kubernetes siano interconnessi. A un livello alto, l'orchestrazione \u00e8 un sistema che distribuisce e gestisce applicazioni. Per l'automazione dei test, tali applicazioni containerizzate sono Selenium grid e Selenoid. Docker e K8s si completano a vicenda. Il primo \u00e8 utilizzato per implementare le applicazioni, il secondo per l'orchestrazione. A sua volta, K8s \u00e8 un cluster. La funzione del cluster \u00e8 utilizzare le VM come Nodes, consentendo di installare varie funzionalit\u00e0, programmi e servizi all'interno di un singolo server (cluster). Se uno dei Node fallisce, altri Nodes intervengono, garantendo che la nostra applicazione funzioni ininterrottamente. Inoltre, K8s ha una funzionalit\u00e0 importante relativa alla scalabilit\u00e0, grazie alla quale otteniamo automaticamente il numero ottimale di risorse in base al carico e ai limiti stabiliti.<\/p>\n<p>A dire il vero, implementare Kubernetes manualmente da zero \u00e8 un compito piuttosto complesso. Lascio un link a una nota guida pratica 'Kubernetes The Hard Way', e, se sei interessato, puoi esercitarti. Ma, per fortuna, esistono modi e strumenti alternativi. Il pi\u00f9 semplice tra questi \u00e8 utilizzare Google Kubernetes Engine (GKE) in GCP, che permette di ottenere un cluster pronto dopo pochi clic. Per iniziare a studiare, consiglio di usare proprio questo approccio, in quanto ti consentir\u00e0 di concentrarti sull'apprendimento di come utilizzare K8s per le tue esigenze, piuttosto che esplorare come i componenti interni debbano interagire tra loro.\u00a0<\/p>\n<h3>Valore per l'infrastruttura di automazione<\/h3>\n<p>\nEsaminiamo alcune funzioni significative fornite da K8s:<\/p>\n<ul>\n<li>distribuzione delle applicazioni: utilizzo di un cluster multi-nodes, invece delle VM;<\/li>\n<li>scalabilit\u00e0 dinamica: riduce i costi delle risorse utilizzate solo su richiesta;<\/li>\n<li>auto-ripristino (Self-healing): ripristino automatico dei pods (il che porta anche al ripristino dei contenitori);<\/li>\n<li>distribuzione di aggiornamenti e rollback senza downtime: l'aggiornamento degli strumenti, dei browser e degli emulatori non interrompe il lavoro degli utenti attuali;<\/li>\n<\/ul>\n<p>\n Ma K8s non \u00e8 ancora una panacea. Per comprendere tutti i vantaggi e le limitazioni nel contesto degli strumenti che stiamo esaminando (Selenium grid, Selenoid), discuteremo brevemente la struttura di K8s. Un Cluster contiene due tipi di Nodes: Master Nodes e Workers Nodes. I Master Nodes sono responsabili della gestione, della distribuzione e delle decisioni di scheduling. I Workers nodes sono dove le applicazioni vengono eseguite. I Nodes contengono anche l'ambiente di esecuzione dei contenitori. Nel nostro caso, si tratta di Docker, che gestisce le operazioni legate ai contenitori. Ma ci sono anche soluzioni alternative, come<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containerd\/containerd\"> containerd<\/a><\/noindex>. \u00c8 importante comprendere che il ridimensionamento o il ripristino automatico non si riferisce direttamente ai container. Questo viene realizzato attraverso l'aggiunta o la riduzione del numero di pods, che a loro volta contengono i container (solitamente un container per pod, ma a seconda del compito possono essercene di pi\u00f9). La gerarchia di alto livello \u00e8 costituita dai worker nodes, all'interno dei quali si trovano i pods, nei quali vengono sollevati i container.<\/p>\n<p>La funzione di ridimensionamento \u00e8 fondamentale e pu\u00f2 essere applicata sia ai nodes all'interno del cluster node-pool che ai pods all'interno del node. Ci sono 2 tipi di ridimensionamento che si applicano sia ai nodes che ai pods. Il primo tipo \u2013 orizzontale \u2013 \u00e8 il ridimensionamento che avviene aumentando il numero di nodes\/pods. Questo tipo \u00e8 preferibile. Il secondo tipo, di conseguenza, \u00e8 verticale. Il ridimensionamento viene effettuato aumentando le dimensioni dei nodes\/pods, non il loro numero.<\/p>\n<p>Ora diamo un'occhiata ai nostri strumenti nel contesto dei termini menzionati sopra.<\/p>\n<p><u>Selenium grid<\/u><\/p>\n<p>Come accennato in precedenza, Selenium grid \u00e8 uno strumento molto popolare, e non sorprende che sia stato containerizzato. Di conseguenza, non stupisce che Selenium grid possa essere distribuito in K8s. Un esempio di come farlo pu\u00f2 essere trovato nel repository ufficiale di K8s. Come al solito, allego i link alla fine della sezione. Inoltre, nella guida pratica viene mostrato come farlo tramite Terraform. C'\u00e8 anche una guida su come ridimensionare il numero di pods che contengono container con browser. Tuttavia, la funzione di ridimensionamento automatico nel contesto di K8s \u00e8 ancora un compito poco chiaro. Quando ho iniziato a studiarlo, non ho trovato alcuna guida pratica o raccomandazioni. Dopo varie ricerche e esperimenti con il supporto del team DevOps, abbiamo scelto l'approccio di sollevare i container con i browser richiesti all'interno di un pod, che si trova all'interno di un worker node. Questo metodo ci consente di applicare una strategia di ridimensionamento orizzontale dei nodes aumentando il loro numero. Spero che in futuro la situazione cambi e vedremo sempre pi\u00f9 descrizioni delle migliori pratiche e soluzioni pronte, specialmente dopo il rilascio di Selenium grid 4 con un'architettura interna modificata.<\/p>\n<p><u>Selenoid<\/u>:<\/p>\n<p>Attualmente, il deployment di Selenoid in K8s rappresenta la maggiore delusione. Non sono compatibili. Teoricamente possiamo sollevare un container Selenoid all'interno di un pod, ma quando Selenoid inizia a lanciare container con browser, questi rimangono all'interno dello stesso pod. Questo rende impossibile il ridimensionamento e, di conseguenza, il funzionamento di Selenoid all'interno del cluster non differir\u00e0 da quello all'interno di una macchina virtuale. Fine della storia.<\/p>\n<p><u>Moon<\/u>:<\/p>\n<p>Conoscendo questo collo di bottiglia nell'uso di Selenoid, gli sviluppatori hanno rilasciato uno strumento pi\u00f9 potente chiamato Moon. Questo strumento \u00e8 stato progettato per funzionare con Kubernetes e, di conseguenza, \u00e8 possibile e necessario utilizzare la funzione di ridimensionamento automatico. Inoltre, direi che al momento \u00e8 <u>l'unica<\/u> lo strumento nel mondo di Selenium che, out-of-the-box, ha supporto nativo per cluster K8s (<i>non pi\u00f9, vedi il prossimo strumento <\/i>). La caratteristica principale di Moon, che consente questo supporto, \u00e8:\u00a0<\/p>\n<blockquote><p>Completamente stateless. Selenoid memorizza in memoria informazioni sulle sessioni del browser attualmente in esecuzione. Se per qualche motivo il suo processo si interrompe, tutte le sessioni in corso andranno perse. Al contrario, Moon non ha uno stato interno e pu\u00f2 essere replicato in vari datacenter. Le sessioni del browser rimangono attive anche se una o pi\u00f9 repliche vanno gi\u00f9.<\/p><\/blockquote>\n<p>Quindi, Moon \u00e8 una soluzione fantastica, ma con un problema: non \u00e8 gratuita. Il prezzo dipende dal numero di sessioni. \u00c8 possibile eseguire gratuitamente solo da 0 a 4 sessioni, il che non \u00e8 molto utile. Ma, a partire dalla quinta sessione, dovremo pagare 5$ per ciascuna. La situazione pu\u00f2 variare da azienda a azienda, ma nel nostro caso l'uso di Moon \u00e8 inutile. Come descritto sopra, possiamo avviare VM con Selenium Grid su richiesta o aumentare il numero di Nodes nel cluster. Circa per ogni pipeline avviamo 500 browser e fermiamo tutte le risorse dopo il completamento dei test. Se avessimo usato Moon, avremmo dovuto pagare ulteriori 500 x 5 = 2500 $ al mese, indipendentemente da quanto spesso eseguiamo i test. E ancora, non dico \"non usare Moon\". Per le vostre necessit\u00e0, potrebbe essere una soluzione indispensabile, ad esempio, se la vostra organizzazione ha molti progetti\/team e vi serve un enorme cluster condiviso per tutti. Come sempre, lascio il link alla fine e consiglio di effettuare tutti i calcoli necessari nel contesto delle vostre esigenze.<\/p>\n<p><u>Callisto<\/u>: (<i><strong>Attenzione! Questo non \u00e8 presente nell'articolo originale e si trova solo nella traduzione russa<\/strong><\/i>)<\/p>\n<p>Come ho gi\u00e0 detto, Selenium \u00e8 uno strumento molto popolare e il settore IT sta evolvendo rapidamente. Mentre lavoravo alla traduzione, \u00e8 emerso un nuovo strumento promettente, Callisto (salve a Cypress e ad altri killer di Selenium). Funziona in modo nativo con K8s e consente di eseguire contenitori Selenoid in pods, distribuiti su nodi. Tutto funziona subito out of the box, inclusa l'auto-scaling. Fantastico, ma va testato. Sono gi\u00e0 riuscito a implementare questo strumento e a condurre alcuni esperimenti. Tuttavia, \u00e8 prematuro trarre conclusioni; dopo aver ottenuto risultati a lungo termine, potrei scrivere una recensione in articoli futuri. Per ora, lascio solo i link per ulteriori ricerche.\u00a0\u00a0<\/p>\n<h3>Illustrazione dello stato attuale dell'infrastruttura<\/p>\n<h3><img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/c9c2ffd21df2a261947df809dcec7108.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Link per lo studio<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/setup\/\">Kubernetes: configurazione<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\">Kubernetes: il modo difficile<\/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: motore 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\">Il libro su Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MmdGyqNqs9w\">Automazione distribuita con 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>Strumenti simili<\/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. Infrastruttura come codice (IaC)<\/h2>\n<p><\/p>\n<h3>Breve descrizione della tecnologia<\/h3>\n<p>\n Ecco che siamo arrivati all'ultimo capitolo. Di solito, questa tecnologia e i compiti ad essa associati non rientrano nelle responsabilit\u00e0 degli ingegneri di automazione. E ci sono buone ragioni per questo. In primo luogo, in molte organizzazioni, le questioni infrastrutturali sono sotto il controllo del team DevOps e il team di sviluppo non si preoccupa molto di ci\u00f2 che sostiene il pipeline e come mantenere tutto ci\u00f2 che vi si collega. In secondo luogo, diciamolo chiaramente, la pratica dell'\"Infrastruttura come codice (IaC)\" non \u00e8 ancora adottata in molte aziende. Tuttavia, \u00e8 diventata una tendenza popolare ed \u00e8 importante cercare di essere coinvolti nei processi, approcci e strumenti ad essa correlati. O, perlomeno, rimanere aggiornati.<\/p>\n<p>Iniziamo motivando l'uso di questo approccio. Abbiamo gi\u00e0 discusso che per eseguire test in GitlabCI avremo bisogno di almeno le risorse per avviare Gitlab Runner. E per far funzionare contenitori con browser\/emulatori dobbiamo riservare una VM o un cluster. Oltre alle risorse per il testing, abbiamo bisogno di una quantit\u00e0 significativa di potenza per mantenere gli ambienti di sviluppo, staging, produzione, che comprendono anche database, pianificazioni automatiche, configurazioni di rete, bilanciatori di carico, diritti utenti, e cos\u00ec via. Il problema principale riguarda gli sforzi necessari per mantenere tutto questo. Ci sono diversi modi in cui possiamo apportare modifiche e rilasciare aggiornamenti. Ad esempio, nel contesto di GCP possiamo usare la console UI nel browser e compiere tutte le azioni cliccando sui pulsanti. Un metodo alternativo pu\u00f2 essere l'utilizzo delle chiamate API per interagire con le entit\u00e0 cloud o l'applicazione dello strumento da riga di comando gcloud per eseguire le manovre necessarie. Ma quando ci sono veramente un gran numero di diverse entit\u00e0 e elementi infrastrutturali, diventa difficile, se non impossibile, eseguire tutte le operazioni manualmente. Inoltre, tutte queste azioni manuali non sono controllate. Non possiamo sottoporle a revisione prima dell'esecuzione, usare un sistema di controllo versione e ripristinare rapidamente correzioni che hanno causato un incidente. Per risolvere tali problemi, gli ingegneri hanno creato e continuano a creare script bash\/shell automatizzati, che non sono molto meglio delle soluzioni precedenti, poich\u00e9 non sono cos\u00ec facili da leggere, comprendere, mantenere e modificare in stile procedurale.<\/p>\n<p>In questo articolo e nella guida pratica utilizzer\u00f2 2 strumenti legati alla pratica IaC. Questi sono Terraform e Ansible. Alcuni ritengono che non abbia senso usarli contemporaneamente, poich\u00e9 le loro funzionalit\u00e0 sono simili e si sostituiscono reciprocamente. Ma la verit\u00e0 \u00e8 che inizialmente si pongono obiettivi completamente diversi. E il fatto che questi strumenti debbano integrarsi \u00e8 stato confermato in una presentazione congiunta dai sviluppatori delle aziende HashiCorp e RedHat. La differenza concettuale \u00e8 che Terraform \u00e8 uno strumento di provisioning per gestire i server stessi. Mentre Ansible \u00e8 uno strumento di gestione delle configurazioni, il cui compito \u00e8 installare, configurare e gestire il software su quei server.<\/p>\n<p>Un'altra caratteristica distintiva di questi strumenti \u00e8 lo stile di scrittura del codice. A differenza di bash e Ansible, Terraform utilizza uno stile dichiarativo, basato sulla descrizione dello stato finale desiderato da raggiungere. Ad esempio, se intendiamo creare 10 VMs e applicare le modifiche tramite Terraform, avremo 10 VMs. Se eseguiamo lo script di nuovo, non succeder\u00e0 nulla, poich\u00e9 abbiamo gi\u00e0 10 VMs, e Terraform ne \u00e8 a conoscenza poich\u00e9 conserva lo stato attuale dell'infrastruttura in un file di stato. Ansible, invece, utilizza un approccio procedurale e, se gli chiediamo di creare 10 VMs, durante il primo avvio otterremo 10 VMs, analogamente a quanto accade con Terraform. Tuttavia, dopo un secondo avvio, avremo gi\u00e0 20 VMs. Questa \u00e8 la principale differenza. Nello stile procedurale non conserviamo lo stato attuale e descriviamo semplicemente la sequenza di passaggi da eseguire. Certamente, possiamo gestire diverse situazioni, aggiungere controlli sull'esistenza delle risorse e sullo stato attuale, ma non ha senso perdere tempo e sforzi per controllare questa logica. Inoltre, ci\u00f2 aumenta il rischio di commettere errori.\u00a0<\/p>\n<p>In sintesi, si pu\u00f2 concludere che per il provisioning dei server, lo strumento pi\u00f9 adatto \u00e8 Terraform con notazione dichiarativa. La gestione delle configurazioni \u00e8 meglio affidarla ad Ansible. Detto ci\u00f2, vediamo alcuni esempi di utilizzo nel contesto dell'automazione.<\/p>\n<h3>Valore per l'infrastruttura di automazione<\/h3>\n<p>\n \u00c8 importante capire che l'infrastruttura per l'automazione dei test deve essere considerata parte dell'intera infrastruttura aziendale. Questo significa che tutte le pratiche IaC devono essere applicate globalmente alle risorse di tutta l'organizzazione. Chi \u00e8 responsabile dipende dai vostri processi. Il team DevOps \u00e8 pi\u00f9 esperto in queste questioni e ha una visione d'insieme. Tuttavia, gli ingegneri QA sono pi\u00f9 coinvolti nel processo di costruzione dell'automazione e nella struttura del pipeline, il che consente loro di vedere meglio tutte le modifiche necessarie e le opportunit\u00e0 di miglioramento. La soluzione migliore \u00e8 collaborare, scambiarsi conoscenze e idee per raggiungere il risultato desiderato.\u00a0<\/p>\n<p>Ecco alcuni esempi di utilizzo di Terraform e Ansible nel contesto dell'automazione dei test e degli strumenti che abbiamo discusso in precedenza:<\/p>\n<p>1. Descrivere tramite Terraform le caratteristiche e i parametri necessari per le VMs e i cluster.<\/p>\n<p>2. Installare tramite Ansible gli strumenti necessari per i test: docker, Selenoid, Selenium Grid e caricare le versioni richieste dei browser\/emulatori.<\/p>\n<p>3. Descrivere tramite Terraform le caratteristiche della VM in cui verr\u00e0 eseguito il GitLab Runner.<\/p>\n<p>4. Installare tramite Ansible il GitLab Runner e gli strumenti complementari, configurando le impostazioni.<\/p>\n<h3>Illustrazione dello stato attuale dell'infrastruttura<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/5d793a800a4ef62e181e6cb3a3f0544e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Risorse per approfondire:<\/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 e Terraform insieme sono migliori<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/blog.gruntwork.io\/a-comprehensive-guide-to-terraform-b3d32832baca\">Guida completa a 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\">Perch\u00e9 utilizziamo Terraform e non Chef, Puppet, Ansible, SaltStack o 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>Strumenti simili<\/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>Riassumiamo!<\/h2>\n<p><\/p>\n<p><strong>Step<\/strong><br \/>\n<strong>Technology<\/strong><br \/>\n<strong>Strumenti<\/strong><br \/>\n<strong>Valore per l'infrastruttura di automazione<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nEsecuzione locale<br \/>\nNode.js, Selenium, Appium<\/p>\n<ul>\n<li>Gli strumenti pi\u00f9 popolari per web e mobile<\/li>\n<li>Supporto per molte lingue e piattaforme (incluso Node.js)<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>2<\/strong><br \/>\nSistemi di controllo versione\u00a0<br \/>\nGit<\/p>\n<ul>\n<li>Vantaggi simili con il codice di sviluppo<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>3<\/strong><br \/>\nContainerizzazione<br \/>\nDocker, Selenium grid, Selenoid (Web, Android)<\/p>\n<ul>\n<li>Esecuzione parallela dei test<\/li>\n<li>Ambienti isolati<\/li>\n<li>Aggiornamenti di versione semplici e flessibili<\/li>\n<li>Arresto dinamico delle risorse non utilizzate<\/li>\n<li>Facile da configurare<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>4<\/strong><br \/>\nCI \/ CD<br \/>\nGitlab CI<\/p>\n<ul>\n<li>I test fanno parte del pipeline<\/li>\n<li>Feedback rapido<\/li>\n<li>Visibilit\u00e0 per l'intera azienda\/team<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>5<\/strong><br \/>\nPiattaforme cloud<br \/>\nGoogle Cloud Platform<\/p>\n<ul>\n<li>Risorse on demand (paghiamo solo quando sono necessarie)<\/li>\n<li>Facile da gestire e aggiornare<\/li>\n<li>Visibilit\u00e0 e controllo di tutte le risorse<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>6<\/strong><br \/>\nOrchestrazione<br \/>\nKubernetes<br \/>\nNel contesto dei contenitori con browser\/emulatori all'interno dei pods:<\/p>\n<ul>\n<li>Scalabilit\u00e0 \/ autoscalabilit\u00e0<\/li>\n<li>Auto-ripristino<\/li>\n<li>Aggiornamenti e rollback senza interruzioni<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>7<\/strong><br \/>\nInfrastructure as a code (IaC)<br \/>\nTerraform, Ansible<\/p>\n<ul>\n<li>Vantaggi simili con l'infrastruttura di sviluppo<\/li>\n<li>Tutti i vantaggi della versioning del codice<\/li>\n<li>Facile apportare modifiche e mantenere<\/li>\n<li>Completamente automatizzato<\/li>\n<\/ul>\n<p><\/p>\n<h2>Diagrammi di mappa mentale: evoluzione dell'infrastruttura<\/h2>\n<p>\nstep1: Locale<br \/>\n<img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/507908ba097a603adc3b301ab2f94a8d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>step2: VCS<br \/>\n<img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/71c5170293d98375d8ab86d05eb47a33.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>step3: Containerizzazione\u00a0<br \/>\n<img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/da33442a592851e07c3f5800c3ee9ead.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>step4: CI\/CD\u00a0<br \/>\n<img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/900f18b45124412a1ad00d3901efb40e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>step5: Piattaforme Cloud<br \/>\n<img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/840e5063141ac8787612e2fc46b5d690.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>step6: Orchestrazione<br \/>\n<img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/4651b552efdc893695cbf359c6992e9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>step7: IaC<br \/>\n<img decoding=\"async\" alt=\"Gli strumenti DevOps non sono solo per i DevOps. Il processo di costruzione di un&#039;infrastruttura di automazione dei test da zero.\" src=\"\/wp-content\/uploads\/2020\/04\/e784130f570260fc6c3aa263916e3db5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>E ora?<\/h2>\n<p>\nQuindi, siamo giunti alla fine dell'articolo. Ma per concludere, vorrei stabilire alcune intese con voi.<\/p>\n<p><u>Da parte vostra<\/u><br \/>\n Come detto all'inizio, mi piacerebbe che l'articolo fosse di utilit\u00e0 pratica e vi aiutasse ad applicare le conoscenze acquisite nel lavoro reale. Ripropongo ancora<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> il link alla guida pratica<\/a><\/noindex>.<\/p>\n<p>Ma anche dopo ci\u00f2, non fermatevi, praticate, studiate i link e i libri pertinenti, scoprite come funziona nella vostra azienda, trovate aree da migliorare e partecipate a questo. Buona fortuna!<\/p>\n<p><u>Da parte mia<\/u><\/p>\n<p>Dal titolo si pu\u00f2 notare che questa era solo la prima parte. Anche se \u00e8 risultata piuttosto lunga, ci sono ancora temi importanti da esplorare. Nella seconda parte, intendo esaminare l'infrastruttura di automazione nel contesto di iOS. A causa delle restrizioni di Apple che limitano l'esecuzione degli simulatori iOS solo su sistemi macOS, il nostro set di soluzioni \u00e8 ridotto. Ad esempio, non abbiamo la possibilit\u00e0 di utilizzare Docker per eseguire lo simulator o di pubblici cloud per avviare macchine virtuali. Tuttavia, ci\u00f2 non significa che non ci siano altre alternative. Cercher\u00f2 di mantenervi aggiornati sulle soluzioni all'avanguardia e sugli strumenti moderni!<\/p>\n<p>Inoltre, non ho menzionato argomenti piuttosto ampi legati al monitoraggio. Nella parte 3, intendo esaminare gli strumenti di monitoraggio pi\u00f9 popolari per l'infrastruttura, cos\u00ec come i dati e le metriche da considerare.<\/p>\n<p>E infine. In futuro, ho in programma di lanciare un corso video sulla costruzione di un'infrastruttura di test e sugli strumenti pi\u00f9 popolari. Attualmente, ci sono molti corsi e conferenze online su DevOps, ma tutto il materiale \u00e8 presentato nel contesto dello sviluppo, non dell'automazione dei test. Ho davvero bisogno di feedback su se un corso del genere sarebbe interessante e prezioso per la comunit\u00e0 dei tester e degli automatizzatori. Grazie in anticipo!<\/h3>\n<\/h3>\n<p>Fonte: <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 4.9.10 - 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 \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\" \/>\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\/it\/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) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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 \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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\udd47Gli strumenti DevOps non sono solo per DevOps. Il processo di costruzione dell'infrastruttura di automazione dei test da zero | ProHoster","description":"Parte 1: Web \/ Android Nota: questo articolo \u00e8 una traduzione in italiano dell'articolo originale \"DevOps tools are not only for DevOps. Building test automation infrastructure from scratch\". Tuttavia, tutte le illustrazioni, i link, le citazioni e i termini sono mantenuti nella lingua originale per evitare distorsioni del significato nella traduzione in italiano. Vi auguro una piacevole lettura! Attualmente, la professione","canonical_url":"https:\/\/prohoster.info\/it\/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":"it_IT","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 \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","og:url":"https:\/\/prohoster.info\/it\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/78676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=78676"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/78676\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/78677"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=78676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=78676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=78676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}