🚀 Capítulo 09: Testes End-to-End (E2E) (Tema: Senhor dos Anéis)

NOTE

Este capítulo utiliza a temática de Senhor dos Anéis para explicar os Testes E2E. Testar do início ao fim significa acompanhar toda a jornada do herói, do Condado até a Montanha da Perdição!


1. 🎯 Objetivo da Aula

Compreender o conceito de Testes End-to-End (Ponta a Ponta), entendendo como simular a jornada completa do usuário no sistema real através da automação da interface gráfica.

2. 🏢 O Cenário Prático (Seu Desafio)

A Sociedade do Anel tem uma missão clara: Destruir o Um Anel.

  • Teste Unitário: Verificamos se a espada do Aragorn corta (Isolado).
  • Teste de Integração: Verificamos se o Legolas e o Gimli conseguem contar as baixas juntos.
  • Teste E2E: Nós testamos a jornada inteira. Eles saem do Condado, passam por Valfenda, enfrentam perigos nas Minas de Moria e finalmente chegam à Montanha da Perdição para jogar o anel. Se qualquer passo falhar, a missão falha!

No software, o teste E2E simula o usuário real. Ele abre o navegador, clica no produto, preenche o endereço, digita o cartão e clica em “Comprar”. Ele testa o fluxo completo de ponta a ponta! Seu desafio é mapear essa jornada!

3. 🧠 Fundamentos: A Teoria Traduzida

Os Testes End-to-End (E2E) ficam no topo da Pirâmide de Testes. Eles são os mais completos, mas também os mais lentos e caros.

🚶‍♂️ Por que eles são importantes?

Os testes unitários e de integração podem passar perfeitamente, mas se o botão de “Finalizar Compra” estiver invisível na tela devido a um erro de CSS, o usuário não conseguirá comprar! O teste E2E garante que a tela e o fluxo completo funcionem.

⚖️ Prós e Contras:

  • Prós: Simula o comportamento real do usuário. Dá muita confiança de que o sistema funciona.
  • Contras: São lentos (demoram segundos ou minutos cada um). São frágeis (se você mudar o nome de um botão, o teste quebra).

4. 📖 Exemplo Guiado: O Fluxo da Destruição do Anel

Em um teste E2E moderno (usando ferramentas como Cypress), o código se parece com uma história:

describe('Jornada do Anel', () => {
    it('Deve destruir o anel com sucesso', () => {
        cy.visit('https://terra-media.com/condado'); // Entra no site
        
        cy.get('#anel').click(); // Pega o anel
        
        cy.get('#destino').select('Montanha da Perdição'); // Escolhe o destino
        
        cy.get('#botao-jogar').click(); // Clica no botão
        
        // Verifica se a mensagem de sucesso apareceu na tela!
        cy.get('.mensagem').should('contain', 'O Anel foi destruído!');
    });
});

5. 🛠️ Prática Obrigatória 1: Mapeando a Jornada

Imagine que você está testando um aplicativo de entrega de comida (tipo iFood). Escreva o passo a passo (em português mesmo) de um teste E2E para o fluxo de compra de uma pizza:

  1. Passo 1: Abrir o aplicativo…
  2. (Continue os passos até a confirmação do pedido).

6. 🛠️ Prática Obrigatória 2: O Custo da Fragilidade

Se o teste E2E abre o navegador de verdade e clica nos botões, o que acontece se a internet do computador cair no meio do teste? O teste vai falhar. O código do sistema estava errado ou foi uma falha externa? Por que dizemos que testes E2E são “instáveis” (flaky)?


7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 09 Qualidade) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

mod_11_qualidade_e_testes_de_software/
├── capitulos/
│   ├── capitulo_09_e2e.md
│   └── codigos/
│       └── cap09/
│           └── jornada_anel.cy.js

9. 💡 Checkpoint de Lógica

Por serem lentos, os testes E2E devem ser reservados apenas para os fluxos mais importantes do sistema (os chamados caminhos críticos, como Cadastro, Login e Checkout).

10. 🔥 Desafio de Fixação

Pesquise sobre as duas ferramentas de teste E2E mais populares da atualidade: Cypress e Playwright.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1: Passo 1: Abrir o aplicativo. Passo 2: Digitar “Pizza” na barra de busca. Passo 3: Clicar na primeira pizzaria da lista. Passo 4: Selecionar o sabor Calabresa e clicar em “Adicionar ao carrinho”. Passo 5: Clicar em “Ir para o pagamento”. Passo 6: Selecionar a forma de pagamento e clicar em “Confirmar Pedido”. Passo 7: Verificar se a tela mudou para “Pedido Confirmado!“.


Capitulo Anterior | Proximo Capitulo