{"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":"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell'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 russo 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 russo. Vi auguro una buona lettura!<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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 DevOps \u00e8 una delle pi\u00f9 richieste nel settore IT. Se aprite i siti di ricerca lavoro pi\u00f9 popolari e impostate un filtro per gli stipendi, vedrete che le offerte di lavoro legate a DevOps si trovano all'inizio della lista. Tuttavia, \u00e8 importante capire che questo si riferisce principalmente alla posizione \u2018Senior\u2019, il che implica che il candidato possiede un alto livello di competenze, conoscenza di tecnologie e strumenti. Ci\u00f2 comporta anche un alto grado di responsabilit\u00e0, legato al funzionamento continuo della produzione. Tuttavia, abbiamo cominciato a dimenticare cosa sia DevOps. Inizialmente non era una persona o un dipartimento specifico. 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 per l'automazione dei test (QA automation engineer), ma credo che non debba essere legata solo alla scrittura di test automatici o allo sviluppo di architetture di test framework. Nel 2020, le conoscenze sull'infrastruttura di automazione sono altrettanto necessarie. Questo permette di organizzare autonomamente il processo di automazione, dalla esecuzione dei test fino alla presentazione dei risultati a tutte le parti interessate in base agli obiettivi prefissati. Di conseguenza, le competenze DevOps sono un fattore obbligatorio per svolgere questo lavoro. E va bene, ma, sfortunatamente, c'\u00e8 un problema (<i>spoiler: questo articolo cerca di semplificare questo problema<\/i>). Si tratta del fatto che DevOps \u00e8 complicato. E ci\u00f2 \u00e8 ovvio, poich\u00e9 le aziende non pagheranno molto per qualcosa di facile da realizzare... Nel mondo di DevOps ci sono molti 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=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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, concluderemo 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 condivider\u00f2 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 utilizzarli, ma vorrei esaminarli esclusivamente nel contesto dell'automazione. Credo che molti ingegneri di automazione conoscano la situazione in cui i test sviluppati, oltre a voi stessi, non vengono eseguiti e non si presta attenzione alla loro manutenzione. Di conseguenza, i test diventano obsoleti e si perde tempo per aggiornarli. Ancora una volta, all'inizio della carriera, questo pu\u00f2 essere un compito piuttosto complesso: risolvere in modo appropriato quali strumenti dovrebbero aiutare a risolvere questo problema, come sceglierli, configurarli e mantenerli. Alcuni testatori si rivolgono all'aiuto di DevOps (persone) e, diciamocelo, questo approccio funziona. In molti casi, questa pu\u00f2 essere l'unica opzione, poich\u00e9 non abbiamo visibilit\u00e0 su tutte le dipendenze. Ma, come sappiamo, i DevOps sono ragazzi molto impegnati, dato che devono occuparsi dell'infrastruttura dell'intera azienda, del deployment, del monitoraggio, dei microservizi e di altre attivit\u00e0 simili a seconda dell'organizzazione\/team. Come spesso accade, l'automazione non \u00e8 una priorit\u00e0. In questo 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 permetter\u00e0 di vedere un quadro pi\u00f9 ampio di ci\u00f2 che sta accadendo.<\/p>\n<p>L'articolo presenta gli strumenti pi\u00f9 richiesti e popolari e mostra come utilizzarli per costruire passo dopo passo un'infrastruttura di automazione. Ogni gruppo \u00e8 rappresentato da strumenti che sono stati testati sulla base dell'esperienza personale. Ma questo non significa che dobbiate utilizzare gli stessi. Gli strumenti stessi non sono importanti, vengono e vanno. Il nostro compito ingegneristico \u00e8 comprendere i principi di base: perch\u00e9 abbiamo bisogno di questo gruppo di strumenti e quali compiti lavorativi possiamo risolvere con il loro aiuto. Pertanto, alla fine di ogni sezione lascio link a strumenti simili che potrebbero essere utilizzati nella vostra organizzazione.<\/p>\n<h3>Cosa non c'\u00e8 in questo articolo<\/h3>\n<p>\nRibadisco che l'articolo non riguarda strumenti specifici, quindi non ci saranno snippet di codice dalla documentazione e descrizione di comandi specifici. Ma alla fine di ogni sezione lascer\u00f2 collegamenti per uno studio dettagliato.<\/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 varie fonti (documentazione, libri, corsi video);<\/li>\n<li>se iniziamo a approfondire, dovremo scrivere 10, 20, 30 parti di questo articolo (mentre nei piani ci sono 2-3);<\/li>\n<li>non voglio semplicemente sprecare il tuo tempo, perch\u00e9, probabilmente, vuoi utilizzare altri strumenti per raggiungere gli stessi obiettivi.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Pratica<\/h3>\n<p>\nMi piacerebbe molto che questo materiale fosse utile a ogni lettore, e non fosse solo letto e dimenticato. In ogni studio, la pratica \u00e8 una componente molto importante. A tale 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>. Avrai anche dei compiti da fare, per assicurarti di non aver copiato senza pensare delle righe di comandi da eseguire. <\/p>\n<h3>Piano<\/h3>\n<p><\/p>\n<p><strong>Passo<\/strong><br \/>\n<strong>Tecnologia<\/strong><br \/>\n<strong>Strumenti<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nEsecuzione locale (preparare test demo web\/android e farli girare 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 \/>\nInfrastruttura come codice (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>una breve descrizione della tecnologia,<\/li>\n<li>il valore per l'infrastruttura di automazione,<\/li>\n<li>un'illustrazione dello stato attuale dell'infrastruttura,<\/li>\n<li>collegamenti per ulteriori studi,<\/li>\n<li>strumenti analoghi.<\/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 passo preparatorio per l'esecuzione di test dimostrativi localmente e per verificare che vengano superati con successo. Nella parte pratica si utilizza Node.js, ma il linguaggio di programmazione e la piattaforma non sono importanti e si possono usare quelli utilizzati nella tua azienda.\u00a0<\/p>\n<p>Tuttavia, come strumenti di automazione, consiglio di utilizzare Selenium WebDriver per le piattaforme web e Appium per la piattaforma Android, poich\u00e9 nei passi successivi utilizzeremo immagini Docker progettate specificamente per lavorare con questi strumenti. Inoltre, in base ai requisiti delle offerte di lavoro, questi strumenti sono i pi\u00f9 richiesti sul mercato.<\/p>\n<p>Come avrete notato, stiamo considerando solo i test web e Android. Sfortunatamente, IOS \u00e8 una storia completamente diversa (grazie Apple). Intendo presentare soluzioni e pratiche relative a IOS nelle prossime parti.<\/p>\n<h3>Valore per l'infrastruttura di automazione<\/h3>\n<p>\nDal punto di vista dell'infrastruttura, l'esecuzione locale non ha alcun valore. Si sta solo verificando che i test funzionino sulla macchina locale nei browser e nei 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=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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 approfondire<\/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\">Emulatore Android<\/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 analoghi<\/h3>\n<p><\/p>\n<ul>\n<li>qualsiasi linguaggio di programmazione che preferite, in combinazione con i test Selenium\/Appium;<\/li>\n<li>qualsiasi test;<\/li>\n<li>qualunque test runner.<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Sistemi di controllo versione (Git)<\/h2>\n<p><\/p>\n<h3>Breve descrizione della tecnologia<\/h3>\n<p>\n Non sar\u00e0 una grande rivelazione per nessuno se dico che un sistema di controllo versione \u00e8 una parte estremamente importante dello sviluppo sia in team che individualmente. Basandosi su diverse fonti, si pu\u00f2 dire con certezza che Git \u00e8 il rappresentante pi\u00f9 popolare. Il sistema di controllo versione offre numerosi vantaggi, come lo scambio di codice, l'archiviazione delle versioni, il ripristino a rami precedenti, il monitoraggio della cronologia del progetto, i backup. Non approfondiremo ogni punto nei dettagli, dal momento che sono sicuro che voi gi\u00e0 lo conosciamo bene e lo utilizzate nel lavoro quotidiano. Tuttavia, se cos\u00ec non fosse, vi consiglio di sospendere la lettura di questo articolo e di colmare il vuoto il prima possibile.<\/p>\n<h3>Valore per l'infrastruttura di automazione<\/h3>\n<p>\n E qui potreste porre una domanda legittima: \"Perch\u00e9 ci parla di Git? Tutti lo sanno e lo usano sia per lo sviluppo del codice che per il codice dei test automatici\". Avreste assolutamente ragione, ma in questo articolo parliamo di infrastruttura e questa sezione funge da anteprima per la sezione 7: \"Infrastruttura come codice (IaC)\". Per noi questo significa che tutta l'infrastruttura, compresa quella di test, \u00e8 descritta sotto forma di codice, quindi possiamo anche applicare a essa sistemi di versioning e ottenere vantaggi simili a quelli per il codice di sviluppo e automazione.<\/p>\n<p>Esamineremo IaC pi\u00f9 in dettaglio al passo 7, ma anche ora \u00e8 possibile 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=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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 approfondire<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.atlassian.com\/git\/tutorials\/what-is-version-control\">Cos'\u00e8 il 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\">Introduzione \u2014 Informazioni sul Version Control<\/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:\/\/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 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, torniamo indietro di alcune decadi. In quei tempi, le persone acquistavano e utilizzavano macchine server per eseguire applicazioni. Ma nella maggior parte dei casi, le risorse necessarie per l'esecuzione non erano note in anticipo. Di conseguenza, le aziende spendevano soldi per acquistare costosi server potenti, ma parte di queste potenzialit\u00e0 non era completamente utilizzata.<\/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 consentito di eseguire applicazioni in modo indipendente all'interno di un singolo server, assegnando uno spazio completamente isolato. Ma, sfortunatamente, ogni tecnologia ha i suoi svantaggi. L'esecuzione delle VM richiede un sistema operativo completo, che consuma CPU, RAM e spazio di archiviazione, e, a seconda del sistema operativo, \u00e8 necessario considerare anche le spese per la licenza. Questi fattori influenzano la velocit\u00e0 di avvio e complicano la portabilit\u00e0.<\/p>\n<p>Ed ecco che siamo arrivati alla containerizzazione. Ancora una volta, questa tecnologia ha risolto il problema precedente, poich\u00e9 i container non utilizzano un intero sistema operativo, il che consente di liberare un grande numero di risorse e fornisce una soluzione rapida e flessibile per la portabilit\u00e0.<\/p>\n<p>Certo, la tecnologia di containerizzazione non \u00e8 qualcosa di nuovo ed \u00e8 stata presentata per la prima volta alla fine degli anni '70. In quel periodo sono state condotte molte ricerche, sviluppi e tentativi. Ma \u00e8 stato Docker a adattare questa tecnologia e renderla facilmente accessibile per le masse. Oggi, quando parliamo di container, nella maggior parte dei casi ci riferiamo a Docker. Quando parliamo di container Docker, intendiamo i container Linux. Possiamo utilizzare sistemi Windows e macOS per eseguire i container, ma \u00e8 importante capire che in tal caso si crea un ulteriore strato. Ad esempio, Docker su Mac avvia silenziosamente i container all'interno di una leggera VM Linux. Torneremo su questo argomento quando discuteremo dell'esecuzione di emulatori Android all'interno di container, poich\u00e9 qui emerge un aspetto molto importante che necessita di 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 fantastici. Diamo un'occhiata a questo nel contesto dell'automazione, poich\u00e9 ogni strumento o tecnologia dovrebbe risolvere un problema. Identifichiamo i problemi evidenti dell'automazione dei test nel contesto dei test UI:<\/p>\n<ul>\n<li>un'enorme quantit\u00e0 di dipendenze nell'installazione di Selenium e soprattutto di Appium;<\/li>\n<li>problemi di compatibilit\u00e0 tra le versioni dei browser, degli emulatori e dei driver;<\/li>\n<li>mancanza di uno spazio isolato per browser\/emulatori, il che \u00e8 particolarmente critico per l'esecuzione parallela;<\/li>\n<li>\u00e8 difficile gestire e mantenere se \u00e8 necessario avviare 10, 50, 100 o addirittura 1000 browser contemporaneamente.<\/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 nessuno che qualcuno abbia tentato di combinarli per ottenere uno strumento potente in grado di risolvere i problemi sopra menzionati. Analizziamo queste soluzioni in modo pi\u00f9 dettagliato.\u00a0<\/p>\n<p><u>Selenium grid in docker<\/u><\/p>\n<p>Questo strumento \u00e8 il pi\u00f9 popolare al mondo per 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). L'Hub \u00e8 il nodo centrale che riceve tutte le richieste dai test e le distribuisce ai rispettivi Nodes. Per ogni Node possiamo configurare specifiche impostazioni, ad esempio specificando il browser desiderato e la sua versione. Tuttavia, dobbiamo ancora occuparci dei driver compatibili per i browser e installarli sui Nodes appropriati. Per questa ragione, Selenium grid non \u00e8 utilizzato in modo puro, tranne nei casi in cui dobbiamo lavorare con browser che non possono essere installati su Linux OS. In tutti gli altri casi, una soluzione molto pi\u00f9 flessibile e appropriata \u00e8 l'utilizzo di immagini Docker per avviare Selenium grid Hub e Nodes. Questo approccio semplifica notevolmente la gestione dei nodi, poich\u00e9 possiamo scegliere l'immagine che ci serve con versioni compatibili di browser e driver gi\u00e0 installati.<\/p>\n<p>Nonostante le recensioni negative sulla stabilit\u00e0 del funzionamento, soprattutto quando si avviano molti Nodes in parallelo, Selenium grid rimane ancora lo strumento pi\u00f9 popolare per l'esecuzione parallela dei test Selenium. \u00c8 importante sottolineare che nell'open-source compaiono continuamente varie revisioni e modifiche a questo strumento, che affrontano diversi 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 reso la vita di molti ingegneri di automazione molto pi\u00f9 semplice. Prima di tutto, non \u00e8 un'ennesima modifica del Selenium grid. Invece, gli sviluppatori hanno creato una versione completamente nuova del Selenium Hub in linguaggio Golang, che, insieme a 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 richiesti e le loro versioni, il che non \u00e8 un problema quando si lavora solo con un browser. Ma quando si tratta di pi\u00f9 browser supportati, Selenoid \u00e8 la soluzione numero uno, grazie alla funzione 'browser on demand'. Tutto ci\u00f2 che ci serve 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 necessario con il browser richiesto. Quando il test \u00e8 terminato, Selenoid rimuover\u00e0 il contenitore, liberando cos\u00ec risorse per le richieste successive. Questo approccio elimina completamente il noto problema della 'degradazione dei nodi', che spesso incontriamo nel Selenium grid.<\/p>\n<p>Ma, purtroppo, Selenoid non \u00e8 ancora una soluzione magica. Abbiamo ottenuto la funzione 'browser on demand', ma la funzione 'risorse on demand' non \u00e8 ancora disponibile. Per utilizzare Selenoid, dobbiamo distribuirlo su hardware fisico o su VM, il che significa che dobbiamo sapere in anticipo quante risorse dedicare. Credo che questo non sia un problema per i progetti piccoli che fanno girare 10, 20 o anche 30 browser in parallelo. Ma cosa succede se abbiamo bisogno di 100, 500, 1000 e oltre? Non ha senso mantenere e pagare per un numero cos\u00ec elevato di risorse continuamente. Nelle sezioni 5 e 6 di questo articolo discuteremo le soluzioni che consentono di scalare, riducendo significativamente i costi per l'azienda.<\/p>\n<p><u>Selenoid per Android<\/u><\/p>\n<p>Dopo il successo di Selenoid come strumento per l'automazione web, le persone volevano avere qualcosa di simile per Android. E questo \u00e8 avvenuto: Selenoid \u00e8 stato rilasciato con supporto per Android. Da un punto di vista utente ad alto livello, il principio di funzionamento \u00e8 simile all'automazione web. L'unica differenza \u00e8 che invece di contenitori con i browser, Selenoid avvia contenitori con emulatori Android. A mio avviso, attualmente \u00e8 lo strumento gratuito pi\u00f9 potente per eseguire test Android in parallelo.<\/p>\n<p>Non mi piacerebbe parlare degli aspetti negativi di questo strumento, poich\u00e9 mi piace davvero molto. Tuttavia, ci sono alcuni svantaggi, simili a quelli dell'automazione web, relativi alla scalabilit\u00e0. In aggiunta, \u00e8 importante menzionare un ulteriore limite che potrebbe essere una sorpresa se si sta configurando 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 annidata. Nella guida pratica mostrer\u00f2 come attivarlo su una VM Linux. Tuttavia, se sei un utente di macOS e vuoi eseguire Selenoid localmente, sar\u00e0 impossibile eseguire test Android. Ma puoi sempre avviare una VM Linux localmente con la 'virtualizzazione annidata' impostata e distribuire 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. Si tratta di 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=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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 approfondire<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/resources\/what-container\">Docker: quale contenitore \u00e8<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/get-started\">Docker: inizia<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/containerjournal.com\/topics\/container-ecosystems\/5-container-alternatives-to-docker\/\">5 alternative ai contenitori di 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 analoghi<\/h3>\n<p><\/p>\n<ul>\n<li>Esistono altri strumenti di containerizzazione, ma Docker \u00e8 il pi\u00f9 popolare. Se vuoi provare qualcos'altro, tieni presente che gli strumenti che abbiamo esaminato per l'esecuzione parallela dei test Selenium non funzioneranno immediatamente.\u00a0\u00a0<\/li>\n<li>Come gi\u00e0 detto, ci sono molte modifiche a Selenium grid, 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 modifiche di questa tecnologia secondo il mio punto di vista. Online troverete molti articoli con diverse interpretazioni ed \u00e8 assolutamente normale se la vostra opinione differisce. La cosa pi\u00f9 importante \u00e8 che siate sulla stessa lunghezza d'onda dei vostri colleghi.<\/p>\n<p>Quindi, ci sono 3 termini: CI \u2014 Continuous Integration (integrazione continua), CD \u2014 Continuous Delivery (consegna continua) e di nuovo CD \u2014 Continuous Deployment (distribuzione continua). (<i>Da qui in poi utilizzer\u00f2 questi termini in inglese<\/i>). Ogni modifica aggiunge alcuni passaggi aggiuntivi al vostro flusso di lavoro di sviluppo. Ma la parola <u>continuous<\/u> (continuo) \u00e8 fondamentale. 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>L'integrazione continua \u2013<\/strong> \u00e8 il primo passo dell'evoluzione. Dopo aver inviato nuovo codice sul server, ci aspettiamo di ricevere un feedback rapido che le nostre modifiche sono a posto. Di solito la CI include l'esecuzione di strumenti di analisi statica del codice e test modulari\/API interni. Ci\u00f2 consente di ottenere informazioni sul nostro codice gi\u00e0 pochi secondi\/minuti dopo.<\/li>\n<li><strong>Continuous Delivery<\/strong> \u00e8 un passo pi\u00f9 avanzato, in cui eseguiamo test di integrazione\/UI. Tuttavia, in questa fase non riceviamo risultati cos\u00ec rapidamente come nel caso della CI. In primo luogo, questi tipi di test richiedono pi\u00f9 tempo per essere completati. In secondo luogo, prima di avviarli dobbiamo distribuire le nostre modifiche in un ambiente di test\/staging. Inoltre, se parliamo di sviluppo mobile, c'\u00e8 una fase aggiuntiva per creare una build della nostra applicazione.<\/li>\n<li><strong>Distribuzione continua<\/strong> presuppone che rilasciamo automaticamente (release) 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 impostare diverse fasi, come l'esecuzione di test smoke in produzione e la raccolta di metriche di interesse. Il Continuous Deployment \u00e8 possibile solo con una buona copertura di test automatizzati. Se sono necessari interventi manuali, inclusi i test, allora non \u00e8 pi\u00f9 <u>Continuo<\/u> (continuo). Allora possiamo dire che il nostro pipeline si attiene 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, si intende che dobbiamo distribuire le nostre modifiche e i servizi correlati negli ambienti di test. Il 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 guardare l'illustrazione della modifica dell'architettura, voglio dire qualche parola su GitLab CI. A differenza di altri strumenti CI\/CD, GitLab fornisce un repository remoto e molte altre funzioni aggiuntive. Pertanto, GitLab \u00e8 pi\u00f9 di un semplice CI. Include out of the box la gestione del codice sorgente, la gestione Agile, pipeline CI\/CD, strumenti di logging e raccolta di metriche. L'architettura di GitLab \u00e8 composta da 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 un'API che memorizza il proprio stato in un database, gestisce progetti\/build e fornisce un'interfaccia utente. GitLab Runner \u00e8 un'applicazione che elabora i build. Pu\u00f2 essere distribuito separatamente e lavora con GitLab CI\/CD tramite un'API. Per eseguire i test hai bisogno sia dell'istanza di GitLab che del Runner.<\/p><\/blockquote>\n<p><\/p>\n<h3>Illustrazione dello stato attuale dell'infrastruttura<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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 approfondire<\/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\">Libro sul 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=\">Libro sul Continuous Delivery<\/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:\/\/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 \u2018cloud pubblici\u2019. Nonostante i grandi vantaggi offerti dalle tecnologie di virtualizzazione e containerizzazione sopra descritte, abbiamo ancora bisogno di risorse computazionali. Le aziende acquistano server costosi o affittano data center, ma in tal caso \u00e8 necessario effettuare dei calcoli (a volte irrealistici) su quante risorse ci serviranno, se le utilizzeremo 24\/7 e per quali scopi. Ad esempio, per la produzione \u00e8 necessario un server funzionante 24 ore su 24, ma sono necessarie risorse simili per i test durante gli orari non lavorativi? Questo dipende anche dal tipo di test che si sta eseguendo. Un esempio possono essere i test di carico\/stress che prevediamo di eseguire durante le ore non lavorative per avere risultati il giorno dopo. Tuttavia, \u00e8 evidente che la disponibilit\u00e0 24 ore su 24 dei server non \u00e8 necessaria per i test automatici end-to-end e soprattutto per gli ambienti di test manuale. In queste situazioni, sarebbe utile poter ottenere quante pi\u00f9 risorse necessarie on demand, utilizzarle e smettere di pagare quando non sono pi\u00f9 necessarie. Inoltre, sarebbe fantastico poterle ottenere immediatamente, facendo qualche clic o eseguendo un paio di script. \u00c8 a questo scopo che si utilizzano i cloud pubblici. Vediamo la definizione:<\/p>\n<blockquote><p>\u00abIl cloud pubblico \u00e8 definito come servizi di calcolo offerti da fornitori di terze parti su Internet pubblico, rendendoli disponibili a chiunque desideri utilizzarli o acquistarli. Possono essere gratuiti o venduti su richiesta, permettendo ai clienti di pagare solo per l'uso dei cicli CPU, dello storage o della larghezza di banda che consumano\u00bb.<\/p><\/blockquote>\n<p>\n Si dice spesso che i cloud pubblici siano costosi. Ma la loro idea principale \u00e8 la riduzione dei costi 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 specialisti sono anch'essi una risorsa costosa. \u00c8 necessario considerare che i cloud pubblici semplificano notevolmente la manutenzione dell'infrastruttura, permettendo agli ingegneri di concentrarsi su compiti pi\u00f9 importanti.\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. Pi\u00f9 browser ed emulatori vogliamo eseguire contemporaneamente, maggiore sar\u00e0 la CPU e la memoria necessarie, e pi\u00f9 soldi dovremo pagare. Pertanto, i cloud pubblici nel contesto dell'automazione dei test ci consentono di avviare un numero elevato (100, 200, 1000 ...) di browser\/emulatori su richiesta, ricevere i risultati dei test il prima possibile e smettere di pagare per queste enormi risorse.\u00a0<\/p>\n<p>I fornitori di cloud pi\u00f9 popolari sono Amazon Web Services (AWS), Microsoft Azure e Google Cloud Platform (GCP). La guida pratica fornisce esempi di utilizzo di GCP, ma in generale non importa cosa si utilizzi per le attivit\u00e0 di automazione. Tutti offrono funzionalit\u00e0 simili. Di solito, nella scelta del fornitore, la guida si concentra su tutta l'infrastruttura aziendale e sui requisiti aziendali, il che \u00e8 al di fuori dell'ambito di questo articolo. Per gli ingegneri dell'automazione, risulta pi\u00f9 interessante confrontare l'uso di fornitori di cloud con l'uso di piattaforme cloud specificamente per obiettivi di test, come Sauce Labs, BrowserStack, BitBar e cos\u00ec via. Quindi facciamolo! A mio avviso, Sauce Labs \u00e8 la conosciuta fattoria di testing nel cloud, ed \u00e8 per questo che l'ho scelta per il confronto.\u00a0<\/p>\n<p><u>GCP contro Sauce Labs per scopi di automazione:<\/u><\/p>\n<p>Immaginiamo di dover eseguire contemporaneamente 8 test web e 8 test Android. Per questo, utilizzeremo GCP e avvieremo 2 macchine virtuali con Selenoid. Nella prima solleveremo 8 contenitori con browser. Nella seconda \u2013 8 contenitori con emulatori. Diamo un'occhiata ai prezzi:\u00a0\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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, abbiamo 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 modo pi\u00f9 flessibile ed economico \u00e8 impostare valori utente specifici per CPU\/Memoria, ma al momento, per il confronto con Sauce Labs, non \u00e8 fondamentale.<\/p>\n<p>Ecco le tariffe per l'uso di Sauce Labs:<\/p>\n<p><img decoding=\"async\" alt=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#039;infrastruttura di automazione dei test da zero\" src=\"\/wp-content\/uploads\/2020\/04\/1367d2b59bbef9603b4b4be166e8d721.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSuppongo che tu abbia gi\u00e0 notato la differenza, ma per sicurezza, riporter\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 il Web<\/strong><br \/>\nTest paralleli in Cloud8 virtuale<br \/>\n$1.559<br \/>\n&#8212;<br \/>\n&#8212;<\/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 in Real Device Cloud 8<br \/>\n$1.999<br \/>\n&#8212;<br \/>\n&#8212;<\/p>\n<p>\nCome \u00e8 evidente, la differenza di costo \u00e8 enorme, soprattutto se si eseguono test solo nell'orario lavorativo di dodici ore. Ma \u00e8 possibile ridurre ulteriormente i costi utilizzando macchine preemptible. Di cosa si tratta?<\/p>\n<blockquote><p>Una VM preemptible \u00e8 un'istanza che puoi creare ed eseguire a un prezzo molto inferiore rispetto alle normali istanze. Tuttavia, Compute Engine potrebbe terminare (preempt) queste istanze se ha bisogno di accedere a quelle risorse per altri compiti. Le istanze preemptible sono capacit\u00e0 in eccesso di 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 sopportare possibili preemption delle istanze, allora le istanze preemptible possono ridurre significativamente i tuoi costi di 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 siferma completamente. Le istanze preemptible completano i tuoi compiti di elaborazione batch senza aggiungere ulteriore carico di lavoro sulle tue istanze esistenti e senza richiedere di pagare il prezzo intero per ulteriori normali istanze.<\/p><\/blockquote>\n<p>\n E questo non \u00e8 ancora tutto! In realt\u00e0 sono sicuro che nessuno esegue test per 12 ore di fila senza 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 della nostra attivit\u00e0 scenderebbe fino a 11$ al mese per 8 browser. Non \u00e8 fantastico? Ma con le macchine preemptible dobbiamo essere cauti e pronti a interruzioni e funzionamento instabile, anche se queste situazioni possono essere previste e gestite programmaticamente. Ne vale la pena!<\/p>\n<p>Ma in nessun modo dico 'non utilizzare mai fattorie di test nel cloud'. Hanno una serie di vantaggi. Prima di tutto, non \u00e8 solo una macchina virtuale, ma una soluzione completa per l'automazione dei test con un set di funzionalit\u00e0 pronte all'uso: accesso remoto, log, screenshot, registrazione video, vari browser e dispositivi mobili fisici. In molte situazioni pu\u00f2 essere un'alternativa lussuosa insostituibile. Le piattaforme di test sono particolarmente utili per l'automazione iOS, quando i cloud pubblici possono offrire solo sistemi Linux\/Windows. Ma parleremo di iOS nei prossimi articoli. Raccomando di valutare sempre la situazione e basarsi sugli obiettivi: in alcuni casi \u00e8 pi\u00f9 economico ed efficiente utilizzare cloud pubblici, mentre in altri le piattaforme di test valgono sicuramente i soldi spesi.<\/p>\n<h3>Illustrazione dello stato attuale dell'infrastruttura<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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 approfondire<\/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: prezzi delle 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\/\">Confronto tra provider 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 \u00e8 composta da 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 sollevare contenitori con browser ed emulatori. Per ridurre i costi, avviamo queste macchine virtuali su richiesta e le arrestiamo quando non stiamo eseguendo test. C'\u00e8 qualcos'altro che pu\u00f2 migliorare la nostra infrastruttura? La risposta \u00e8 s\u00ec! Presentiamo Kubernetes (K8s)!<\/p>\n<p>Iniziamo a esaminare come le parole orchestrazione, cluster e Kubernetes siano correlate. A un alto livello, l'orchestrazione \u00e8 un sistema che distribuisce e gestisce le applicazioni. Per automatizzare i test, tali applicazioni containerizzabili sono Selenium grid e Selenoid. Docker e K8s si completano a vicenda. Il primo \u00e8 utilizzato per distribuire applicazioni, il secondo per l'orchestrazione. A sua volta, K8s \u00e8 un cluster. L'obiettivo del cluster \u00e8 utilizzare le VM come nodi, permettendo di installare varie funzionalit\u00e0, programmi e servizi all'interno di un unico server (cluster). Se uno dei nodi si guasta, altri nodi si occupano della situazione, garantendo il funzionamento ininterrotto della nostra applicazione. Inoltre, K8s offre funzionalit\u00e0 importanti relative alla scalabilit\u00e0, permettendoci di ottenere automaticamente la quantit\u00e0 ottimale di risorse in base al carico e ai limiti stabiliti.<\/p>\n<p>A dire il vero, installare manualmente Kubernetes da zero \u00e8 un compito piuttosto complesso. Lascio un link a un noto tutorial pratico \"Kubernetes The Hard Way\", e, se vi interessa, potete provare a esercitarvi. Ma, per fortuna, esistono alternative e strumenti. Il pi\u00f9 semplice tra questi \u00e8 utilizzare Google Kubernetes Engine (GKE) in GCP, che consente di ottenere un cluster pronto dopo pochi clic. Per iniziare a studiare, consiglio di adottare questo approccio, in quanto permette di concentrarsi sull'apprendimento di come utilizzare K8s per le proprie esigenze, piuttosto che esplorare come i componenti interni debbano essere integrati tra loro.\u00a0<\/p>\n<h3>Valore per l'infrastruttura di automazione<\/h3>\n<p>\nConsideriamo alcune delle funzioni significative offerte da K8s:<\/p>\n<ul>\n<li>distribuzione dell'applicazione: utilizzo di un cluster multi-nodi, anzich\u00e9 VMs;<\/li>\n<li>scalabilit\u00e0 dinamica: riduce i costi delle risorse utilizzate solo su richiesta;<\/li>\n<li>auto-guarigione (Self-healing): ripristino automatico dei pods (con il ripristino dei contenitori);<\/li>\n<li>rilascio di aggiornamenti e rollback senza interruzioni: l'aggiornamento di strumenti, browser ed emulatori non interrompe il lavoro degli utenti attuali.<\/li>\n<\/ul>\n<p>\n Ma K8s non \u00e8 ancora una soluzione universale. Per comprendere tutti i vantaggi e i limiti nel contesto degli strumenti che stiamo considerando (Selenium grid, Selenoid), discutiamo brevemente la struttura di K8s. Il cluster contiene due tipi di nodi: Master Nodes e Workers Nodes. I Master Nodes sono responsabili della gestione, distribuzione e decisioni di scheduling. I Worker Nodes sono dove le applicazioni vengono eseguite. I nodi contengono anche l'ambiente di esecuzione dei contenitori. Nel nostro caso, si tratta di Docker, che si occupa delle operazioni relative ai contenitori. Ma ci sono anche soluzioni alternative, come<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containerd\/containerd\"> containerd<\/a><\/noindex>. \u00c8 importante capire che la scalabilit\u00e0 o l'auto-guarigione non si riferiscono direttamente ai contenitori. Questo si realizza attraverso l'aggiunta\/rimozione del numero di pods, che a loro volta contengono i contenitori (solitamente un contenitore per pod, ma a seconda del compito potrebbero essercene anche di pi\u00f9). La gerarchia ad alto livello consiste in worker nodes, all'interno dei quali si trovano i pods, all'interno dei quali vengono eseguiti i contenitori.<\/p>\n<p>La funzione di scaling \u00e8 fondamentale e pu\u00f2 essere applicata sia ai nodes all'interno del cluster node-pool che ai pods all'interno del node. Esistono 2 tipi di scaling, che si riferiscono sia ai nodes che ai pods. Il primo tipo \u00e8 lo scaling orizzontale, dove si aumenta il numero di nodes\/pods. Questo tipo \u00e8 il pi\u00f9 preferibile. Il secondo tipo, di conseguenza, \u00e8 quello verticale. Lo scaling avviene aumentando le dimensioni dei nodes\/pods, non il loro numero.<\/p>\n<p>Ora esaminiamo i nostri strumenti nel contesto dei termini citati 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 sorprende che Selenium grid possa essere distribuito in K8s. Un esempio di come farlo si pu\u00f2 trovare nel repository ufficiale di K8s. Come al solito, allego i link alla fine della sezione. Inoltre, nella guida pratica viene mostrato come farlo usando Terraform. Ci sono anche istruzioni su come scalare il numero di pods che contengono contenitori con browser. Tuttavia, la funzionalit\u00e0 di scaling automatico nel contesto di K8s \u00e8 ancora un compito non del tutto chiaro. Quando ho iniziato a studiare, non ho trovato alcuna guida pratica o raccomandazioni. Dopo diverse ricerche e esperimenti con il supporto del team DevOps, abbiamo scelto un approccio che prevede l'innalzamento di contenitori con i browser necessari all'interno di un solo pod, che si trova all'interno di un singolo worker node. Questo metodo ci consente di applicare una strategia di scaling 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, soprattutto dopo il rilascio di Selenium grid 4 con l'architettura interna modificata.<\/p>\n<p><u>Selenoid<\/u>:<\/p>\n<p>Attualmente, il deployment di Selenoid in K8s \u00e8 la pi\u00f9 grande fonte di delusione. Non sono compatibili. Teoricamente possiamo sollevare un contenitore Selenoid all'interno di un pod, ma quando Selenoid inizier\u00e0 a lanciare contenitori con browser, essi saranno ancora all'interno dello stesso pod. Questo rende impossibile il scaling e, di conseguenza, il funzionamento di Selenoid all'interno del cluster non differir\u00e0 dal funzionamento all'interno di una macchina virtuale. Fine della storia.<\/p>\n<p><u>Moon<\/u>:<\/p>\n<p>Sapendo di questo collo di bottiglia lavorando con Selenoid, gli sviluppatori hanno rilasciato uno strumento pi\u00f9 potente, chiamato Moon. Questo strumento \u00e8 stato originariamente concepito per lavorare con Kubernetes e, come risultato, si pu\u00f2 e si deve utilizzare la funzione di autoscaling. Inoltre, direi che al momento \u00e8 <u>l'unica<\/u> lo strumento in ambito Selenium, che ha nativamente il supporto per il cluster K8s (<i>non c'\u00e8 pi\u00f9, guarda il prossimo strumento <\/i>). La caratteristica principale di Moon, che fornisce questo supporto, \u00e8:\u00a0<\/p>\n<blockquote><p>Completamente stateless. Selenoid memorizza in memoria le informazioni sulle sessioni del browser attualmente in esecuzione. Se per qualche motivo il suo processo si arresta, tutte le sessioni in esecuzione vengono perse. Moon, al contrario, non ha uno stato interno e pu\u00f2 essere replicato tra i data center. Le sessioni del browser rimangono attive anche se uno o pi\u00f9 replica si fermano.<\/p><\/blockquote>\n<p>Quindi, Moon \u00e8 una fantastica soluzione, ma ha un problema: non \u00e8 gratuito. Il prezzo dipende dal numero di sessioni. \u00c8 possibile avviare gratuitamente solo da 0 a 4 sessioni, il che non \u00e8 molto utile. Ma, a partire dalla quinta sessione, si dovr\u00e0 pagare 5$ per ciascuna. La situazione pu\u00f2 variare da azienda a azienda, ma nel nostro caso l'uso di Moon \u00e8 senza senso. Come ho descritto sopra, possiamo avviare VM con Selenium Grid su richiesta o aumentare il numero di nodi nel cluster. Approssimativamente, per una pipeline avviamo 500 browser e fermiamo tutte le risorse dopo il completamento dei test. Se avessimo utilizzato Moon, avremmo dovuto pagare 500 x 5 = 2500 $ al mese, indipendentemente da quanto spesso avviamo i test. E ancora, non dico \"non usate Moon\". Per le vostre esigenze potrebbe essere una soluzione indispensabile, per esempio, se nella vostra organizzazione ci sono molti progetti\/teams e avete bisogno di un enorme cluster condiviso per tutti. Come sempre, lascio un link alla fine e consiglio di fare tutti i calcoli necessari nel contesto del vostro compito.<\/p>\n<p><u>Callisto<\/u>: (<i><strong>Attenzione! Questo non \u00e8 presente nell'articolo originale ed \u00e8 contenuto solo nella traduzione russa<\/strong><\/i>)<\/p>\n<p>Come ho detto, Selenium \u00e8 uno strumento molto popolare e il settore IT si sta sviluppando rapidamente. Mentre lavoravo alla traduzione, \u00e8 apparso in rete un nuovo strumento promettente, Callisto (saluti a Cypress e ad altri \"killer\" di Selenium). Funziona nativamente con K8s e permette di avviare i container Selenoid nei pods, distribuiti sui Nodes. Funziona immediatamente \"out of the box\", compresa l'auto-scalabilit\u00e0. Fantastico, ma deve essere testato. Sono gi\u00e0 riuscito a implementare questo strumento e a condurre diversi esperimenti. Ma \u00e8 presto per trarre conclusioni; dopo aver ottenuto risultati a lungo termine, forse far\u00f2 una recensione nei prossimi articoli. Per ora lascio solo i link per ricerche autonome.\u00a0\u00a0<\/p>\n<h3>Illustrazione dello stato attuale dell'infrastruttura<\/p>\n<h3><img decoding=\"async\" alt=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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 approfondire<\/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 di 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 analoghi<\/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 E siamo giunti all'ultimo capitolo. Di solito, questa tecnologia e i compiti ad essa correlati non rientrano nelle responsabilit\u00e0 degli ingegneri dell'automazione. E questo ha le sue ragioni. In primo luogo, in molte organizzazioni le questioni infrastrutturali sono sotto il controllo del dipartimento DevOps e il team di sviluppo non si preoccupa granch\u00e9 di ci\u00f2 che fa funzionare il pipeline e in che modo mantenere tutto ci\u00f2 che lo riguarda. In secondo luogo, diciamolo chiaramente, la pratica \"Infrastruttura come codice (IaC)\" non \u00e8 ancora adottata in molte aziende. Ma \u00e8 sicuramente diventata una tendenza popolare ed \u00e8 importante cercare di essere coinvolti nei processi, approcci e strumenti correlati. O, almeno, essere al corrente degli eventi.<\/p>\n<p>Iniziamo con la motivazione per l'utilizzo di questo approccio. Abbiamo gi\u00e0 discusso che per avviare i test in GitlabCI avremo bisogno di almeno risorse per eseguire Gitlab Runner. E per avviare i contenitori con i browser\/emulatori dobbiamo riservare una VM o un cluster. Oltre alle risorse per il testing, abbiamo bisogno di un numero significativo di risorse per supportare gli ambienti di sviluppo, staging, produzione, il che include anche database, pianificazioni automatiche, configurazioni di rete, load balancer, diritti degli utenti e cos\u00ec via. Il problema chiave riguarda gli sforzi richiesti per mantenere tutto ci\u00f2. Ci sono diversi modi in cui possiamo apportare modifiche e implementare aggiornamenti. Ad esempio, nel contesto di GCP possiamo usare la console UI nel browser e svolgere tutte le operazioni cliccando sui pulsanti. Un'alternativa potrebbe essere l'utilizzo delle chiamate API per interagire con le entit\u00e0 cloud o l'applicazione dell'utility da riga di comando gcloud per eseguire le necessarie manipolazioni. Tuttavia, con un numero davvero elevato di diverse entit\u00e0 ed elementi infrastrutturali, diventa difficile se non impossibile eseguire tutte le operazioni manualmente. Inoltre, tutte queste azioni manuali sono incontrollabili. Non possiamo inviarle in revisione prima dell'esecuzione, utilizzare un sistema di controllo versioni e ripristinare rapidamente le modifiche che hanno causato un incidente. Per affrontare tali problemi, gli ingegneri hanno creato e stanno creando script automatici in bash\/shell, il che non \u00e8 molto diverso dai metodi precedenti, poich\u00e9 non sono cos\u00ec facili da leggere, comprendere, mantenere e modificare rapidamente in uno stile procedurale.<\/p>\n<p>In questo articolo e guida pratica utilizzo 2 strumenti legati alla pratica dell'IaC. Questi sono Terraform e Ansible. Alcuni ritengono che non abbia senso usarli contemporaneamente, poich\u00e9 le loro funzionalit\u00e0 sono simili e sono intercambiabili. Ma il punto \u00e8 che inizialmente vengono posti obiettivi completamente diversi. E il fatto che questi strumenti debbano completarsi a vicenda \u00e8 stato confermato durante una presentazione congiunta da sviluppatori che rappresentano le aziende HashiCorp e RedHat. La differenza concettuale sta nel fatto che Terraform \u00e8 uno strumento di provisioning per la gestione dei server stessi. Mentre Ansible \u00e8 uno strumento di gestione delle configurazioni, il cui compito \u00e8 l'installazione, la configurazione e la gestione del software su questi server.<\/p>\n<p>Un'altra caratteristica chiave 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 come risultato dell'esecuzione. Ad esempio, se intendiamo creare 10 VM e applicare le modifiche tramite Terraform, otterremo 10 VM. Se applichiamo lo script di nuovo, non accadr\u00e0 nulla, poich\u00e9 abbiamo gi\u00e0 10 VM, e Terraform \u00e8 a conoscenza di questo, poich\u00e9 memorizza lo stato attuale dell'infrastruttura in un file di stato. D'altra parte, Ansible utilizza un approccio procedurale e, se gli chiediamo di creare 10 VM, al primo avvio otterremo 10 VM, analogamente a Terraform. Ma dopo un secondo avvio, avremo gi\u00e0 20 VM. Qui sta la differenza importante. Nello stile procedurale non memorizziamo lo stato attuale e descriviamo semplicemente la sequenza di passaggi che devono essere eseguiti. Naturalmente, possiamo gestire diverse situazioni, aggiungere controlli sull'esistenza delle risorse e lo stato attuale, ma non ha senso sprecare il nostro tempo e fare sforzi per controllare questa logica. Inoltre, ci\u00f2 aumenta il rischio di commettere errori.\u00a0<\/p>\n<p>Riassumendo tutto quanto detto sopra, si pu\u00f2 concludere che per il provisioning dei server lo strumento pi\u00f9 adatto \u00e8 Terraform e la notazione dichiarativa. Mentre il lavoro di gestione delle configurazioni \u00e8 meglio delegarlo ad Ansible. Capito questo, 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 come parte dell'intera infrastruttura aziendale. Ci\u00f2 significa che tutte le pratiche IaC devono essere applicate globalmente alle risorse dell'intera organizzazione. La responsabilit\u00e0 di questo dipende dai vostri processi. Il team DevOps ha pi\u00f9 esperienza in queste questioni, vedendo l'intero quadro degli eventi. 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 richieste e le opportunit\u00e0 di miglioramento. La soluzione migliore \u00e8 lavorare insieme, scambiando conoscenze e idee per raggiungere il risultato atteso.\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 finora:<\/p>\n<p>1. Descrivere attraverso Terraform le caratteristiche e i parametri necessari delle VM e dei cluster.<\/p>\n<p>2. Installare con Ansible gli strumenti necessari per i test: docker, Selenoid, Selenium Grid e caricare le versioni desiderate dei browser\/emulatori.<\/p>\n<p>3. Descrivere tramite Terraform le caratteristiche della VM in cui sar\u00e0 eseguito GitLab Runner.<\/p>\n<p>4. Installare con Ansible GitLab Runner e gli strumenti ausiliari necessari, impostare le configurazioni.<\/p>\n<h3>Illustrazione dello stato attuale dell'infrastruttura<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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>Riferimenti per l'approfondimento:<\/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\">Una 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 analoghi<\/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>Passo<\/strong><br \/>\n<strong>Tecnologia<\/strong><br \/>\n<strong>Strumenti<\/strong><br \/>\n<strong>Valore per l'infrastruttura di automazione<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nEsecuzione in locale<br \/>\nNode.js, Selenium, Appium<\/p>\n<ul>\n<li>Strumenti pi\u00f9 popolari per web e mobile<\/li>\n<li>Supporto per molti linguaggi 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>Analoghe Vantaggi 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>Aggiornamento delle versioni semplice e flessibile<\/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>Riscontro 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 necessario)<\/li>\n<li>Facile da gestire e aggiornare<\/li>\n<li>Visibilit\u00e0 e controllo su tutte le risorse<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>6<\/strong><br \/>\nOrchestrazione<br \/>\nKubernetes<br \/>\nNel contesto di contenitori con browser\/emulatori all'interno dei pod:<\/p>\n<ul>\n<li>Scalabilit\u00e0 \/ autoscalabilit\u00e0<\/li>\n<li>Guarigione automatica<\/li>\n<li>Aggiornamenti e rollback senza interruzioni<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>7<\/strong><br \/>\nInfrastruttura come codice (IaC)<br \/>\nTerraform, Ansible<\/p>\n<ul>\n<li>Analoghi Vantaggi con l'infrastruttura di sviluppo<\/li>\n<li>Tutti i vantaggi del versionamento del codice<\/li>\n<li>Modifiche e manutenzione semplici<\/li>\n<li>Completamente automatizzato<\/li>\n<\/ul>\n<p><\/p>\n<h2>Mappa mentale diagrammi: evoluzione dell'infrastruttura<\/h2>\n<p>\nstep1: Locale<br \/>\n<img decoding=\"async\" alt=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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=\"Strumenti DevOps non solo per DevOps. Il processo di costruzione dell&#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>Cosa succede dopo?<\/h2>\n<p>\nQuindi, questo \u00e8 la fine dell'articolo. Ma in conclusione, vorrei stabilire alcune intese con voi.<\/p>\n<p><u>Da parte vostra<\/u><br \/>\n Come ho accennato all'inizio, vorrei che l'articolo portasse un beneficio pratico e vi aiutasse ad applicare le conoscenze acquisite nel lavoro reale. Rinnovo nuovamente<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 questo, non fermatevi, praticate, studiate i link e i libri pertinenti, scoprite come funziona nella vostra azienda, trovate aree da migliorare e partecipate. Buona fortuna!<\/p>\n<p><u>Da parte mia<\/u><\/p>\n<p>Dal titolo si vede che questa era solo la prima parte. Nonostante sia venuta piuttosto lunga, ci sono ancora temi importanti da affrontare. Nella seconda parte intendo esaminare l'infrastruttura di automazione nel contesto di IOS. A causa delle limitazioni di Apple, relative all'esecuzione degli emulatori IOS solo sui sistemi macOS, il nostro insieme di soluzioni \u00e8 ristretto. Ad esempio, non abbiamo la possibilit\u00e0 di utilizzare Docker per eseguire l'emulatore o cloud pubblici per avviare macchine virtuali. Ma questo non significa che non ci siano altre alternative. Cercher\u00f2 di tenervi aggiornati sulle soluzioni avanzate e sugli strumenti moderni!<\/p>\n<p>Inoltre, non ho menzionato temi piuttosto ampi legati al monitoraggio. Nella parte 3 intendo esaminare gli strumenti pi\u00f9 popolari per il monitoraggio dell'infrastruttura, oltre a quali dati e metriche dovrebbero essere presi in considerazione.<\/p>\n<p>E infine. In futuro, intendo pubblicare un corso video sulla costruzione di un'infrastruttura di test e sugli strumenti pi\u00f9 popolari. Attualmente, su internet ci sono molti corsi e lezioni su DevOps, ma tutto il materiale \u00e8 presentato nel contesto dello sviluppo, non dell'automazione dei test. In questo senso, ho davvero bisogno di feedback, 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 5.0.1.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\/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) 5.0.1.1\" \/>\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\" \/>\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\udd47Strumenti DevOps non solo per DevOps. 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","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","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}