Estratégia de Testes
Para quem é esta página
Engenheiros. Para exemplos concretos, veja Testes Unitários e E2E.
Pirâmide de Testes
┌───────────┐
│ Carga │ 2% (k6)
│ Segurança │
└─────┬─────┘
┌────────┴────────┐
│ E2E (Playwright)│ 3%
└────────┬────────┘
┌────────────┴──────────────┐
│ Contrato (Pact) │ 5%
└────────────┬──────────────┘
┌──────────────────┴──────────────────┐
│ Integração (pytest + TestContainers) │ 20%
└──────────────────┬──────────────────┘
┌────────────────────────────────────────────────┐
│ Unitários (pytest) │ 70%
│ Domínio: entidades, VOs, serviços de domínio │
└────────────────────────────────────────────────┘
Cobertura Mínima por Camada
| Camada | Mínimo | Justificativa |
|---|---|---|
| Domain (entities, VOs, services) | 95% | Regras de negócio críticas — zero tolerância |
| Application (use cases) | 85% | Orquestração de fluxos |
| Infrastructure (repositories) | 70% | I/O mockado; cobrir mapeamentos ORM |
| Presentation (routes) | 80% | Validação de entrada e formato de resposta |
| Global | 80% | Quality gate — CI bloqueia se abaixo |
Quality Gates do CI
| Gate | Condição de bloqueio |
|---|---|
| Cobertura | < 80% global |
| SAST (Bandit) | Qualquer finding HIGH ou CRITICAL |
| Dependências (Safety) | CVE CRITICAL em qualquer pacote |
| Secrets (Gitleaks) | Qualquer segredo detectado no código |
| Testes unitários | Qualquer falha |
| Testes de integração | Qualquer falha |
| p95 de latência (k6) | > 1000ms em endpoint crítico |
Princípio FIRST
Fast — testes unitários < 5s total
Isolated — sem dependências entre testes
Repeatable — mesmo resultado em qualquer ambiente
Self-validating — passa ou falha, sem interpretação
Timely — escrito junto com o código
Configuração pytest
[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
addopts = """
--cov=src
--cov-report=term-missing
--cov-fail-under=80
"""
Ver também
- Testes Unitários — exemplos de domínio com pytest
- Testes de Integração — TestContainers
- Testes E2E — Playwright
- Testes de Carga — k6