Testes end-to-end: sucesso na implementação da automação

Por dti digital|
Atualizado: Nov 2024 |
Publicado: Nov 2024

Hoje, como você garante a entrega de valor, a confiabilidade e a eficiência do seu projeto? 

Com o intuito de responder a essa questão crucial, uma das melhores respostas é a automação de testes end-to-end. Muitas pessoas, principalmente nossos clientes, tendem a imaginar que automação de testes é apenas mais um tipo de teste de software, que busca verificar se a implementação técnica foi realizada corretamente. No entanto, esse não é o objetivo real de um projeto de automação. Muitas vezes, nem todos os membros da equipe compreendem essa diferença.
Sendo assim, gostaria de compartilhar com vocês como apliquei com sucesso a automação de testes neste case da Gain Theory.

Desafio

“Qual QA nunca se deparou com a seguinte situação em um novo projeto?” 

A automação legada não estava entregando valor real para o cliente. Ao entrar no projeto, percebi que os testes de automação estavam implementados de forma a não “contar uma história” da experiência do usuário. Ou seja, não era possível distinguir corretamente quais fluxos o sistema tinha, muito menos qual o valor de cada um deles. Logo, isso me deixou com uma sensação de aleatoriedade muito grande. O que tínhamos eram checagens avulsas de parâmetros do sistema.

Quer ver mais conteúdos como esse?

O que a automação deveria ser, então? 

Automação é ter um “superusuário” que testa seu sistema de ponta a ponta, todos os dias. É isso que os testes end-to-end (E2E) fazem: simulam a jornada completa do usuário e te devolvem um feedback estruturado. Esses testes não se preocupam com uma parte isolada do código ou com uma feature, mas com a experiência completa. De fato, essa visão externa faz toda a diferença.  

Os testes E2E são uma camada essencial em muitos contextos. Eles ajudam a entender como o sistema se comporta em um cenário real, diferente de outras abordagens que validam parâmetros técnicos de implementação. Sendo assim, essa distinção é crucial; a escolha da abordagem de testes adequada para cada situação é fundamental para garantir uma entrega de valor e qualidade. 

Desafios da integração contínua com testes end-to-end

Pensando na automação de testes apenas sob a ótica do desenvolvimento, uma dúvida comum é: “Por que não rodar os testes diretamente no GitHub Actions ou Azure DevOps logo após os testes unitários na integração contínua?” Em minha opinião, essa abordagem pode entrar em conflito com o propósito real da automação de testes, criando a expectativa equivocada de aplicar os mesmos parâmetros e expectativas dos testes unitários aos testes E2E.

A automação de testes deve considerar diferentes camadas e tipos de testes. Testes unitários, por exemplo, são rápidos e focam em trechos de código isolados. Em contrapartida, os testes end-to-end (E2E) examinam o sistema como um todo, envolvendo múltiplos componentes e dependências externas. Devido à sua abrangência e ao tempo de execução que demandam, os testes E2E não devem ser tratados da mesma maneira que os testes unitários dentro de um pipeline de integração contínua.

Embora seja importante garantir a eficiência na execução de todos os testes, considerar os E2E na mesma categoria dos testes caixa branca no pipeline de CI pode resultar em tempos de execução prolongados, comprometendo a eficácia do processo. Estratégias mais adequadas incluem a execução paralela ou em etapas separadas, otimizando o tempo de execução e garantindo que os resultados de cada tipo de teste sejam precisos e relevantes para o ciclo de desenvolvimento.

Essa separação, além de garantir a eficiência do processo, permite que os testes E2E se concentrem nos aspectos mais críticos e abrangentes do sistema, retornando resultados confiáveis sem comprometer o fluxo de integração contínua. Também é recomendável que este tipo de teste seja analisado por QA’s, pois os testes E2E apresentam especificidades e fragilidades únicas, como sua sensibilidade a alterações na interface e dependência de componentes externos, que são mais bem compreendidas pelos especialistas em qualidade. Isso nos leva a refletir cuidadosamente sobre seu uso como gates de qualidade: se mal utilizados, podem gerar falsos negativos e atrasos no pipeline, comprometendo a confiança e agilidade do processo de desenvolvimento.

