Post on 12-Jan-2017
4 dicas valiosas para uma pirâmide de testes saudável
The Developer's Conference 2016
Taíse Dias @taisedias
Ricardo Cavalcanti @r_caval
Pirâmide de testes
UI
Service
Unit
Mike Cohn: Succeeding with Agile
UI
Service
Unit
UI
Service
Unit
UI
Service
Unit
UNITÁRIO
Aumento de escopo
Mais confiança
Mais rápido Melhor
isolamento
UI
SERVIÇO
Sam Newman: Building Microservices
Fonte: Crispin, Lisa; Gregory, Janet. Agile Testing
Testes manuais
Testes de UI
Testes de aceitação (API)
Testes unitários / testes de componente
Lisa Crispin, Janet Gregory: Agile Testing
Recomendações
Separar testes unitários dos de aceitação.
Projeto W: arquitetura
Web Service
Middle tier
Web Service Web Service
Projeto W: pirâmide
80 testes API: Serviço isolado
API: Serviço integrado com outros
serviços
110 testes, 20 suites em paralelo,
2.5 min
Unitários
1922 testes, 5.5 min
Contrato do Serviço
Integração
1842 testes
40 testes, 9.3 min
1922 testes (unitários + API) 5.5 min
Projeto W
Web Service Web Service
Projeto G: arquitetura
UI
Middle tier
Web Service
Projeto G: pirâmide
610 testes, 4 min
Unitários: UI
API: Serviço integrado com outros
serviços
UI
120 testes, 3 min
738 testes, 8 min
Unitários: Serviço
Unitários: Middle tier 1754 testes, 27 seg
881 testes, 19 seg
1296 testes, 13 seg
3931 testes, 59 seg
5 testes, 1.5 min UI: isolado
5 testes, 6 min 10 testes, 7.5 min
API: Serviço isolado
API: Contrato do Serviço 8 testes, 1 min
1922 testes (unitários + API) 5.5 min
versus
Projeto W
3931 testes unitários 59 seg
Projeto G
Quase o dobro de testes em menos de 20% do tempo
Para promover feedback mais rápido.
Separar testes unitários dos de aceitação.
Não adiar implementação de jornada do usuário.
Web Service
Projeto E: arquitetura
Cluster spark com 3 apps
Cluster spark com 1 app
Projeto E: pirâmide
58 testes, 1 min
Unitários: Serviço 137 testes, 52 seg
API
Unitários: Cluster com 3 apps
Unitários: Cluster com 1 app 65 testes, 55 seg
123 testes, 64 seg
E2E: Cluster com 3 apps 6 testes, 1.5 min
202 testes 2.8 seg
64 testes 2.5 min
Projeto T: arquitetura
Aplicação Rails
Projeto T: pirâmide
9 testes 9 seg
Unitários
Integração
116 testes 25 seg
UI 9 testes
4 seg
Não adiar implementação de jornada do usuário. Quando for adicionar novos testes, checar se faz sentido incrementar uma jornada de usuário também para não acumular como dívida
O topo da pirâmide traz confiança sobre o funcionamento.
UNITÁRIO
Aumento de escopo
Mais confiança
Mais rápido Melhor
isolamento
UI
SERVIÇO
Sam Newman: Building Microservices
UI
Service
Unit
O topo da pirâmide traz confiança sobre o funcionamento. Porém esses testes não guiam o design do novo sistema e são mais difíceis de manter no longo prazo
Provedor e consumidor devem poder iniciar os testes de contrato.
Testes de Contrato
❏ Teste de integração que garante que um provedor de serviço cumpre o contrato com o consumidor
1. Consumidor define expectativas
consumer provider
pact
2. Expectativas verificadas no provedor
consumer provider
pact
Projeto P: pirâmide
396 testes, 3 min API: Serviço isolado
API: Serviço integrado com outros
serviços
9 testes, 7 min
409 testes, 10+ min
Unitários 1835 testes, 18 seg
API: Contrato do Serviço 4 testes, 30 seg
Web Service
Web Service
UI
Web Service
Projeto P: arquitetura
Web Service
Provedor e consumidor devem poder iniciar os testes de contrato. Quando somente o provedor executa a verificação do contrato, parece que apenas ele é a causa da quebra.
Resumo
34
Separar os testes unitários dos testes de aceitação.
Não adiar implementação da jornada do usuário.
Testes no topo da pirâmide trazem mais confiança.
Provedor e consumidor devem poder iniciar os testes de contrato.
Perguntas? Taíse Dias @taisedias
Ricardo Cavalcanti @r_caval
Referências
❏ Crispin, Lisa; Gregory, Janet. Agile Testing: A Practical Guide for Testers and Agile Teams.
❏ Fowler, Martin. Test Pyramid.
❏ Fowler, Martin. Component Test.
❏ Fowler, Martin. Broad Stack Test.
❏ Fowler, Martin. Integration Contract Test.
❏ Newman, Sam. Building Microservices.