- Estrutura
- Comandos principais
- Execucao por arquivo
- Stress test da rota de purchases
- Diretrizes adotadas
- Boas praticas
- tests/functional: testes de fluxo HTTP e autorizacao
- tests/unit: testes isolados de servicos com mocks
pnpm test
pnpm test functional
pnpm test unitpnpm test functional --files tests/functional/gateways/manage_gateways.spec.ts
pnpm test unit --files tests/unit/services/payment_service.spec.tsExiste um script dedicado na raiz do projeto para stress test completo do fluxo de compras e reembolsos.
Arquivo:
stress-test.sh
- Autenticação → Login automático e obtenção de token
- Busca de produto → Extrai um produto válido da API
- Stress test de compras → Envia N requisições concorrentes via
abparaPOST /api/v1/payments/purchases - Monitoramento de fila → Exibe estado do Redis antes e depois das requisições
- Aguarda processamento → Countdown de 10s para o worker processar as compras
- Reembolsos → Testa reembolso em todas as transações criadas via
POST /api/v1/payments/purchases/:id/refund - Relatório → Sumário com status de sucesso/falha dos reembolsos
./stress-test.sh # padrão: 100 requisições com concorrência 10
./stress-test.sh 300 20 # 300 requisições com concorrência 20
./stress-test.sh 50 5 # 50 requisições com concorrência 5O script mostra em tempo real:
- ✓ Token obtido
- ✓ Product ID encontrado
- ✓ Estado da fila Redis antes/depois
- ✓ Resultado do ab (requisições/s, tempo médio)
- ✓ Contador regressivo de espera (10s)
- ✓ Status individual de cada reembolso
- ✓ Resumo final (reembolsos bem-sucedidos vs. falhas)
O script valida a presença de: ab, curl, jq, redis-cli
- Rotas alinhadas com /api/v1
- Assertivas de status coerentes com middlewares de auth/roles
- IDs obfuscados nos endpoints que exigem encode/decode
- Mocks de contratos nos testes unitarios (GatewaySelector, PaymentProcessor, RefundService)
- Funcional: validar comportamento externo (status, payload, autorizacao)
- Unitario: mockar dependencias por contrato e evitar IO externo
- Evitar acoplamento com dados de seed quando o teste puder criar dados proprios