E2E Testing: Um Tutorial e Guia de Arquitetura

Testes E2E ajudam a validar os fluxos mais importantes em sua aplicação, como pedidos de login de usuários. Para o desenvolvimento front-end, os testes E2E ajudam a verificar se a IU correta foi apresentada. Para desenvolvimento back-end, os testes E2E ajudam a verificar se um fluxo importante em seus serviços back-end retorna o resultado esperado.

Este post irá introduzir você aos testes do E2E e lhe dará dicas acionáveis. Também explicaremos como escrever testes reutilizáveis para que eles possam ser usados para criar testes E2E mais facilmente. Como você deve saber, os testes do E2E são frequentemente uma grande frustração para os desenvolvedores, pois eles requerem muito esforço para escrever, executar e manter.

Primeiro, vamos dar uma olhada onde os testes do E2E estão localizados na pirâmide de testes do software.

Localização dos testes do E2E na pirâmide de testes

Quando olhamos para a pirâmide de testes, encontramos quatro tipos principais de testes para nos ajudar a garantir a qualidade do código:

  1. Os testes do E2E ajudam a verificar caminhos de alto valor em sua aplicação. Em outras palavras, eles ajudam a verificar as histórias dos usuários, pois muitas vezes representam fluxos em sua aplicação.
  2. Os testes de integração ajudam a verificar a integração de múltiplas funções ou componentes. Os testes de integração podem dizer-lhe se o seu código funciona de forma coesa com outras funções.
  3. Os testes de unidade ajudam a verificar a lógica empresarial das funções. Os testes unitários são a forma mais básica de testes e garantem que a lógica de negócio está correta.
  4. Por último, não podemos esquecer a análise estática ou testes estáticos. Os testes estáticos ajudam a encontrar erros de digitação ou erros de digitação.

De acordo com esta pirâmide, a maioria dos testes devem ser testes unitários, com menos testes de integração e ainda menos testes E2E. No entanto, ainda é importante verificar os fluxos em sua aplicação. Os testes do E2E são difíceis de manter e requerem muito esforço. Portanto, verifique apenas os fluxos mais importantes com os testes do E2E. Outros tipos de testes como integração e testes unitários já devem dar-lhe confiança suficiente na sua base de código.

Diferentes estratégias de testes E2E

Deixe-me dizer-lhe que existem diferentes estratégias. Podemos escolher entre o teste E2E horizontal e o teste E2E vertical. Vale a pena explorar ambas as estratégias, pois elas permitem testar diferentes cenários. Vamos aprender o que cada estratégia faz.

Estratégia #1: Testes Verticais de Ponta-a-Ponta

Esta estratégia foca em testar todas as camadas da pirâmide de testes. Ela inclui testes unitários, testes de integração, e testes de IU. Seu objetivo é testar um componente em um nível granular usando testes unitários, testar como um componente se comporta ao interagir com outros componentes usando testes de integração e, por último, verificar o comportamento do componente quando os usuários interagem através da IU.

>

Mais comumente, você quer usar um pipeline de integração contínua para automatizar esses testes para cada solicitação de código ou pull.

Estratégia #2: Testes Horizontais de Ponta a Ponta

Testesorizontais E2E focam na verificação de um fluxo completo de usuários. Aqui está uma amostra do fluxo para uma loja virtual:

>

  1. Abrir página do produto
  2. Selecionar tamanho do produto
  3. Adicionar produto ao carrinho de compras
  4. Vá para o checkout
  5. Endereço completo e informação de pagamento
  6. Pagamento completo
  7. Mostrar tela de confirmação de compras
  8. >

>

Aqui, queremos verificar cada transação do fluxo do usuário. Muitas vezes, este tipo de teste verifica a interação entre diferentes aplicações e verifica mudanças de estado para essas aplicações.

Note que estes tipos de testes são caros de escrever. É necessário algum tempo para definir os fluxos de usuários e escrever esses testes. Portanto, tente focar em caminhos de transação críticos para sua aplicação.