Limitações para testes end-to-end

Automatizações especializadas, como smoke tests, oferecem verificações rápidas, porém representam apenas uma fração do valor que a automação completa pode oferecer. Em contextos de software altamente distribuído, pode ser interessante contar com um ambiente dedicado exclusivamente para automação de testes E2E. Nesse cenário, os testes rodariam de forma agendada, garantindo que todos os componentes necessários estejam presentes e integrados antes da execução dos testes. Isso evita falhas causadas por dependências que ainda não foram implementadas e torna o processo mais confiável e representativo.

Além disso, os relatórios de testes em plataformas de integração contínua nem sempre oferecem uma visualização ideal para testes E2E, que são mais complexos e frequentemente se beneficiam de dashboards com vídeos, capturas de tela e insights detalhados. Esses recursos facilitam a identificação de falhas e tornam a análise dos resultados mais acessível e precisa. A falta de suporte nativo para visualizações mais completas nos ambientes de CI/CD pode dificultar o processo de depuração e interpretação dos resultados.

Soluções para automação em testes end-to-end

Nesta seção, abstrairei detalhes sobre workflows dos QAs, estrutura de Kanban, planning, entre outros aspectos organizacionais. O foco estará nas decisões técnicas essenciais para implementar uma automação robusta e eficaz.

Pt 0 – Base:

Primeiramente, é essencial entender bem a filosofia dos testes E2E e enfatizar a resiliência dos testes. Nos meus projetos, estabeleço como padrão que a automação deve fornecer feedback confiável, com uma média máxima de 5% de falsos positivos e negativos em cada relatório diário. Na minha opinião, a resiliência é a primeira e mais importante decisão para garantir que a automação seja realmente útil e sustentável no longo prazo.

Pt 1 – Implementação:

O próximo passo neste caso foi containerizar o projeto de automação. Essa abordagem permite executar a automação no mesmo ambiente do sistema. Esse fator é crucial em projetos onde a segurança e o isolamento podem afetar os testes. Com os testes rodando em containers, conseguimos garantir maior consistência e segurança nos resultados. Além disso, os testes E2E refletem com mais precisão o comportamento do sistema em um ambiente o mais próximo possível do real.

Pt 2 – Feedback:

Com a automação integrada ao ambiente do sistema, o próximo passo foi implementar o Cypress Cloud. Esta ferramenta trouxe uma nova dinâmica para os testes E2E.  

Por que Cypress Cloud para testes end-to-end?

O Cypress Cloud se destacou entre nossas opções por oferecer um painel visual intuitivo, permitindo uma análise rápida dos resultados. Com uma interface amigável, é possível entender rapidamente falhas, além de revisar vídeos de execuções e identificar soluções. Em suma,  economizando tempo e esforço.

Resultados Visuais e Insights

Os vídeos proporcionam uma visão clara da jornada do usuário, destacando erros e melhorando a experiência do sistema. Além disso, os relatórios diários automatizados fornecem estatísticas valiosas sobre a saúde do sistema. Isso permite monitorar e corrigir problemas proativamente, aplicando corretamente o conceito de “Shift -Left Testing” do movimento DevOps.  

Resultados e Conclusão

Com a integração do Cypress Cloud e a containerização, não apenas melhoramos a eficiência da equipe de QA, evitando que os QAs manuais precisassem verificar todos os fluxos antigos em busca de regressões desde o início do projeto, bem como aumentamos a confiança nas releases. Os testes E2E agora geram relatórios precisos e ajudam a identificar e corrigir problemas antes que afetem o usuário final.

Em conclusão, essa abordagem permite a entrega de um produto de maior qualidade, com a monitoração adequada de todos os casos de uso e de usabilidade. Dessa forma, fica claro para o cliente que a automação de testes E2E se tornou uma ferramenta valiosa para garantir a confiabilidade e a eficiência do nosso projeto. 

Escrito por Lucas Magnani, engenheiro de automação de testes na dti digital

Quer saber mais?