theme |
---|
techtalk |
Uma abordagem para testes de integração
Andre Silva
Desenvolvedor
Vertical Canais
- Dificuldades
- Solução Inicial
- Obstáculos
- Solução Atual
Nossa metodologia de testes de integração tinha diversas carências.
A mudança para Kubernetes acarretaria outras mais.
(erro-tardio
🏷️)
Testes de comportamento [automatizados] somente durante a publicação em Sandbox/Produção.
- Erros tardios
- Janelas de Deploy
- falso negativo.
Se algum componente estiver temporariamente indisponível, não é possível fazer deploy com segurança pois os testes não poderão ser executados.
(Kubernetes)
Uma vez a aplicação publicada, a aplicação já está servindo requisições.
Não encontramos maneiras de rodar os testes:
- Antes de que os pods antigos sejam apagados,
- Testando contra os novos pods
- E antes que o tráfego seja redirecionado para os novos pods
(API Transacional)
- Loja que não liquida pagamentos
- Dependência de PinPad (dados EMV, senha)
Usando APIs de produção e/ou sandbox é difícil de validar alguns cenários bastante específicos mas que fazem parte do conjunto de comportamentos esperados ou conhecidos das APIs relacionadas.
Exemplos:
- Timeout da API relacionada
- Erros 401/403/404/500, etc
- Casos que quase nunca acontecem
- Nas nossas bases
- Nas APIs/bases relacionadas
A aplicação chamou as APIs relacionadas da forma como deveria?"
- Olhar nos logs
- Risco de regressão
- Base exclusiva pra CI/CD (
lixo
) - Versões mockadas das APIs relacionadas (
lixo
)- Comportamento controlado (
indisp
) - Cenários de teste (
dados-teste
,exceções
) - Endpoint de verificação (
contratos
)
- Comportamento controlado (
- Incorporar ao pipeline de build (
erro-tardio
,erro-cliente
)
- Custo de base exclusiva pra CI/CD
- Poluição (entre execuções, entre times)
- Desenvolvimento e manutenção de APIs mockadas
- Como implementação o "endpoint de verificação" de forma simples?
- Como "Incorporar ao pipeline"?
- Mock de Banco: Container SQL Server for Linux
- Não pago pela "base dev"
- Não poluo
- Mock de API: Container mock-server
- Não tenho que programar uma API com os cenário de mock
- Incorporação ao Pipeline: Biblioteca testcontainers
- Resolve "problema da prontidão"
- Resolve "problema das portas"
Como saber que o container já está pronto para receber requisições?
Sondas
- Logs
- HTTP
- TCP
- SQL
- Acelerar processo de teste (agente self-hosted?)
- Separar código comum em pacotes
- Mock de componentes proprietários (ex.: Service Bus)