No entanto, certifique-se de testar esses fluxos de usuários críticos para diferentes condições. Esta estratégia permite que você obtenha uma imagem completa da robustez do fluxo do usuário. Estas condições incluem:

  • Cenários de tempo complexos: Por exemplo, um bilhete de concerto só está disponível para si durante 15 minutos.
  • Entrada de dados diferentes ou dados em falta.
  • Separação de fluxos: Um usuário decide sair da página de checkout para ver outra página de produto. Por exemplo, precisamos verificar se o componente salva o estado de checkout.

Próximo, vamos aprender quando escrever testes E2E.

Quando escrever testes E2E

Você pode não saber que os testes E2E são testes caros para serem executados no seu pipeline de integração contínua. Eles geralmente requerem muita preparação, como a criação de uma base de dados que imita os dados de produção. Além disso, eles às vezes representam fluxos demorados em sua aplicação. Portanto, eles podem ser lentos e requerem mais recursos para serem executados.

Utilizar os testes E2E para verificar os fluxos mais importantes na sua aplicação. Exemplos de fluxos de alto valor incluem:

  • Login e logout
  • Registar um novo usuário
  • Adicionar item ao carrinho
  • Alterar senha
  • Outros fluxos importantes relacionados ao seu serviço

No entanto, não se esqueça de verificar a lógica de negócios que você escreve com testes de unidade e integração. A combinação dos testes de unidade e de integração deve dar-lhe muita confiança sobre a qualidade do seu código. Os testes E2E ajudam a aumentar essa confiança para caminhos críticos.

Aqui estão algumas dicas acionáveis para escrever testes E2E.

Dicas para escrever testes E2E

Focus on Writing Reusable Tests

A primeira e mais importante dica é escrever testes e componentes pequenos, independentes e reutilizáveis. Isto permite que você encadear vários componentes pequenos para criar fluxos completos de usuário ponta a ponta mais facilmente. Em vez de escrever muitos componentes personalizados apenas para serem usados pelos testes E2E, concentre-se em escrever componentes reutilizáveis.

A escrita de componentes pequenos e independentes ajuda na reutilização do código e reduz o tempo de resolução de problemas de erro. Também é mais fácil atualizar pequenos componentes quando a funcionalidade ou fluxos de usuários mudam.

Ponderem sempre a razão para escrever um teste E2E

Quando você quiser cobrir um determinado fluxo com um teste E2E, considere se vale a pena cobrir. Somente fluxos de usuários de alto valor de teste com testes E2E. Por exemplo, você não deve estar testando se uma mensagem de erro for mostrada quando um usuário insere um endereço de e-mail incorreto. Este é um caso de uso muito simples que não se encaixa em um teste do E2E. Este requisito pode simplesmente ser testado com um teste de unidade.

Por outro lado, vale a pena testar se a página de login redireciona você para a página correta da aplicação após o login com sucesso. Este é um fluxo valioso para que seus usuários possam usar a aplicação. Em resumo, considere sempre a razão para escrever um teste E2E.

E2E Tests Shouldn’t Depend on Implementation Details

You don’t want to update E2E tests every every time you change implementation details for a certain flow. Portanto, você quer escrever componentes que lhe permitam abstrair detalhes de implementação. Os testes do E2E se tornam muito mais fáceis de manter, e mais divertidos de escrever, quando os detalhes de implementação estão ocultos nos componentes. Em resumo, os testes E2E devem ser independentes dos detalhes de implementação.

Next, vamos olhar para as armadilhas dos testes E2E.

Pitfalls dos testes E2E

