{"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\/pt\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","title":{"rendered":"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Parte 1: Web \/ Android<\/h1>\n<p>\n <u>Nota<\/u>: <i>este artigo \u00e9 uma tradu\u00e7\u00e3o para o portugu\u00eas do artigo original\u00a0<\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@altunin.alexey.a\/devops-tools-are-not-only-for-devops-building-test-automation-infrastructure-from-scratch-18e351dde938?source=friends_link&amp;sk=54dcbf6ab96c5592d093b50e441f942e\"><i>\u00abAs ferramentas de DevOps n\u00e3o s\u00e3o apenas para DevOps. Construindo infraestrutura de automa\u00e7\u00e3o de testes do zero\u00bb.<\/i><\/a><\/noindex><i> No entanto, todas as ilustra\u00e7\u00f5es, links, cita\u00e7\u00f5es e termos foram mantidos no idioma original para evitar a distor\u00e7\u00e3o do significado durante a tradu\u00e7\u00e3o para o portugu\u00eas. Desejo a voc\u00ea um bom estudo!<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do 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 Atualmente, a profiss\u00e3o de DevOps \u00e9 uma das mais demandadas na ind\u00fastria de TI. Se voc\u00ea abrir sites populares de busca de emprego e aplicar um filtro de sal\u00e1rios, ver\u00e1 que as vagas relacionadas a DevOps est\u00e3o no topo da lista. No entanto, \u00e9 importante entender que isso se refere principalmente \u00e0 posi\u00e7\u00e3o de \u2018Senior\u2019, o que implica que o candidato possui um alto n\u00edvel de habilidades, conhecimento de tecnologias e ferramentas. Isso tamb\u00e9m vem acompanhado de um alto n\u00edvel de responsabilidade, relacionado ao funcionamento cont\u00ednuo da produ\u00e7\u00e3o. Contudo, temos esquecido o que \u00e9 DevOps. Inicialmente, n\u00e3o era uma pessoa ou departamento espec\u00edfico. Pesquisando defini\u00e7\u00f5es desse termo, encontramos muitos substantivos bonitos e corretos, como metodologia, pr\u00e1ticas, filosofia cultural, grupo de conceitos e assim por diante.<\/p>\n<p>Minha especializa\u00e7\u00e3o \u00e9 engenheiro de automa\u00e7\u00e3o de testes (QA automation engineer), mas eu acredito que n\u00e3o deve estar apenas relacionada \u00e0 escrita de testes autom\u00e1ticos ou ao desenvolvimento da arquitetura de frameworks de teste. Em 2020, o conhecimento em infraestrutura de automa\u00e7\u00e3o tamb\u00e9m \u00e9 indispens\u00e1vel. Isso permite organizar o processo de automa\u00e7\u00e3o de forma independente, desde a execu\u00e7\u00e3o dos testes at\u00e9 a apresenta\u00e7\u00e3o dos resultados a todas as partes interessadas de acordo com os objetivos estabelecidos. Como resultado, as habilidades de DevOps s\u00e3o um fator essencial para realizar esse trabalho. E tudo isso \u00e9 bom, mas, infelizmente, existe um problema (<i>spoiler: este artigo tenta simplificar esse problema<\/i>). Ele reside no fato de que DevOps \u00e9 complicado. E isso \u00e9 evidente, pois as empresas n\u00e3o gastar\u00e3o muito por algo que pode ser feito facilmente... No mundo do DevOps, h\u00e1 uma grande quantidade de ferramentas, termos e pr\u00e1ticas que precisam ser dominados. Isso \u00e9 especialmente dif\u00edcil no in\u00edcio da carreira e depende da experi\u00eancia t\u00e9cnica acumulada.<\/p>\n<p><img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do 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>Aqui provavelmente terminaremos a parte introdut\u00f3ria e nos concentraremos no objetivo deste artigo.\u00a0<\/p>\n<h3>Sobre o que \u00e9 este artigo<\/h3>\n<p>\nNeste artigo, vou compartilhar minha experi\u00eancia na constru\u00e7\u00e3o de uma infraestrutura para automa\u00e7\u00e3o de testes. \u00c9 poss\u00edvel encontrar muitas fontes de informa\u00e7\u00e3o na internet sobre diversas ferramentas e como utiliz\u00e1-las, mas gostaria de abord\u00e1-las exclusivamente no contexto da automa\u00e7\u00e3o. Acredito que muitos engenheiros de automa\u00e7\u00e3o conhecem a situa\u00e7\u00e3o em que os testes desenvolvidos, al\u00e9m de voc\u00ea mesmo, ningu\u00e9m mais os executa ou se preocupa em mant\u00ea-los. Como resultado, os testes se tornam obsoletos e \u00e9 preciso gastar tempo para atualiz\u00e1-los. Novamente, no in\u00edcio da carreira, isso pode ser uma tarefa bastante desafiadora: resolver de forma adequada quais ferramentas devem ajudar a resolver esse problema, como escolh\u00ea-las, configur\u00e1-las e mant\u00ea-las. Alguns testadores recorrem \u00e0 ajuda do DevOps (pessoas) e, sejamos sinceros, essa abordagem funciona. Em muitos casos, essa pode ser a \u00fanica op\u00e7\u00e3o, j\u00e1 que nos falta visibilidade sobre todas as depend\u00eancias. Mas, como sabemos, os DevOps s\u00e3o pessoas muito ocupadas, pois precisam pensar na infraestrutura de toda a empresa, no deployment, na monitora\u00e7\u00e3o, em microsservi\u00e7os e em outras tarefas semelhantes, dependendo da organiza\u00e7\u00e3o\/equipe. Como costuma acontecer, a automa\u00e7\u00e3o n\u00e3o \u00e9 uma prioridade. Nesse caso, devemos tentar fazer o m\u00e1ximo poss\u00edvel de nossa parte, do in\u00edcio ao fim. Isso reduzir\u00e1 as depend\u00eancias, acelerar\u00e1 o fluxo de trabalho, aprimorar\u00e1 nossas habilidades e permitir\u00e1 que tenhamos uma vis\u00e3o mais ampla do que est\u00e1 acontecendo.<\/p>\n<p>O artigo apresenta as ferramentas mais demandadas e populares e mostra como utiliz\u00e1-las para construir a infraestrutura de automa\u00e7\u00e3o passo a passo. Cada grupo \u00e9 representado por ferramentas que foram testadas com experi\u00eancia pessoal. Mas isso n\u00e3o significa que voc\u00ea deva usar as mesmas. As pr\u00f3prias ferramentas n\u00e3o s\u00e3o o mais importante, elas surgem e se tornam obsoletas. Nossa tarefa como engenheiros \u00e9 entender os princ\u00edpios b\u00e1sicos: por que precisamos desse grupo de ferramentas e quais tarefas de trabalho podemos resolver com a ajuda delas. Portanto, no final de cada se\u00e7\u00e3o, deixo links para ferramentas semelhantes que podem estar sendo utilizadas em sua organiza\u00e7\u00e3o.<\/p>\n<h3>O que n\u00e3o est\u00e1 neste artigo<\/h3>\n<p>\nMais uma vez, ressalto que o artigo n\u00e3o \u00e9 sobre ferramentas espec\u00edficas, portanto, n\u00e3o haver\u00e1 trechos de c\u00f3digo da documenta\u00e7\u00e3o ou descri\u00e7\u00f5es de comandos espec\u00edficos. No entanto, ao final de cada se\u00e7\u00e3o, deixarei links para um estudo mais detalhado.<\/p>\n<p>Isso \u00e9 feito porque:\u00a0<\/p>\n<ul>\n<li>este material \u00e9 muito f\u00e1cil de encontrar em v\u00e1rias fontes (documenta\u00e7\u00e3o, livros, cursos em v\u00eddeo);<\/li>\n<li>se come\u00e7armos a nos aprofundar, teremos que escrever 10, 20, 30 partes deste artigo (quando o plano \u00e9 de 2 a 3);<\/li>\n<li>eu simplesmente n\u00e3o quero desperdi\u00e7ar seu tempo, pois talvez voc\u00ea queira usar outras ferramentas para atingir os mesmos objetivos.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Pr\u00e1tica<\/h3>\n<p>\nEu realmente gostaria que este material fosse \u00fatil para cada leitor, e n\u00e3o apenas lido e esquecido. Em qualquer aprendizado, a pr\u00e1tica \u00e9 uma parte muito importante. Para isso, preparei<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> um reposit\u00f3rio no GitHub com um guia passo a passo sobre como fazer tudo do zero<\/a><\/noindex>. Tamb\u00e9m haver\u00e1 uma tarefa de casa para ter certeza de que voc\u00ea n\u00e3o copiou as linhas dos comandos sem pensar. <\/p>\n<h3>Plano<\/h3>\n<p><\/p>\n<p><strong>Passo<\/strong><br \/>\n<strong>Tecnologia<\/strong><br \/>\n<strong>Ferramentas<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nExecu\u00e7\u00e3o local (preparar testes de demonstra\u00e7\u00e3o web \/ android e execut\u00e1-los localmente)\u00a0<br \/>\nNode.js, Selenium, Appium<\/p>\n<p><strong>2<\/strong><br \/>\nSistemas de controle de vers\u00e3o\u00a0<br \/>\nGit<\/p>\n<p><strong>3<\/strong><br \/>\nCont\u00eaineriza\u00e7\u00e3o<br \/>\nDocker, grid do Selenium, Selenoid (Web, Android)<\/p>\n<p><strong>4<\/strong><br \/>\nCI \/ CD<br \/>\nGitlab CI<\/p>\n<p><strong>5<\/strong><br \/>\nPlataformas em nuvem<br \/>\nGoogle Cloud Platform<\/p>\n<p><strong>6<\/strong><br \/>\nOrquestra\u00e7\u00e3o<br \/>\nKubernetes<\/p>\n<p><strong>7<\/strong><br \/>\nInfraestrutura como c\u00f3digo (IaC)<br \/>\nTerraform, Ansible<\/p>\n<p><\/p>\n<h3>Estrutura de cada se\u00e7\u00e3o<\/h3>\n<p>\nPara manter a narrativa visual, cada se\u00e7\u00e3o \u00e9 descrita segundo o seguinte plano:<\/p>\n<ul>\n<li>uma breve descri\u00e7\u00e3o da tecnologia,<\/li>\n<li>o valor para a infraestrutura de automa\u00e7\u00e3o,<\/li>\n<li>uma ilustra\u00e7\u00e3o do estado atual da infraestrutura,<\/li>\n<li>links para estudo,<\/li>\n<li>ferramentas semelhantes.<\/li>\n<\/ul>\n<p><\/p>\n<h2>1. Execu\u00e7\u00e3o local de testes<\/h2>\n<p><\/p>\n<h3>Breve descri\u00e7\u00e3o da tecnologia<\/h3>\n<p>\nEste \u00e9 apenas um passo preparat\u00f3rio para rodar testes de demonstra\u00e7\u00e3o localmente e verificar se eles passam com sucesso. Na parte pr\u00e1tica, usa-se Node.js, mas a linguagem de programa\u00e7\u00e3o e a plataforma tamb\u00e9m n\u00e3o s\u00e3o importantes, podendo ser utilizadas aquelas que est\u00e3o em sua empresa.\u00a0<\/p>\n<p>No entanto, como ferramentas de automa\u00e7\u00e3o, recomendo usar Selenium WebDriver para plataformas web e Appium para a plataforma Android, pois nos pr\u00f3ximos passos usaremos imagens do Docker que s\u00e3o adaptadas especificamente para trabalhar com essas ferramentas. Al\u00e9m disso, olhando para as exig\u00eancias nas vagas de emprego, essas ferramentas s\u00e3o as mais procuradas no mercado.<\/p>\n<p>Como voc\u00ea p\u00f4de notar, estamos abordando apenas testes web e Android. Infelizmente, iOS \u00e9 uma hist\u00f3ria completamente diferente (obrigado, Apple). Planejo demonstrar solu\u00e7\u00f5es e pr\u00e1ticas relacionadas ao iOS nas pr\u00f3ximas partes.<\/p>\n<h3>Valor para a infraestrutura de automa\u00e7\u00e3o<\/h3>\n<p>\nDo ponto de vista da infraestrutura, a execu\u00e7\u00e3o local n\u00e3o oferece valor algum. Voc\u00ea apenas verifica se os testes funcionam na m\u00e1quina local, em navegadores e simuladores locais. Mas, de qualquer forma, esse \u00e9 um ponto de partida necess\u00e1rio.<\/p>\n<h3>Ilustra\u00e7\u00e3o do estado atual da infraestrutura<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.\" src=\"\/wp-content\/uploads\/2020\/04\/504f28744e29938f66be41c32d9a7dc6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links para estudo<\/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\">Emulador Android<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/tree\/master\/javascript\/node\/selenium-webdriver\/example\">Exemplos do Selenium JS no GitHub<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/appium\/appium\/tree\/master\/sample-code\/javascript-wd\">Exemplos do Appium JS no GitHub<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Ferramentas semelhantes<\/h3>\n<p><\/p>\n<ul>\n<li>qualquer linguagem de programa\u00e7\u00e3o que voc\u00ea preferir, em combina\u00e7\u00e3o com testes do Selenium\/Appium;<\/li>\n<li>quaisquer testes;<\/li>\n<li>qualquer executor de testes.<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Sistemas de controle de vers\u00e3o (Git)<\/h2>\n<p><\/p>\n<h3>Breve descri\u00e7\u00e3o da tecnologia<\/h3>\n<p>\n N\u00e3o ser\u00e1 uma grande revela\u00e7\u00e3o se eu disser que um sistema de controle de vers\u00e3o \u00e9 uma parte extremamente importante do desenvolvimento, tanto em equipe quanto individualmente. Com base em v\u00e1rias fontes, pode-se afirmar com seguran\u00e7a que o Git \u00e9 o representante mais popular. O sistema de controle de vers\u00e3o oferece v\u00e1rias vantagens, como compartilhamento de c\u00f3digo, armazenamento de vers\u00f5es, recupera\u00e7\u00e3o para branches anteriores, monitoramento do hist\u00f3rico do projeto, backups. N\u00e3o vamos discutir cada ponto em detalhes, pois tenho certeza de que voc\u00ea est\u00e1 bem familiarizado e o utiliza em seu trabalho di\u00e1rio. Mas, caso n\u00e3o esteja, recomendo que pare de ler este artigo e o fa\u00e7a o mais r\u00e1pido poss\u00edvel.<\/p>\n<h3>Valor para a infraestrutura de automa\u00e7\u00e3o<\/h3>\n<p>\n E aqui voc\u00ea pode fazer uma pergunta razo\u00e1vel: 'Por que ele est\u00e1 nos falando sobre o Git? Todo mundo sabe e usa tanto para desenvolvimento de c\u00f3digo quanto para c\u00f3digo de testes automatizados.' Voc\u00ea estar\u00e1 absolutamente certo, mas neste artigo estamos falando sobre infraestrutura, e esta se\u00e7\u00e3o serve como uma introdu\u00e7\u00e3o \u00e0 se\u00e7\u00e3o 7: 'Infraestrutura como C\u00f3digo (IaC)'. Para n\u00f3s, isso significa que toda a infraestrutura, incluindo a de testes, \u00e9 descrita em forma de c\u00f3digo; portanto, tamb\u00e9m podemos aplicar sistemas de versionamento a ela e obter benef\u00edcios semelhantes aos do desenvolvimento de c\u00f3digo e automa\u00e7\u00e3o.<\/p>\n<p>Vamos analisar o IaC com mais detalhes no passo 7, mas mesmo agora voc\u00ea pode come\u00e7ar a usar o Git localmente, criando um reposit\u00f3rio local. A vis\u00e3o geral ser\u00e1 ampliada quando adicionarmos um reposit\u00f3rio remoto \u00e0 infraestrutura.<\/p>\n<h3>Ilustra\u00e7\u00e3o do estado atual da infraestrutura<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.\" src=\"\/wp-content\/uploads\/2020\/04\/f17c1d2b2f18aa814c44f7c443e49416.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links para estudo<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.atlassian.com\/git\/tutorials\/what-is-version-control\">O que \u00e9 controle de vers\u00e3o<\/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\">Introdu\u00e7\u00e3o \u2014 Sobre Controle de Vers\u00e3o<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Ferramentas semelhantes<\/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 (agora faz parte dos Servi\u00e7os Azure DevOps)<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2>3. Containiza\u00e7\u00e3o (Docker)<\/h2>\n<p><\/p>\n<h3>Breve descri\u00e7\u00e3o da tecnologia<\/h3>\n<p>\n Para demonstrar como a conten\u00e7\u00e3o mudou as regras do jogo, vamos voltar v\u00e1rias d\u00e9cadas no tempo. Naquela \u00e9poca, as pessoas adquiriam e usavam m\u00e1quinas de servidores para rodar aplicativos. Mas, na maioria das vezes, os recursos necess\u00e1rios para a execu\u00e7\u00e3o n\u00e3o eram conhecidos antecipadamente. Como resultado, as empresas gastavam dinheiro comprando servidores poderosos e caros, mas parte desse poder n\u00e3o era completamente utilizado.<\/p>\n<p>O pr\u00f3ximo est\u00e1gio da evolu\u00e7\u00e3o foram as m\u00e1quinas virtuais (VM), que resolveram o problema do gasto em recursos n\u00e3o utilizados. Essa tecnologia permitiu executar aplicativos de forma independente dentro de um \u00fanico servidor, alocando um espa\u00e7o completamente isolado. Mas, infelizmente, qualquer tecnologia tem suas desvantagens. A execu\u00e7\u00e3o de uma VM requer um sistema operacional completo, que consome CPU, RAM, armazenamento e, dependendo do SO, tamb\u00e9m precisa-se considerar os custos de licen\u00e7a. Esses fatores afetam a velocidade de inicializa\u00e7\u00e3o e dificultam a portabilidade.<\/p>\n<p>E assim chegamos \u00e0 conten\u00e7\u00e3o. Novamente, essa tecnologia resolveu o problema anterior, pois os cont\u00eaineres n\u00e3o usam um SO completo, permitindo liberar uma grande quantidade de recursos e proporcionando uma solu\u00e7\u00e3o r\u00e1pida e flex\u00edvel para a portabilidade.<\/p>\n<p>Claro, a tecnologia de cont\u00eaineres n\u00e3o \u00e9 algo novo e foi apresentada pela primeira vez no final dos anos 70. Naquela \u00e9poca, muitas pesquisas, desenvolvimentos e tentativas foram feitas. Mas foi o Docker que adapta essa tecnologia e a torna facilmente acess\u00edvel \u00e0s massas. Hoje em dia, quando falamos sobre cont\u00eaineres, na maioria das vezes nos referimos ao Docker. Quando falamos sobre cont\u00eaineres Docker, estamos nos referindo a cont\u00eaineres Linux. Podemos usar sistemas Windows e macOS para executar cont\u00eaineres, mas \u00e9 importante entender que, nestes casos, uma camada adicional aparece. Por exemplo, o Docker no Mac executa cont\u00eaineres silenciosamente dentro de uma VM Linux leve. Voltaremos a esse assunto quando discutirmos a execu\u00e7\u00e3o de emuladores Android dentro de cont\u00eaineres, pois aqui surge um ponto muito importante que precisa ser analisado mais detalhadamente.<\/p>\n<h3>Valor para a infraestrutura de automa\u00e7\u00e3o<\/h3>\n<p>\n Descobrimos que a cont\u00eaineriza\u00e7\u00e3o e o Docker s\u00e3o incr\u00edveis. Vamos analisar isso no contexto da automa\u00e7\u00e3o, pois cada ferramenta ou tecnologia deve resolver algum problema. Vamos destacar os problemas \u00f3bvios de automa\u00e7\u00e3o de testes no contexto de testes de interface do usu\u00e1rio:<\/p>\n<ul>\n<li>uma enorme quantidade de depend\u00eancias ao instalar Selenium e especialmente Appium;<\/li>\n<li>problemas de compatibilidade entre vers\u00f5es de navegadores, simuladores e drivers;<\/li>\n<li>falta de um espa\u00e7o isolado para navegadores\/simuladores, o que \u00e9 especialmente cr\u00edtico para a execu\u00e7\u00e3o paralela;<\/li>\n<li>\u00e9 dif\u00edcil gerenciar e manter se for necess\u00e1rio executar 10, 50, 100 ou at\u00e9 mesmo 1000 navegadores ao mesmo tempo.<\/li>\n<\/ul>\n<p>\nMas como o Selenium \u00e9 a ferramenta de automa\u00e7\u00e3o mais popular e o Docker \u00e9 a ferramenta de cont\u00eaineriza\u00e7\u00e3o mais popular, n\u00e3o deve ser surpresa que algu\u00e9m tenha tentado combin\u00e1-los para obter uma poderosa ferramenta para resolver os problemas mencionados acima. Vamos examinar essas solu\u00e7\u00f5es mais detalhadamente.\u00a0<\/p>\n<p><u>Selenium grid em docker<\/u><\/p>\n<p>Esta ferramenta \u00e9 a mais popular do mundo Selenium para executar v\u00e1rios navegadores em v\u00e1rias m\u00e1quinas e gerenci\u00e1-los a partir de um n\u00f3 central. Para iniciar, \u00e9 necess\u00e1rio registrar pelo menos 2 partes: Hub e Node(s). O Hub \u00e9 o n\u00f3 central que recebe todas as solicita\u00e7\u00f5es dos testes e as distribui para os Nodes correspondentes. Para cada Node, podemos configurar uma configura\u00e7\u00e3o espec\u00edfica, por exemplo, especificando o navegador necess\u00e1rio e sua vers\u00e3o. No entanto, ainda precisamos nos certificar de ter os drivers compat\u00edveis para os navegadores e instal\u00e1-los nos Nodes necess\u00e1rios. Por essa raz\u00e3o, o Selenium Grid n\u00e3o \u00e9 utilizado em sua forma pura, exceto em casos onde precisamos trabalhar com navegadores que n\u00e3o podem ser instalados no Linux OS. Para todos os outros casos, uma solu\u00e7\u00e3o significativamente mais flex\u00edvel e correta ser\u00e1 o uso de imagens Docker para executar o Selenium Grid Hub e Nodes. Essa abordagem simplifica muito a gest\u00e3o dos n\u00f3s, uma vez que podemos escolher a imagem necess\u00e1ria com vers\u00f5es compat\u00edveis de navegadores e drivers j\u00e1 instalados.<\/p>\n<p>Apesar das cr\u00edticas \u00e0 estabilidade do funcionamento, especialmente ao executar um grande n\u00famero de Nodes em paralelo, o Selenium Grid ainda permanece como a ferramenta mais popular para a execu\u00e7\u00e3o paralela de testes Selenium. \u00c9 importante notar que no open-source surgem continuamente v\u00e1rias melhorias e modifica\u00e7\u00f5es desta ferramenta, que buscam resolver diferentes gargalos.<\/p>\n<p><u>Selenoid para Web<\/u><\/p>\n<p>Esta ferramenta \u00e9 uma inova\u00e7\u00e3o no mundo do Selenium, pois funciona imediatamente e facilitou significativamente a vida de muitos engenheiros de automa\u00e7\u00e3o. Antes de mais nada, n\u00e3o \u00e9 mais uma modifica\u00e7\u00e3o do Selenium Grid. Em vez disso, os desenvolvedores criaram uma nova vers\u00e3o do Selenium Hub na linguagem Golang, o que, em conjunto com imagens Docker leves para diferentes navegadores, deu um impulso ao desenvolvimento da automa\u00e7\u00e3o de testes. Al\u00e9m disso, no caso do Selenium Grid, precisamos definir todos os navegadores e suas vers\u00f5es necess\u00e1rias com anteced\u00eancia, o que n\u00e3o \u00e9 um problema quando se trabalha apenas com um \u00fanico navegador. Mas quando se trata de v\u00e1rios navegadores suportados, o Selenoid \u00e9 a solu\u00e7\u00e3o n\u00famero um, gra\u00e7as \u00e0 fun\u00e7\u00e3o de 'navegador sob demanda'. Tudo o que precisamos fazer \u00e9 carregar previamente as imagens necess\u00e1rias dos navegadores e atualizar o arquivo de configura\u00e7\u00e3o que o Selenoid utiliza. Ap\u00f3s receber uma solicita\u00e7\u00e3o dos testes, o Selenoid inicia automaticamente o cont\u00eainer com o navegador desejado. Quando o teste \u00e9 conclu\u00eddo, o Selenoid descarta o cont\u00eainer, liberando assim os recursos para as pr\u00f3ximas solicita\u00e7\u00f5es. Essa abordagem elimina completamente o conhecido problema da 'degrada\u00e7\u00e3o dos n\u00f3s', que frequentemente enfrentamos no Selenium Grid.<\/p>\n<p>Mas, infelizmente, o Selenoid ainda n\u00e3o \u00e9 a solu\u00e7\u00e3o m\u00e1gica. Obtivemos a fun\u00e7\u00e3o de 'navegador sob demanda', mas a fun\u00e7\u00e3o de 'recursos sob demanda' ainda n\u00e3o est\u00e1 dispon\u00edvel. Para usar o Selenoid, precisamos implant\u00e1-lo em hardware f\u00edsico ou em uma VM, o que significa que precisamos saber com anteced\u00eancia quantos recursos devem ser alocados. Acredito que isso n\u00e3o seja um problema para pequenos projetos que executam 10, 20 ou at\u00e9 30 navegadores simultaneamente. Mas e se precisarmos de 100, 500, 1000 ou mais? N\u00e3o faz sentido manter e pagar por essa quantidade de recursos constantemente. Nas se\u00e7\u00f5es 5 e 6 deste artigo, discutiremos solu\u00e7\u00f5es que permitem escalar, reduzindo significativamente os custos para a empresa.<\/p>\n<p><u>Selenoid para Android<\/u><\/p>\n<p>Ap\u00f3s o sucesso do Selenoid como uma ferramenta para automa\u00e7\u00e3o web, as pessoas queriam algo semelhante para Android. E isso aconteceu \u2013 o Selenoid foi lan\u00e7ado com suporte a Android. Do ponto de vista do usu\u00e1rio, o princ\u00edpio de funcionamento \u00e9 similar \u00e0 automa\u00e7\u00e3o web. A \u00fanica diferen\u00e7a \u00e9 que, em vez de containers com navegadores, o Selenoid inicia containers com emuladores Android. Na minha opini\u00e3o, atualmente, essa \u00e9 a ferramenta gratuita mais poderosa para executar testes Android em paralelo.<\/p>\n<p>Eu realmente n\u00e3o gostaria de falar sobre os aspectos negativos dessa ferramenta, pois eu realmente gosto muito dela. Mas ainda assim, existem as mesmas desvantagens que se aplicam \u00e0 automa\u00e7\u00e3o web, relacionadas \u00e0 escalabilidade. Al\u00e9m disso, \u00e9 necess\u00e1rio mencionar outra limita\u00e7\u00e3o que pode ser uma surpresa se estivermos configurando a ferramenta pela primeira vez. Para executar imagens Android, precisamos de uma m\u00e1quina f\u00edsica ou VM com suporte a virtualiza\u00e7\u00e3o aninhada. No guia pr\u00e1tico, demonstro como ativ\u00e1-lo em uma VM Linux. No entanto, se voc\u00ea \u00e9 um usu\u00e1rio do macOS e deseja implantar o Selenoid localmente, a execu\u00e7\u00e3o de testes Android ser\u00e1 imposs\u00edvel. Mas voc\u00ea sempre pode iniciar uma VM Linux localmente com a 'virtualiza\u00e7\u00e3o aninhada' configurada e implantar o Selenoid por dentro.<\/p>\n<h3>Ilustra\u00e7\u00e3o do estado atual da infraestrutura<\/h3>\n<p>\n No contexto deste artigo, adicionaremos 2 ferramentas para ilustrar a infraestrutura. Estes s\u00e3o o Selenium Grid para testes web e o Selenoid para testes Android. No guia no GitHub, tamb\u00e9m mostrarei como usar o Selenoid para executar testes web.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.\" src=\"\/wp-content\/uploads\/2020\/04\/1202ae79eba9cffc965f3a5b2648c755.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links para estudo<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/resources\/what-container\">Docker: o que \u00e9 um container<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/get-started\">Docker: comece<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/containerjournal.com\/topics\/container-ecosystems\/5-container-alternatives-to-docker\/\">5 Alternativas de Container ao Docker<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/wiki\/Grid2\">Selenium Grid<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/docker-selenium\">Selenium docker<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aerokube.com\/selenoid\/latest\/\">Selenoid<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aerokube\/selenoid\">Selenoid Github<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developer.android.com\/studio\/run\/emulator-acceleration#vm-linux\">Configura\u00e7\u00e3o KVM para emuladores 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\">Livro Docker Deep Dive<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Ferramentas semelhantes<\/h3>\n<p><\/p>\n<ul>\n<li>Existem outras ferramentas de containeriza\u00e7\u00e3o, mas o Docker \u00e9 o mais popular. Se voc\u00ea quiser experimentar algo diferente, note que as ferramentas que discutimos para a execu\u00e7\u00e3o paralela de testes Selenium n\u00e3o funcionar\u00e3o automaticamente.\u00a0\u00a0<\/li>\n<li>Como j\u00e1 foi mencionado, existem muitas modifica\u00e7\u00f5es do Selenium Grid, por exemplo,<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 descri\u00e7\u00e3o da tecnologia<\/h3>\n<p>\n A pr\u00e1tica de integra\u00e7\u00e3o cont\u00ednua \u00e9 bastante popular no desenvolvimento e ocupa um lugar ao lado dos sistemas de controle de vers\u00e3o. Apesar disso, sinto que h\u00e1 confus\u00e3o na terminologia. Neste par\u00e1grafo, gostaria de descrever tr\u00eas modifica\u00e7\u00f5es dessa tecnologia do meu ponto de vista. Na internet, voc\u00ea encontrar\u00e1 muitos artigos com diferentes interpreta\u00e7\u00f5es, e isso \u00e9 absolutamente normal se a sua opini\u00e3o for diferente. O mais importante \u00e9 que voc\u00ea esteja na mesma sintonia que seus colegas.<\/p>\n<p>Ent\u00e3o, existem tr\u00eas termos: CI \u2014 Continuous Integration (integra\u00e7\u00e3o cont\u00ednua), CD \u2014 Continuous Delivery (entrega cont\u00ednua) e novamente CD \u2014 Continuous Deployment (desdobramento cont\u00ednuo).\u00a0(<i>A partir de agora, usarei esses termos em ingl\u00eas<\/i>). Cada modifica\u00e7\u00e3o adiciona algumas etapas adicionais ao seu pipeline de desenvolvimento. Mas a palavra <u>continuous<\/u> (cont\u00ednua) \u00e9 a mais importante. Nesse contexto, estamos nos referindo a algo que ocorre do in\u00edcio ao fim, sem interrup\u00e7\u00f5es ou interven\u00e7\u00e3o manual. Vamos olhar para CI &#038; CD e CD nesse contexto.<\/p>\n<ul>\n<li><strong>Continuous Integration \u2013<\/strong> \u00e9 o primeiro passo da evolu\u00e7\u00e3o. Ap\u00f3s o envio de um novo c\u00f3digo ao servidor, esperamos receber um retorno r\u00e1pido de que nossas altera\u00e7\u00f5es est\u00e3o corretas. Geralmente, o CI envolve a execu\u00e7\u00e3o de ferramentas de an\u00e1lise de c\u00f3digo est\u00e1tico e testes de unidade\/API internos. Isso permite receber informa\u00e7\u00f5es sobre nosso c\u00f3digo apenas alguns segundos\/minutos depois.<\/li>\n<li><strong>Continuous Delivery<\/strong> \u00e9 um passo mais avan\u00e7ado, onde executamos testes de integra\u00e7\u00e3o\/UI. No entanto, neste est\u00e1gio, n\u00e3o obtemos resultados t\u00e3o rapidamente quanto no CI. Primeiro, esses tipos de testes levam mais tempo para serem conclu\u00eddos. Em segundo lugar, antes de executar, precisamos implantar nossas altera\u00e7\u00f5es em um ambiente de teste\/staging. Al\u00e9m disso, se estivermos falando sobre desenvolvimento m\u00f3vel, haver\u00e1 uma etapa adicional para criar a compila\u00e7\u00e3o do nosso aplicativo.<\/li>\n<li><strong>Continuous Deployment<\/strong> significa que liberamos automaticamente nossas altera\u00e7\u00f5es em produ\u00e7\u00e3o, se todos os testes de aceita\u00e7\u00e3o foram conclu\u00eddos nas etapas anteriores. Al\u00e9m disso, ap\u00f3s a etapa de libera\u00e7\u00e3o, v\u00e1rias fases podem ser configuradas, como a execu\u00e7\u00e3o de testes smoke em produ\u00e7\u00e3o e a coleta de m\u00e9tricas relevantes. Continuous Deployment \u00e9 poss\u00edvel apenas com uma boa cobertura de testes automatizados. Se houver necessidade de interven\u00e7\u00f5es manuais, incluindo testes, isso j\u00e1 n\u00e3o \u00e9 mais <u>Cont\u00ednuo<\/u> (continuous). Assim, podemos dizer que nosso pipeline se alinha apenas \u00e0 pr\u00e1tica de Continuous Delivery.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Valor para a infraestrutura de automa\u00e7\u00e3o<\/h3>\n<p>\n Nesta se\u00e7\u00e3o, devo esclarecer que, quando falamos sobre testes de UI end-to-end, isso implica que devemos implantar nossas altera\u00e7\u00f5es e os servi\u00e7os relacionados em ambientes de teste. Continuous Integration \u2014 processo que n\u00e3o se aplica a essa tarefa e precisamos nos certificar de integrar pelo menos as pr\u00e1ticas de Continuous Delivery. Continuous Deployment tamb\u00e9m faz sentido no contexto de testes de UI, se planejamos execut\u00e1-los em produ\u00e7\u00e3o.<\/p>\n<p>E antes de olharmos para a ilustra\u00e7\u00e3o da mudan\u00e7a de arquitetura, quero dizer algumas palavras sobre o GitLab CI. Ao contr\u00e1rio de outras ferramentas de CI\/CD, o GitLab fornece um reposit\u00f3rio remoto e muitas outras funcionalidades adicionais. Portanto, o GitLab \u00e9 mais que CI. Ele inclui, de forma nativa, gerenciamento de c\u00f3digo-fonte, gerenciamento \u00e1gil, pipelines CI\/CD, ferramentas de registro e coleta de m\u00e9tricas. A arquitetura do GitLab \u00e9 composta pelo GitLab CI\/CD e pelo GitLab Runner. Veja uma breve descri\u00e7\u00e3o do site oficial:<\/p>\n<blockquote><p>GitLab CI\/CD \u00e9 um aplicativo web com uma API que armazena seu estado em um banco de dados, gerencia projetos\/constru\u00e7\u00f5es e fornece uma interface de usu\u00e1rio. O GitLab Runner \u00e9 um aplicativo que processa constru\u00e7\u00f5es. Ele pode ser implantado separadamente e funciona com GitLab CI\/CD atrav\u00e9s de uma API. Para a execu\u00e7\u00e3o de testes, voc\u00ea precisa tanto da inst\u00e2ncia do GitLab quanto do Runner.<\/p><\/blockquote>\n<p><\/p>\n<h3>Ilustra\u00e7\u00e3o do estado atual da infraestrutura<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.\" src=\"\/wp-content\/uploads\/2020\/04\/a05ece39b6c6a9aaec4177d4b5242722.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links para estudo<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/articles\/continuousIntegration.html\">Martin Fowler: Integra\u00e7\u00e3o Cont\u00ednua<\/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\">livro de Integra\u00e7\u00e3o Cont\u00ednua<\/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=\">livro de Entrega Cont\u00ednua<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Ferramentas semelhantes<\/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 muitos outros<\/li>\n<\/ul>\n<p><\/p>\n<h2>5. Plataformas de nuvem<\/h2>\n<p><\/p>\n<h3>Breve descri\u00e7\u00e3o da tecnologia<\/h3>\n<p>\n Nesta se\u00e7\u00e3o, vamos falar sobre uma tend\u00eancia popular chamada 'nuvens p\u00fablicas'. Apesar dos enormes benef\u00edcios que as tecnologias de virtualiza\u00e7\u00e3o e conteineriza\u00e7\u00e3o mencionadas acima oferecem, ainda precisamos de recursos computacionais. As empresas adquirem servidores caros ou alugam data centers, mas nesse caso, \u00e9 necess\u00e1rio fazer c\u00e1lculos (\u00e0s vezes irrealistas) sobre quantos recursos precisaremos, se os utilizaremos 24\/7 e para quais fins. Por exemplo, para produ\u00e7\u00e3o, um servidor que funciona 24 horas por dia \u00e9 necess\u00e1rio, mas precisamos de recursos semelhantes para testes fora do hor\u00e1rio comercial? Isso tamb\u00e9m depende do tipo de teste realizado. Um exemplo pode ser testes de carga\/estresse, que planejamos executar fora do hor\u00e1rio comercial para obter resultados no dia seguinte. Mas, definitivamente, a disponibilidade cont\u00ednua de servidores n\u00e3o \u00e9 necess\u00e1ria para testes automatizados end-to-end e, especialmente, para ambientes de testes manuais. Para tais situa\u00e7\u00f5es, seria ideal obter exatamente os recursos que precisamos sob demanda, utiliz\u00e1-los e parar de pagar quando n\u00e3o forem mais necess\u00e1rios. Al\u00e9m disso, seria \u00f3timo obt\u00ea-los instantaneamente, com alguns cliques do mouse ou rodando alguns scripts. \u00c9 para isso que as nuvens p\u00fablicas s\u00e3o usadas. Vamos dar uma olhada na defini\u00e7\u00e3o:<\/p>\n<blockquote><p>\u00abA nuvem p\u00fablica \u00e9 definida como servi\u00e7os de computa\u00e7\u00e3o oferecidos por provedores de terceiros pela Internet p\u00fablica, tornando-os dispon\u00edveis para qualquer pessoa que queira us\u00e1-los ou compr\u00e1-los. Eles podem ser gratuitos ou vendidos sob demanda, permitindo que os clientes paguem apenas pelo uso dos ciclos de CPU, armazenamento ou largura de banda que consomem\u00bb.<\/p><\/blockquote>\n<p>\n H\u00e1 uma cren\u00e7a comum de que as nuvens p\u00fablicas s\u00e3o caras. Mas sua ideia central \u00e9 a redu\u00e7\u00e3o das despesas da empresa. Como mencionado anteriormente, as nuvens p\u00fablicas permitem obter recursos sob demanda e pagar apenas pelo tempo de uso. Al\u00e9m disso, \u00e0s vezes esquecemos que os funcion\u00e1rios recebem sal\u00e1rios e especialistas tamb\u00e9m s\u00e3o um recurso caro. \u00c9 necess\u00e1rio considerar que as nuvens p\u00fablicas facilitam significativamente o suporte \u00e0 infraestrutura, permitindo que os engenheiros se concentrem em tarefas mais importantes.\u00a0<\/p>\n<h3>Valor para a infraestrutura de automa\u00e7\u00e3o<\/h3>\n<p>\n Quais recursos espec\u00edficos precisamos para testes de UI end-to-end? Principalmente, s\u00e3o m\u00e1quinas virtuais ou clusters (falaremos sobre Kubernetes na pr\u00f3xima se\u00e7\u00e3o) para executar navegadores e emuladores. Quanto mais navegadores e emuladores quisermos executar simultaneamente, mais CPU e mem\u00f3ria ser\u00e3o necess\u00e1rios, e mais teremos que pagar por isso. Assim, as nuvens p\u00fablicas no contexto da automa\u00e7\u00e3o de testes nos permitem iniciar um grande n\u00famero (100, 200, 1000 ...) de navegadores\/emuladores sob demanda, obter resultados de testes o mais r\u00e1pido poss\u00edvel e parar de pagar por essas capacidades absurdamente custosas.\u00a0<\/p>\n<p>Os provedores de nuvem mais populares s\u00e3o Amazon Web Services (AWS), Microsoft Azure e Google Cloud Platform (GCP). O guia pr\u00e1tico apresenta exemplos de uso do GCP, mas, em geral, n\u00e3o importa o que voc\u00ea usar\u00e1 para tarefas de automa\u00e7\u00e3o. Todos eles oferecem funcionalidades aproximadamente iguais. Normalmente, para escolher um provedor, o guia foca na infraestrutura da empresa e nos requisitos de neg\u00f3cios, que est\u00e3o fora do escopo deste artigo. Para engenheiros de automa\u00e7\u00e3o, ser\u00e1 mais interessante comparar o uso de provedores de nuvem com o uso de plataformas de nuvem especificamente para fins de teste, como Sauce Labs, BrowserStack, BitBar e assim por diante. Ent\u00e3o, vamos fazer isso! Na minha opini\u00e3o, o Sauce Labs \u00e9 a mais conhecida fazenda de testes em nuvem, ent\u00e3o eu o escolhi para a compara\u00e7\u00e3o.\u00a0<\/p>\n<p><u>GCP versus Sauce Labs para fins de automa\u00e7\u00e3o:<\/u><\/p>\n<p>Suponha que precisamos executar simultaneamente 8 testes web e 8 testes Android. Para isso, usaremos o GCP e iniciaremos 2 m\u00e1quinas virtuais com Selenoid. Na primeira, levantaremos 8 cont\u00eaineres com navegadores. Na segunda \u2013 8 cont\u00eaineres com emuladores. Vamos dar uma olhada nos pre\u00e7os:\u00a0\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.\" src=\"\/wp-content\/uploads\/2020\/04\/e4688fd2e6e5593d2e1c22fc57f59484.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Para executar um cont\u00eainer com Chrome, precisaremos de <strong>n1-standard-1 <\/strong>m\u00e1quina. No caso do Android, ser\u00e1 <strong>n1-standard-4 <\/strong>para um emulador. Na verdade, uma maneira mais flex\u00edvel e barata \u00e9 definir valores personalizados espec\u00edficos para CPU\/Memory, mas neste momento, para compara\u00e7\u00e3o com o Sauce Labs, isso n\u00e3o \u00e9 fundamental.<\/p>\n<p>Aqui est\u00e3o as tarifas para uso do Sauce Labs:<\/p>\n<p><img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.\" src=\"\/wp-content\/uploads\/2020\/04\/1367d2b59bbef9603b4b4be166e8d721.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEu suponho que voc\u00ea j\u00e1 notou a diferen\u00e7a, mas ainda assim, apresento uma tabela com os c\u00e1lculos para a nossa tarefa:<\/p>\n<p><strong>Recursos necess\u00e1rios<\/strong><br \/>\n<strong>Mensal<\/strong><br \/>\n<strong>Horas de trabalho<\/strong><strong>(8 a.m \u2014 8 p.m)<\/strong><br \/>\n<strong>Horas de trabalho<\/strong><strong>+ Preemptivo<\/strong><\/p>\n<p><strong>GCP para Web<\/strong><br \/>\nn1-standard-1 x 8 = n1-standard-8<br \/>\n$194.18<br \/>\n23 dias * 12h * 0.38 = 104,88$\u00a0<br \/>\n23 dias * 12h * 0.08 = 22,08$<\/p>\n<p><strong>Sauce Labs para Web<\/strong><br \/>\nTestes paralelos em Virtual Cloud8<br \/>\n$1.559<br \/>\n\u2014<br \/>\n\u2014<\/p>\n<p><strong>GCP para Android<\/strong><br \/>\nn1-standard-4 x 8: n1-standard-16<br \/>\n$776.72<br \/>\n23 dias * 12h * 1.52 = 419,52$\u00a0<br \/>\n23 dias * 12h * 0.32 = 88,32$<\/p>\n<p><strong>Sauce Labs para Android<\/strong><br \/>\nTestes em nuvem com dispositivos reais em 8 paralelos<br \/>\n$1.999<br \/>\n\u2014<br \/>\n\u2014<\/p>\n<p>\nComo voc\u00ea pode ver, a diferen\u00e7a de custo \u00e9 enorme, especialmente se os testes forem executados apenas no intervalo de doze horas \u00fateis. Mas \u00e9 poss\u00edvel reduzir ainda mais os custos se voc\u00ea usar m\u00e1quinas preemptibles. O que \u00e9 isso?<\/p>\n<blockquote><p>Uma VM preemptible \u00e9 uma inst\u00e2ncia que voc\u00ea pode criar e executar a um pre\u00e7o muito menor do que as inst\u00e2ncias normais. No entanto, o Compute Engine pode encerrar (preempt) essas inst\u00e2ncias se precisar de acesso a esses recursos para outras tarefas. Inst\u00e2ncias preemptibles s\u00e3o a capacidade excedente do Compute Engine, portanto, sua disponibilidade varia com o uso.<\/p>\n<p>Se seus aplicativos forem tolerantes a falhas e puderem suportar poss\u00edveis preemp\u00e7\u00f5es de inst\u00e2ncia, ent\u00e3o inst\u00e2ncias preemptibles podem reduzir significativamente seus custos com o Compute Engine. Por exemplo, trabalhos de processamento em lote podem ser executados em inst\u00e2ncias preemptibles. Se algumas dessas inst\u00e2ncias forem encerradas durante o processamento, o trabalho desacelera, mas n\u00e3o para completamente. Inst\u00e2ncias preemptibles completam suas tarefas de processamento em lote sem sobrecarregar suas inst\u00e2ncias existentes e sem exigir que voc\u00ea pague o pre\u00e7o cheio por inst\u00e2ncias normais adicionais.<\/p><\/blockquote>\n<p>\n E isso ainda n\u00e3o \u00e9 tudo! Na verdade, estou certo de que ningu\u00e9m executa testes por 12 horas ininterruptas. E se for assim, voc\u00ea pode iniciar e parar automaticamente as m\u00e1quinas virtuais quando n\u00e3o s\u00e3o necess\u00e1rias. O tempo real de uso pode ser reduzido para at\u00e9 6 horas por dia. Nesse caso, o pagamento no contexto de nossa tarefa diminuiria para apenas 11$ por m\u00eas por 8 navegadores. N\u00e3o \u00e9 maravilhoso? Mas com m\u00e1quinas preemptibles devemos ter cuidado e estar preparados para interrup\u00e7\u00f5es e funcionamento inst\u00e1vel, embora essas situa\u00e7\u00f5es possam ser previstas e tratadas programaticamente. Vale a pena!<\/p>\n<p>Mas de forma alguma estou dizendo 'nunca use fazendas de testes em nuvem'. Elas t\u00eam uma s\u00e9rie de benef\u00edcios. Antes de tudo, n\u00e3o se trata apenas de uma m\u00e1quina virtual, mas de uma solu\u00e7\u00e3o completa para automa\u00e7\u00e3o de testes com um conjunto de funcionalidades prontas para uso: acesso remoto, registros, capturas de tela, grava\u00e7\u00e3o de v\u00eddeo, v\u00e1rios navegadores e dispositivos m\u00f3veis f\u00edsicos. Em muitas situa\u00e7\u00f5es, isso pode ser uma alternativa luxuosa insubstitu\u00edvel. Especialmente plataformas de teste s\u00e3o \u00fateis para automa\u00e7\u00e3o de IOS, quando nuvens p\u00fablicas podem oferecer apenas sistemas Linux\/Windows. Mas a conversa sobre IOS ficar\u00e1 para os pr\u00f3ximos artigos. Recomendo sempre considerar a situa\u00e7\u00e3o e basear-se nas tarefas: em alguns casos \u00e9 mais barato e eficaz usar nuvens p\u00fablicas, enquanto em outros plataformas de teste definitivamente valem o investimento.<\/p>\n<h3>Ilustra\u00e7\u00e3o do estado atual da infraestrutura<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.\" src=\"\/wp-content\/uploads\/2020\/04\/f68770c9e27677b9d762af574726c90e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links para estudo<\/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: Preempt\u00edvel<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/compute\/vm-instance-pricing\">GCP: Pre\u00e7os de 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\/\">Comparando Provedores de Nuvem<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Ferramentas Similares:<\/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. Orquestra\u00e7\u00e3o<\/h2>\n<p><\/p>\n<h3>Breve descri\u00e7\u00e3o da tecnologia<\/h3>\n<p>\n Tenho boas not\u00edcias \u2013 estamos quase no final do artigo! At\u00e9 agora, nossa infraestrutura de automa\u00e7\u00e3o consiste em testes web e Android, que executamos atrav\u00e9s do GitLab CI em paralelo, utilizando ferramentas com suporte a Docker: Selenium grid e Selenoid. Al\u00e9m disso, utilizamos m\u00e1quinas virtuais criadas atrav\u00e9s do GCP para levantar cont\u00eaineres com navegadores e emuladores. Para reduzir custos, ativamos essas m\u00e1quinas virtuais apenas sob demanda e as paramos quando os testes n\u00e3o est\u00e3o em execu\u00e7\u00e3o. Existe algo mais que possa melhorar nossa infraestrutura? A resposta \u00e9 sim! Apresentamos o Kubernetes (K8s)!<\/p>\n<p>Para come\u00e7ar, vamos considerar como as palavras orquestra\u00e7\u00e3o, cluster e Kubernetes est\u00e3o interligadas. Em um n\u00edvel alto, orquestra\u00e7\u00e3o \u00e9 um sistema que implanta e gerencia aplica\u00e7\u00f5es. Para automa\u00e7\u00e3o de testes, essas aplica\u00e7\u00f5es conteineriz\u00e1veis s\u00e3o o Selenium grid e o Selenoid. Docker e K8s se complementam. O primeiro \u00e9 utilizado para implantar aplica\u00e7\u00f5es, enquanto o segundo \u00e9 para orquestra\u00e7\u00e3o. Por sua vez, K8s \u00e9 um cluster. A fun\u00e7\u00e3o do cluster \u00e9 usar VMs como Nodes, o que permite instalar diferentes funcionalidades, programas e servi\u00e7os dentro de um \u00fanico servidor (cluster). Se algum dos Nodes falhar, outros Nodes assumem, garantindo a opera\u00e7\u00e3o ininterrupta da nossa aplica\u00e7\u00e3o. Al\u00e9m disso, K8s possui funcionalidades importantes relacionadas \u00e0 escalabilidade, permitindo que automaticamente obtenhamos a quantidade ideal de recursos, com base na carga e nos limites estabelecidos.<\/p>\n<p>Para ser sincero, configurar manualmente o Kubernetes do zero \u00e9 uma tarefa bastante n\u00e3o trivial. Vou deixar um link para um famoso guia pr\u00e1tico chamado \"Kubernetes The Hard Way\", e, se voc\u00ea estiver interessado, pode praticar. Mas, felizmente, existem maneiras e ferramentas alternativas. A mais f\u00e1cil delas \u00e9 usar o Google Kubernetes Engine (GKE) no GCP, o que permitir\u00e1 obter um cluster pronto ap\u00f3s alguns cliques. Para come\u00e7ar a estudar, recomendo usar essa abordagem, pois ela permitir\u00e1 que voc\u00ea se concentre em aprender como usar o K8s para suas tarefas em vez de investigar como os componentes internos devem ser integrados entre si.\u00a0<\/p>\n<h3>Valor para a infraestrutura de automa\u00e7\u00e3o<\/h3>\n<p>\nVamos examinar algumas fun\u00e7\u00f5es significativas que o K8s oferece:<\/p>\n<ul>\n<li>implanta\u00e7\u00e3o de aplicativos: uso de um cluster multi-nodes, em vez de VMs;<\/li>\n<li>escalonamento din\u00e2mico: reduz os custos de recursos que s\u00e3o utilizados apenas sob demanda;<\/li>\n<li>auto-repara\u00e7\u00e3o (Self-healing): restaura\u00e7\u00e3o autom\u00e1tica de pods (o que restaura tamb\u00e9m os cont\u00eaineres);<\/li>\n<li>implanta\u00e7\u00f5es de atualiza\u00e7\u00f5es e revers\u00f5es sem interrup\u00e7\u00f5es: atualizar ferramentas, navegadores e emuladores n\u00e3o interrompe o trabalho dos usu\u00e1rios atuais.<\/li>\n<\/ul>\n<p>\n Mas K8s ainda n\u00e3o \u00e9 uma bala de prata. Para entender todos os benef\u00edcios e limita\u00e7\u00f5es no contexto das ferramentas que estamos discutindo (Selenium grid, Selenoid), vamos discutir brevemente a estrutura do K8s. O Cluster cont\u00e9m dois tipos de Nodes: Master Nodes e Workers Nodes. Os Master Nodes s\u00e3o respons\u00e1veis pela gest\u00e3o, implanta\u00e7\u00e3o e decis\u00f5es de agendamento. Os Worker Nodes s\u00e3o onde os aplicativos est\u00e3o em execu\u00e7\u00e3o. Os Nodes tamb\u00e9m cont\u00eam o ambiente de execu\u00e7\u00e3o dos cont\u00eaineres. Neste caso, \u00e9 o Docker, que cuida das opera\u00e7\u00f5es relacionadas aos cont\u00eaineres. Mas existem tamb\u00e9m solu\u00e7\u00f5es alternativas, como<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containerd\/containerd\"> containerd<\/a><\/noindex>. \u00c9 importante entender que o escalonamento ou auto-repara\u00e7\u00e3o n\u00e3o se aplica diretamente aos cont\u00eaineres. Isso \u00e9 realizado atrav\u00e9s da adi\u00e7\u00e3o\/remover o n\u00famero de pods, que por sua vez cont\u00eam cont\u00eaineres (geralmente um cont\u00eainer por pod, mas dependendo da tarefa, pode haver mais). A hierarquia de alto n\u00edvel consiste em worker nodes, dentro dos quais est\u00e3o os pods, dentro dos quais est\u00e3o os cont\u00eaineres.<\/p>\n<p>A funcionalidade de escalonamento \u00e9 fundamental e pode ser aplicada tanto a nodes dentro do node-pool de cluster quanto a pods dentro do node. Existem 2 tipos de escalonamento, que se aplicam tanto a nodes quanto a pods. O primeiro tipo \u2013 horizontal \u2013 o escalonamento ocorre por meio do aumento do n\u00famero de nodes\/pods. Este tipo \u00e9 prefer\u00edvel. O segundo tipo, respectivamente, \u00e9 vertical. O escalonamento \u00e9 realizado aumentando os tamanhos de nodes\/pods, e n\u00e3o sua quantidade.<\/p>\n<p>Agora vamos considerar nossas ferramentas no contexto dos termos mencionados acima.<\/p>\n<p><u>Selenium grid<\/u><\/p>\n<p>Como mencionado anteriormente, o Selenium grid \u00e9 uma ferramenta muito popular, e n\u00e3o \u00e9 surpresa que tenha sido containerizado. Portanto, n\u00e3o \u00e9 surpreendente que o Selenium grid possa ser implantado no K8s. Um exemplo de como fazer isso pode ser encontrado no reposit\u00f3rio oficial do K8s. Como de costume, coloco os links no final da se\u00e7\u00e3o. Al\u00e9m disso, o guia pr\u00e1tico mostra como fazer isso usando o Terraform. Tamb\u00e9m h\u00e1 instru\u00e7\u00f5es sobre como escalar o n\u00famero de pods que cont\u00eam cont\u00eaineres com navegadores. Mas a funcionalidade de escalonamento autom\u00e1tico no contexto do K8s ainda \u00e9 uma tarefa n\u00e3o completamente compreendida. Quando comecei meu estudo, n\u00e3o encontrei nenhum guia pr\u00e1tico ou recomenda\u00e7\u00f5es. Ap\u00f3s v\u00e1rias pesquisas e experimentos com o apoio da equipe de DevOps, escolhemos a abordagem de levantar cont\u00eaineres com os navegadores necess\u00e1rios dentro de um pod, que est\u00e1 dentro de um worker node. Essa abordagem nos permite aplicar a estrat\u00e9gia de escalonamento horizontal de nodes por meio do aumento de seu n\u00famero. Espero que, no futuro, a situa\u00e7\u00e3o mude e vejamos cada vez mais descri\u00e7\u00f5es das melhores abordagens e solu\u00e7\u00f5es prontas, especialmente ap\u00f3s o lan\u00e7amento do Selenium grid 4 com a arquitetura interna alterada.<\/p>\n<p><u>Selenoid<\/u>:<\/p>\n<p>Atualmente, a implanta\u00e7\u00e3o do Selenoid no K8s \u00e9 a maior decep\u00e7\u00e3o. Eles n\u00e3o s\u00e3o compat\u00edveis. Teoricamente, podemos levantar um cont\u00eainer do Selenoid dentro de um pod, mas quando o Selenoid come\u00e7ar a executar cont\u00eaineres com navegadores, eles ainda estar\u00e3o dentro do mesmo pod. Isso torna o escalonamento imposs\u00edvel e, como resultado, o funcionamento do Selenoid dentro do cluster n\u00e3o ser\u00e1 diferente do funcionamento dentro de uma m\u00e1quina virtual. Fim da hist\u00f3ria.<\/p>\n<p><u>Moon<\/u>:<\/p>\n<p>Sabendo disso, ao trabalhar com o Selenoid, os desenvolvedores lan\u00e7aram uma ferramenta mais poderosa chamada Moon. Esta ferramenta foi inicialmente projetada para funcionar com Kubernetes e, como resultado, a fun\u00e7\u00e3o de autoescalonamento pode e deve ser utilizada. Al\u00e9m disso, eu diria que no momento atual, isso <u>\u00fanica<\/u> \u00e9 a ferramenta no mundo do Selenium que, por padr\u00e3o, possui suporte nativo a clusters K8s (<i>n\u00e3o mais, veja a pr\u00f3xima ferramenta <\/i>). A caracter\u00edstica chave do Moon, que proporciona esse suporte, \u00e9:\u00a0<\/p>\n<blockquote><p>Completamente sem estado. O Selenoid armazena em mem\u00f3ria informa\u00e7\u00f5es sobre as sess\u00f5es de navegador em execu\u00e7\u00e3o. Se por algum motivo seu processo falhar, todas as sess\u00f5es em execu\u00e7\u00e3o s\u00e3o perdidas. O Moon, ao contr\u00e1rio, n\u00e3o tem estado interno e pode ser replicado entre os centros de dados. As sess\u00f5es de navegador permanecem ativas mesmo se uma ou mais r\u00e9plicas falharem.<\/p><\/blockquote>\n<p>Ent\u00e3o, o Moon \u00e9 uma solu\u00e7\u00e3o incr\u00edvel, mas tem um problema: n\u00e3o \u00e9 gratuito. O pre\u00e7o depende do n\u00famero de sess\u00f5es. \u00c9 poss\u00edvel executar apenas 0-4 sess\u00f5es gratuitamente, o que n\u00e3o \u00e9 muito \u00fatil. A partir da quinta sess\u00e3o, ser\u00e1 necess\u00e1rio pagar 5$ por cada uma. A situa\u00e7\u00e3o pode variar de empresa para empresa, mas no nosso caso, usar o Moon n\u00e3o faz sentido. Como mencionei acima, podemos iniciar VMs com Selenium Grid sob demanda ou aumentar o n\u00famero de Nodes no cluster. Aproximadamente em um pipeline, iniciamos 500 navegadores e desligamos todos os recursos ap\u00f3s a conclus\u00e3o dos testes. Se estiv\u00e9ssemos usando o Moon, ter\u00edamos que pagar um adicional de 500 x 5 = 2500 $ por m\u00eas, independentemente da frequ\u00eancia com que executamos os testes. E novamente, n\u00e3o estou dizendo 'n\u00e3o use o Moon'. Para suas necessidades, pode ser uma solu\u00e7\u00e3o indispens\u00e1vel, por exemplo, se voc\u00ea tiver muitos projetos\/equipes na sua organiza\u00e7\u00e3o e precisar de um enorme cluster compartilhado para todos. Como sempre, deixo um link no final e recomendo fazer todos os c\u00e1lculos necess\u00e1rios no contexto da sua tarefa.<\/p>\n<p><u>Callisto<\/u>: (<i><strong>Aten\u00e7\u00e3o! Isso n\u00e3o est\u00e1 no artigo original e est\u00e1 contido apenas na tradu\u00e7\u00e3o em russo<\/strong><\/i>)<\/p>\n<p>Como mencionei, o Selenium \u00e9 uma ferramenta muito popular, e a \u00e1rea de TI est\u00e1 se desenvolvendo rapidamente. Enquanto trabalhei na tradu\u00e7\u00e3o, uma nova ferramenta promissora chamada Callisto apareceu na rede (sauda\u00e7\u00f5es ao Cypress e outros concorrentes do Selenium). Ela funciona nativamente com K8s e permite a execu\u00e7\u00e3o de cont\u00eaineres Selenoid em pods, distribu\u00eddos por Nodes. Tudo funciona imediatamente, incluindo a autoescala. Fant\u00e1stico, mas \u00e9 necess\u00e1rio testar. J\u00e1 consegui implementar essa ferramenta e realizar alguns experimentos. Mas ainda \u00e9 cedo para tirar conclus\u00f5es; ap\u00f3s obter resultados a longo prazo, talvez eu crie uma revis\u00e3o em pr\u00f3ximos artigos. Por enquanto, deixo apenas links para pesquisas independentes.\u00a0\u00a0<\/p>\n<h3>Ilustra\u00e7\u00e3o do estado atual da infraestrutura<\/p>\n<h3><img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.\" src=\"\/wp-content\/uploads\/2020\/04\/c9c2ffd21df2a261947df809dcec7108.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links para estudo<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/setup\/\">Kubernetes: configura\u00e7\u00e3o<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\">Kubernetes: o caminho dif\u00edcil<\/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: mecanismo 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\">O Livro do Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MmdGyqNqs9w\">Automa\u00e7\u00e3o Distribu\u00edda com 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>Ferramentas semelhantes<\/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. Infraestrutura como C\u00f3digo (IaC)<\/h2>\n<p><\/p>\n<h3>Breve descri\u00e7\u00e3o da tecnologia<\/h3>\n<p>\n E aqui chegamos \u00e0 \u00faltima se\u00e7\u00e3o. Normalmente, essa tecnologia e as tarefas relacionadas n\u00e3o est\u00e3o sob a responsabilidade dos engenheiros de automa\u00e7\u00e3o. E h\u00e1 raz\u00f5es para isso. Primeiro, em muitas organiza\u00e7\u00f5es, quest\u00f5es de infraestrutura est\u00e3o sob o controle do departamento de DevOps e a equipe de desenvolvimento n\u00e3o se preocupa muito com o que faz o pipeline funcionar e como manter tudo o que est\u00e1 relacionado a isso. Em segundo lugar, sejamos honestos, a pr\u00e1tica \"Infraestrutura como C\u00f3digo (IaC)\" ainda n\u00e3o \u00e9 aplicada em muitas empresas. Mas definitivamente isso se tornou uma tend\u00eancia popular e \u00e9 importante tentar estar envolvido nos processos, abordagens e ferramentas relacionadas. Ou, pelo menos, estar ciente dos eventos.<\/p>\n<p>Comecemos pela motiva\u00e7\u00e3o para usar essa abordagem. J\u00e1 discutimos que, para executar testes no GitlabCI, precisaremos, no m\u00ednimo, de recursos para iniciar o Gitlab Runner. E para executar cont\u00eaineres com navegadores\/emuladores, precisamos reservar uma VM ou um cluster. Al\u00e9m dos recursos para testes, tamb\u00e9m precisamos de uma quantidade significativa de capacidade para manter os ambientes de desenvolvimento, staging e produ\u00e7\u00e3o, o que inclui bancos de dados, cronogramas autom\u00e1ticos, configura\u00e7\u00f5es de rede, balanceadores de carga, permiss\u00f5es de usu\u00e1rios e assim por diante. O problema chave reside nos esfor\u00e7os necess\u00e1rios para manter tudo isso. Existem v\u00e1rias maneiras de como podemos fazer mudan\u00e7as e implantar atualiza\u00e7\u00f5es. Por exemplo, no contexto do GCP, podemos usar o console UI no navegador e realizar todas as a\u00e7\u00f5es clicando em bot\u00f5es. Uma alternativa pode ser usar chamadas de API para interagir com entidades na nuvem ou aplicar a ferramenta de linha de comando gcloud para realizar as manipula\u00e7\u00f5es necess\u00e1rias. Mas, com uma quantidade realmente grande de diferentes entidades e elementos de infraestrutura, torna-se dif\u00edcil ou at\u00e9 imposs\u00edvel realizar todas as opera\u00e7\u00f5es manualmente. Al\u00e9m disso, todas essas a\u00e7\u00f5es manuais s\u00e3o incontrol\u00e1veis. N\u00e3o podemos envi\u00e1-las para revis\u00e3o antes de executar, usar um sistema de controle de vers\u00f5es e reverter rapidamente altera\u00e7\u00f5es que levaram a um incidente. Para resolver tais problemas, engenheiros criaram e ainda criam scripts autom\u00e1ticos em bash\/shell, que n\u00e3o s\u00e3o muito melhores do que os m\u00e9todos anteriores, pois n\u00e3o s\u00e3o t\u00e3o f\u00e1ceis de ler, entender, manter e modificar rapidamente em um estilo procedural.<\/p>\n<p>Neste artigo e guia pr\u00e1tico, utilizo 2 ferramentas relacionadas \u00e0 pr\u00e1tica de IaC. S\u00e3o elas Terraform e Ansible. Alguns acreditam que n\u00e3o faz sentido usar ambas ao mesmo tempo, pois suas funcionalidades s\u00e3o semelhantes e elas s\u00e3o intercambi\u00e1veis. No entanto, o fato \u00e9 que, inicialmente, elas s\u00e3o projetadas para tarefas completamente diferentes. E o fato de que essas ferramentas devem se complementar foi confirmado em uma apresenta\u00e7\u00e3o conjunta pelos desenvolvedores das empresas HashiCorp e RedHat. A diferen\u00e7a conceitual \u00e9 que o Terraform \u00e9 uma ferramenta de provisionamento para gerenciar os pr\u00f3prios servidores, enquanto o Ansible \u00e9 uma ferramenta de gerenciamento de configura\u00e7\u00f5es, cuja tarefa \u00e9 instalar, configurar e gerenciar o software nesses servidores.<\/p>\n<p>Outra caracter\u00edstica distintiva importante dessas ferramentas \u00e9 o estilo de escrita do c\u00f3digo. Ao contr\u00e1rio do bash e do Ansible, o Terraform utiliza um estilo declarativo, baseado na descri\u00e7\u00e3o do estado final desejado a ser alcan\u00e7ado como resultado da execu\u00e7\u00e3o. Por exemplo, se quisermos criar 10 VMs e aplicar as mudan\u00e7as atrav\u00e9s do Terraform, obteremos 10 VMs. Se executarmos o script novamente, nada acontecer\u00e1, pois j\u00e1 temos 10 VMs, e o Terraform sabe disso, uma vez que ele armazena o estado atual da infraestrutura em um arquivo de estado. J\u00e1 o Ansible utiliza uma abordagem procedural e, se pedirmos para criar 10 VMs, na primeira execu\u00e7\u00e3o obteremos 10 VMs, semelhante ao Terraform. Por\u00e9m, ap\u00f3s a segunda execu\u00e7\u00e3o, teremos 20 VMs. Essa \u00e9 a importante diferen\u00e7a. No estilo procedural, n\u00e3o armazenamos o estado atual e apenas descrevemos a sequ\u00eancia de etapas que devem ser executadas. Naturalmente, podemos lidar com v\u00e1rias situa\u00e7\u00f5es, adicionar algumas verifica\u00e7\u00f5es sobre a exist\u00eancia de recursos e o estado atual, mas n\u00e3o faz sentido desperdi\u00e7ar nosso tempo e esfor\u00e7o controlando essa l\u00f3gica. Al\u00e9m disso, isso aumenta o risco de cometer erros.\u00a0<\/p>\n<p>Resumindo tudo o que foi dito acima, podemos concluir que, para o provisionamento de servidores, a ferramenta mais adequada \u00e9 o Terraform e a nota\u00e7\u00e3o declarativa. J\u00e1 o trabalho de gerenciamento de configura\u00e7\u00f5es \u00e9 melhor delegado ao Ansible. Com isso esclarecido, vamos ver exemplos de uso no contexto da automa\u00e7\u00e3o.<\/p>\n<h3>Valor para a infraestrutura de automa\u00e7\u00e3o<\/h3>\n<p>\n Aqui, \u00e9 importante entender que a infraestrutura de automa\u00e7\u00e3o de testes deve ser considerada como parte de toda a infraestrutura da empresa. Isso significa que todas as pr\u00e1ticas de IaC devem ser aplicadas globalmente aos recursos de toda a organiza\u00e7\u00e3o. Quem \u00e9 respons\u00e1vel por isso depende de seus processos. A equipe de DevOps tem mais experi\u00eancia nesses assuntos, pois ela v\u00ea o quadro geral. No entanto, os engenheiros de QA est\u00e3o mais envolvidos no processo de constru\u00e7\u00e3o da automa\u00e7\u00e3o e na estrutura do pipeline, o que lhes permite perceber melhor todas as mudan\u00e7as necess\u00e1rias e oportunidades de melhoria. A melhor op\u00e7\u00e3o \u00e9 trabalhar em conjunto, trocando conhecimentos e ideias para alcan\u00e7ar o resultado esperado.\u00a0<\/p>\n<p>Vou dar alguns exemplos de uso do Terraform e Ansible no contexto de automa\u00e7\u00e3o de testes e das ferramentas que discutimos anteriormente:<\/p>\n<p>1. Descrever, atrav\u00e9s do Terraform, as caracter\u00edsticas e par\u00e2metros necess\u00e1rios para VMs e clusters.<\/p>\n<p>2. Instalar, com o Ansible, as ferramentas necess\u00e1rias para testes: docker, Selenoid, Selenium Grid e baixar as vers\u00f5es necess\u00e1rias de navegadores\/emuladores.<\/p>\n<p>3. Descrever, atrav\u00e9s do Terraform, as caracter\u00edsticas da VM onde o GitLab Runner ser\u00e1 executado.<\/p>\n<p>4. Instalar, com o Ansible, o GitLab Runner e as ferramentas auxiliares necess\u00e1rias, definindo as configura\u00e7\u00f5es e ajustes.<\/p>\n<h3>Ilustra\u00e7\u00e3o do estado atual da infraestrutura<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.\" src=\"\/wp-content\/uploads\/2020\/04\/5d793a800a4ef62e181e6cb3a3f0544e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links para estudo:<\/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 juntos s\u00e3o melhores<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/blog.gruntwork.io\/a-comprehensive-guide-to-terraform-b3d32832baca\">Um Guia Abrangente para o 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\">Por que usamos Terraform e n\u00e3o Chef, Puppet, Ansible, SaltStack ou 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>Ferramentas semelhantes<\/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>Resumindo!<\/h2>\n<p><\/p>\n<p><strong>Passo<\/strong><br \/>\n<strong>Tecnologia<\/strong><br \/>\n<strong>Ferramentas<\/strong><br \/>\n<strong>Valor para a infraestrutura de automa\u00e7\u00e3o<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nExecu\u00e7\u00e3o local<br \/>\nNode.js, Selenium, Appium<\/p>\n<ul>\n<li>As ferramentas mais populares para web e mobile<\/li>\n<li>Suporte a v\u00e1rias linguagens e plataformas (incluindo Node.js)<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>2<\/strong><br \/>\nSistemas de controle de vers\u00e3o\u00a0<br \/>\nGit<\/p>\n<ul>\n<li>Vantagens semelhantes com o c\u00f3digo de desenvolvimento<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>3<\/strong><br \/>\nCont\u00eaineriza\u00e7\u00e3o<br \/>\nDocker, grid do Selenium, Selenoid (Web, Android)<\/p>\n<ul>\n<li>Execu\u00e7\u00e3o paralela de testes<\/li>\n<li>Ambientes isolados<\/li>\n<li>Atualiza\u00e7\u00e3o de vers\u00f5es simples e flex\u00edvel<\/li>\n<li>Parada din\u00e2mica de recursos n\u00e3o utilizados<\/li>\n<li>F\u00e1cil de configurar<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>4<\/strong><br \/>\nCI \/ CD<br \/>\nGitlab CI<\/p>\n<ul>\n<li>Testes como parte do pipeline<\/li>\n<li>Feedback r\u00e1pido<\/li>\n<li>Visibilidade para toda a empresa\/equipe<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>5<\/strong><br \/>\nPlataformas em nuvem<br \/>\nGoogle Cloud Platform<\/p>\n<ul>\n<li>Recursos sob demanda (pagamos apenas quando precisamos)<\/li>\n<li>F\u00e1cil de gerenciar e atualizar<\/li>\n<li>Visibilidade e controle de todos os recursos<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>6<\/strong><br \/>\nOrquestra\u00e7\u00e3o<br \/>\nKubernetes<br \/>\nNo contexto de cont\u00eaineres com navegadores\/emuladores dentro dos pods:<\/p>\n<ul>\n<li>Escalonamento \/ autoescalonamento<\/li>\n<li>Autorreparo<\/li>\n<li>Atualiza\u00e7\u00f5es e retrocessos sem interrup\u00e7\u00f5es<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>7<\/strong><br \/>\nInfraestrutura como c\u00f3digo (IaC)<br \/>\nTerraform, Ansible<\/p>\n<ul>\n<li>Vantagens semelhantes com a infraestrutura de desenvolvimento<\/li>\n<li>Todas as vantagens de versionamento de c\u00f3digo<\/li>\n<li>F\u00e1cil de fazer mudan\u00e7as e manter<\/li>\n<li>Totalmente automatizado<\/li>\n<\/ul>\n<p><\/p>\n<h2>Diagramas de mapas mentais: a evolu\u00e7\u00e3o da infraestrutura<\/h2>\n<p>\netapa1: Local<br \/>\n<img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.\" src=\"\/wp-content\/uploads\/2020\/04\/507908ba097a603adc3b301ab2f94a8d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>etapa2: VCS<br \/>\n<img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.\" src=\"\/wp-content\/uploads\/2020\/04\/71c5170293d98375d8ab86d05eb47a33.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>etapa3: Containeriza\u00e7\u00e3o\u00a0<br \/>\n<img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.\" src=\"\/wp-content\/uploads\/2020\/04\/da33442a592851e07c3f5800c3ee9ead.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>etapa4: CI\/CD\u00a0<br \/>\n<img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.\" src=\"\/wp-content\/uploads\/2020\/04\/900f18b45124412a1ad00d3901efb40e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>etapa5: Plataformas em Nuvem<br \/>\n<img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.\" src=\"\/wp-content\/uploads\/2020\/04\/840e5063141ac8787612e2fc46b5d690.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>etapa6: Orquestra\u00e7\u00e3o<br \/>\n<img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.\" src=\"\/wp-content\/uploads\/2020\/04\/4651b552efdc893695cbf359c6992e9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>etapa7: IaC<br \/>\n<img decoding=\"async\" alt=\"Ferramentas DevOps n\u00e3o s\u00e3o exclusivas para DevOps. O processo de constru\u00e7\u00e3o de infraestrutura para automa\u00e7\u00e3o de testes do zero.\" src=\"\/wp-content\/uploads\/2020\/04\/e784130f570260fc6c3aa263916e3db5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>E agora?<\/h2>\n<p>\nEnt\u00e3o, este \u00e9 o fim do artigo. Mas, para concluir, gostaria de estabelecer alguns acordos com voc\u00ea.<\/p>\n<p><u>Da sua parte<\/u><br \/>\n Como mencionado no in\u00edcio, gostaria que o artigo fosse de utilidade pr\u00e1tica e ajudasse voc\u00ea a aplicar os conhecimentos adquiridos no trabalho real. Adiciono novamente<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> o link para o guia pr\u00e1tico<\/a><\/noindex>.<\/p>\n<p>Mas mesmo depois disso, n\u00e3o pare, pratique, estude os links e livros relevantes, descubra como isso funciona em sua empresa, encontre \u00e1reas que podem ser melhoradas e participe disso. Boa sorte!<\/p>\n<p><u>Da minha parte<\/u><\/p>\n<p>Do t\u00edtulo, fica claro que esta foi apenas a primeira parte. Embora tenha ficado bastante longa, ainda h\u00e1 t\u00f3picos importantes a serem discutidos. Na segunda parte, planejo abordar a infraestrutura de automa\u00e7\u00e3o no contexto do IOS. Devido a restri\u00e7\u00f5es da Apple relacionadas ao lan\u00e7amento de simuladores de IOS apenas em sistemas macOS, nosso conjunto de solu\u00e7\u00f5es \u00e9 limitado. Por exemplo, n\u00e3o podemos usar Docker para executar o simulador ou nuvens p\u00fablicas para executar m\u00e1quinas virtuais. Mas isso n\u00e3o significa que n\u00e3o existam outras alternativas. Tentarei mant\u00ea-lo informado sobre solu\u00e7\u00f5es de ponta e ferramentas modernas!<\/p>\n<p>Al\u00e9m disso, n\u00e3o mencionei os temas bastante amplos relacionados ao monitoramento. Na parte 3, planejo discutir as ferramentas mais populares para monitorar a infraestrutura, assim como quais dados e m\u00e9tricas devem ser considerados.<\/p>\n<p>E, por \u00faltimo. No futuro, pretendo lan\u00e7ar um curso em v\u00eddeo sobre como construir uma infraestrutura de teste e ferramentas populares. Atualmente, h\u00e1 muitos cursos e palestras sobre DevOps na internet, mas todo o material \u00e9 apresentado no contexto do desenvolvimento, n\u00e3o da automa\u00e7\u00e3o de testes. Nesse aspecto, preciso muito do feedback sobre se tal curso seria interessante e valioso para a comunidade de testadores e automatizadores. Agrade\u00e7o antecipadamente!<\/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.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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\udd47Ferramentas DevOps n\u00e3o s\u00e3o apenas para DevOps. O processo de constru\u00e7\u00e3o da infraestrutura de automa\u00e7\u00e3o de testes do zero | ProHoster","description":"Parte 1: Web \/ Android Nota: este artigo \u00e9 uma tradu\u00e7\u00e3o do artigo original","canonical_url":"https:\/\/prohoster.info\/pt\/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":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/78676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=78676"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/78676\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/78677"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=78676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=78676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=78676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}