A sintonia perfeita: automatização de testes e DevOps

A sintonia perfeita: automatização de testes e DevOps

A importância da automatização de testes está relacionada à qualidade do produto final. Mas ao pensar em automatizar, é preciso analisar a sua viabilidade: a automação vai proporcionar ganho de tempo? Será possível reduzir os custos mantendo a mesma qualidade?

Além disso, outros fatores também precisam ser analisados:

  • Qual é o grau de reutilização dos testes automatizados?
  • O time responsável tem conhecimento suficiente sobre o comportamento que é esperado do sistema a ser testado?
  • Existe tempo disponível para realizar a automatização?

Outro ponto a ser considerado é quão frequentes são as mudanças das funcionalidades a serem verificadas, pois pode não ser viável automatizar um teste de uma funcionalidade que vai sofrer alterações com frequência.

Quando automatizar?

A automação pode ser utilizada como uma solução para evitar o trabalho manual em excesso, como em testes de regressão, pois são repetições de testes já realizados após modificações realizadas no projeto.

Eles procuram a existência de defeitos introduzidos ou não descobertos durante a fase de desenvolvimento. Esses testes em geral são desenvolvidos de forma lenta e precisam ser executados repetidamente. Tudo isso os tornam fortes candidatos à automação.

Além de evitar ações repetidas manualmente, outro benefício da automatização é prover feedback de forma frequente desde o início das atividades de desenvolvimento. Isso é realizado, principalmente, através da automação dos testes unitários, realizados por desenvolvedores, ou seja, a automação não deve ser responsabilidade apenas da área de testes, mas uma prática comum no desenvolvimento de software como um todo.

Funcionalidades que tenham muita importância para o cliente também devem ser um dos focos das atividades de automação, pois são partes do sistema que certamente serão muito utilizadas e terão alta visibilidade.

Ferramentas de automação também podem ser utilizadas na medição de performance de aplicações e para preparar um ambiente de teste com um grande volume de dados.

No primeiro quadrinho da tirinha um robô segura uma lista com os seguintes passos: “Encontre o #BTN1, clique no #BTN1 e envie a mensagem”. O segundo quadrinho é dividido em três partes, em todas o robô olha para um quadro que mostra um ícone como se fosse um aplicativo em carregamento. No terceiro quadro o robô fala para uma pessoa “incapaz de encontrar o elemento #btn1”. No quarto quadrinho a pessoa, com uma expressão zangada, aponta para o quadro que agora mostra uma interface de login com uma foto de perfil, um formulário com dois campos nomeados #INPUT1 e #INPUT2 e o botão #BTN1.

Fonte: Monkey User

Banner promocional da Alura, com um design futurista em tons de azul, apresentando dois blocos de texto, no qual o bloco esquerdo tem os dizeres:

Linguagens e frameworks populares

Para a automação de testes de software, existem várias linguagens de programação e frameworks que podem ser utilizados, cada um com suas vantagens e cenários de uso.

Linguagens de programação

  • Java: amplamente adotado para automação de testes com o uso de frameworks como o Selenium.
  • Python: conhecido por sua simplicidade e vasta comunidade de automação, é utilizado com frameworks como o PyTest e Robot Framework.
  • JavaScript: principalmente usado para automação de testes em navegadores web com o Selenium WebDriver, Puppeteer, e Protractor.
  • C#: comumente usado em ambientes Windows para automação de testes com o Visual Studio e o NUnit.
  • Ruby: utilizado em conjunto com o framework Cucumber para testes BDD (behavior-driven development ou desenvolvimento orientado por comportamento).

Frameworks de testes

  • Selenium: uma das ferramentas mais populares para automação de testes em navegadores web, compatível com várias linguagens.
  • Appium: especializado em automação de testes de aplicativos móveis para Android e iOS.
  • JUnit: amplamente utilizado para testes unitários em Java.
  • TestNG: framework alternativo ao JUnit para Java, com recursos adicionais.
  • PyTest: framework de teste Python que oferece simplicidade e extensibilidade.
  • Robot Framework: uma ferramenta de automação de testes de aceitação com suporte para várias linguagens e de fácil legibilidade.

A escolha da linguagem e do framework depende das necessidades do projeto, da experiência da equipe e das tecnologias envolvidas. Cada um desses recursos possui suas próprias vantagens e desvantagens, e a seleção adequada contribui significativamente para o sucesso da automação de testes de software.

Automação de testes + DevOps = Sucesso

A relação entre QA e DevOps é fundamental para garantir a entrega de software de alta qualidade de forma rápida e eficiente, pois a abordagem de DevOps visa automatizar e otimizar o ciclo de vida do desenvolvimento de software, desde a concepção até a entrega.

Sendo assim, a conexão entre eles ocorre principalmente nos seguintes pontos:

Automação de testes: no contexto de DevOps, a automação é uma parte crucial. QA e DevOps trabalham juntos para automatizar testes de unidade, testes de integração, testes de regressão e outros, permitindo que os problemas sejam rapidamente identificados e resolvidos antes que o software seja implantado.

Integração contínua (CI) e entrega contínua (CD): QA desempenha um papel essencial na criação de pipelines de CI/CD, em que o código é testado automaticamente em cada fase do desenvolvimento. Isso ajuda a garantir que apenas código de alta qualidade seja implantado automaticamente no ambiente de produção.

Monitoramento de desempenho: após a implantação, o QA pode continuar monitorando o desempenho do software em tempo real. Isso permite identificar problemas de desempenho e qualidade e abordá-los rapidamente.

Ferramentas úteis

Conheça algumas ferramentas popularmente utilizadas nas rotinas de CI/CD e testes contínuos.

Jenkins

Jenkins é uma ferramenta de automação de código aberto usada principalmente no desenvolvimento de software para automatizar tarefas repetitivas e auxiliar na integração contínua e entrega contínua (CI/CD). Ele permite que equipes de desenvolvimento automatizem a compilação, teste e implantação de seu código, facilitando a entrega rápida e confiável de software.

Git

O Git é um sistema de controle de versão distribuído amplamente utilizado no desenvolvimento de software. Ele foi criado por Linus Torvalds, em 2005, e é conhecido por sua eficiência, velocidade e capacidade de gerenciar projetos de qualquer tamanho

GitHub

O GitHub é uma plataforma essencial no mundo do desenvolvimento de software, que facilita a colaboração, o controle de versão, a automação e a entrega de software de maneira eficaz e eficiente.

GitHub Actions

O GitHub Actions é um serviço de automação de fluxo de trabalho fornecido pelo GitHub, a plataforma de hospedagem de código-fonte. Ele permite automatizar tarefas e processos relacionados ao desenvolvimento de software diretamente nos repositórios do GitHub.

Conclusão

Realizar a automatização dos testes nos contextos em que faz sentido automatizar, associando com o uso de ferramentas e práticas de DevOps, garante que o software seja desenvolvido, testado e entregue de maneira eficiente, com alta qualidade e atendendo às necessidades dos usuários. Essa abordagem integrada é fundamental para o sucesso do desenvolvimento de software.

Para saber mais, confira:

Caroline Carvalho
Caroline Carvalho

Analista de qualidade de software, estudante de Engenharia de Computação e de Análise e Desenvolvimento de Sistemas. Faço parte do Scuba Team, exploradora do universo Python , e também gosto muito de DevOps. Nas horas vagas gosto de falar sobre cultura geek e café.

Veja outros artigos sobre DevOps