🚀 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:
- Passo 1: Abrir o aplicativo…
- (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)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 09 Qualidade) e clique em Commit to main. - 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.js9. 💡 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!“.