Aqui está uma lista de armadilhas comuns associadas aos testes E2E:

  • Testes E2E não devem tentar testar tanto quanto possível de uma só vez. Muitas vezes, os desenvolvedores escrevem enormes testes E2E que verificam cada aspecto do fluxo do usuário. Mantenha as coisas simples e verifique os aspectos mais importantes do seu fluxo de usuários. Por exemplo, para um fluxo de login, você só precisa verificar se o usuário foi redirecionado para a página da aplicação. Isto irá facilitar a manutenção e atualização dos testes E2E.
  • Quando um teste E2E falha, pode ser difícil encontrar a causa exata da falha. No entanto, você pode reduzir os esforços de depuração necessários cobrindo sua lógica de negócios com testes de unidade e integração. Algumas ferramentas também fornecem uma boa análise de causa raiz, incluindo capturas de tela e registros de console de etapas de testes falhos, o que pode reduzir o tempo de resolução de problemas.
  • Testes E2E requerem uma quantidade considerável de tempo no seu pipeline de integração contínua (CI). Eles podem bloquear o seu pipeline de CI, o que atrasa o desenvolvimento geral. Isto significa que você pode precisar investir no seu pipeline de CI para ter mais alguns pipelines para executar testes.
  • E2E testes são um esforço contínuo. Toda vez que novas funcionalidades são adicionadas ou antigas alterações, é provável que você tenha que atualizar seus testes do E2E. No entanto, podemos reduzir este esforço escrevendo componentes reutilizáveis que resumem os detalhes de implementação. Além disso, algumas ferramentas usam AI para ajudar a adaptar os testes quando o código muda, reduzindo a manutenção dos testes.

Agora, vamos dar uma breve olhada nas diferenças entre os testes do sistema e os testes do E2E.

Testes do Sistema vs. testes do E2E – Qual é a diferença?

Então, qual é a diferença entre os testes do sistema e os testes do E2E? Os testes de sistema focam na validação de ambos os requisitos funcionais como não-funcionais. Muitas vezes, é completado por uma equipe externa que trata a aplicação como uma caixa preta. Em outras palavras, eles não sabem nada sobre o funcionamento da aplicação, exceto pelos requisitos que ela deve cumprir.

No entanto, essa forma de teste é freqüentemente confundida com o teste do E2E, já que o teste do sistema é uma forma de teste do E2E. No entanto, os testes de sistema verificam muito mais do que os testes do E2E. Por exemplo, o teste de sistema mede a escalabilidade, desempenho ou confiabilidade. Enquanto os testes E2E focam na conclusão correta dos fluxos de usuários.

Por último, vamos resumir o aprendizado deste artigo.

Conclusão no E2E

Testes de ponta a ponta são bastante poderosos, pois ajudam a validar fluxos de usuários de alto valor ou histórias de usuários. Eles ajudam a garantir a qualidade da sua aplicação.

No entanto, escrever e manter testes E2E pode exigir tempo e esforço significativos. É possível reduzir este esforço escrevendo componentes pequenos e reutilizáveis que abstraem detalhes de implementação. Algumas ferramentas também ajudam a criar testes mais resilientes usando IA ou atributos múltiplos para identificar cada elemento. Portanto, você não precisa atualizar os testes E2E toda vez que os detalhes da implementação mudam para fluxos de usuários de alto valor. Além disso, componentes reutilizáveis permitem que você os encadeia para criar facilmente fluxos de testes E2E.

Testes E2E devem cobrir os fluxos mais importantes da sua aplicação. Eles testam os fluxos que seus usuários e clientes seguem para obter valor da sua aplicação. Se eles não conseguirem fazer login ou adicionar um item a um carrinho, eles irão sair (se puderem) ou chamar o suporte se forem forçados a usar sua aplicação. Por exemplo, você quer cobrir o fluxo de login e logout, mas está menos interessado em verificar uma mensagem de erro depois de inserir um endereço de e-mail ruim.

No final, os testes do E2E devem ser divertidos de escrever. Eles não devem exigir muito tempo e esforço para escrever e manter. Mantenha os testes do E2E simples e focados em componentes reutilizáveis, e você verá ótimos resultados!

Este post foi escrito por Michiel Mulders. Michiel é um desenvolvedor apaixonado por blockchain que adora escrever conteúdo técnico. Além disso, ele adora aprender sobre marketing, psicologia UX, e empreendedorismo. Quando ele não está escrevendo, ele provavelmente está gostando de uma cerveja belga!

Deixe uma resposta

O seu endereço de email não será publicado.