Glossário · Performance
Soak test (teste de resistência)
Em inglês: Soak testing
Também chamado de: soak test, teste de resistência, teste de endurance, endurance testing
Definição
Teste de performance que mantém uma carga normal e realista por muitas horas para expor problemas que só se acumulam com o tempo, como vazamentos de memória.
O soak test (também chamado de teste de resistência ou endurance testing) roda o sistema sob uma carga normal e sustentada por um longo período, normalmente várias horas e às vezes um dia ou mais. A carga em si não tem nada de especial; o ponto é a duração. Muitos defeitos são invisíveis em um teste de carga de 10 minutos porque crescem devagar: alguns megabytes vazados a cada mil requisições, uma conexão que nunca é devolvida ao pool, um arquivo de log que enche o disco.
O que ele encontra
- Vazamentos de memória. Uso de heap que sobe de forma constante e nunca volta a cair depois do garbage collection, terminando em um crash por falta de memória.
- Esgotamento de recursos. Conexões com o banco de dados, file handles, threads ou sockets que são abertos e não são liberados.
- Degradação gradual da latência. O p95 na sexta hora é visivelmente pior que na primeira, muitas vezes por causa de caches crescendo, inchaço de tabelas ou fragmentação.
- Interferência de jobs agendados. Jobs batch noturnos, backups, renovação de certificados ou rotação de logs colidindo com o tráfego real.
- Crescimento de armazenamento. Discos enchendo com logs, arquivos temporários ou filas acumuladas.
Exemplo (k6)
export const options = {
stages: [
{ duration: '10m', target: 80 },
{ duration: '8h', target: 80 },
{ duration: '10m', target: 0 },
],
thresholds: {
http_req_duration: ['p(95)<600'],
http_req_failed: ['rate<0.005'],
},
};
A função default é a mesma jornada realista de usuário que você usaria em um teste de carga. A diferença é o longo estágio estável.
Como ler os resultados
Um soak test é avaliado por tendências, e não só por thresholds de aprovado/reprovado. Faça gráficos de memória, contagem de conexões, percentis de latência e taxa de erros ao longo de toda a execução. Uma linha plana é aprovação. Uma inclinação constante para cima é um defeito, mesmo que a execução tenha terminado antes de qualquer crash, porque a produção roda por muito mais do que oito horas.
Erros comuns
- Rodar o soak com carga de nível de estresse, o que mistura duas perguntas e deixa a causa de uma falha pouco clara.
- Olhar só as métricas do lado do cliente. Os vazamentos aparecem primeiro nos gráficos de memória e de pools do servidor.
- Usar um ambiente que reinicia os serviços ou os substitui por autoscaling durante a execução, o que esconde justamente o acúmulo que você está procurando.
- Pular o teste porque ele é lento. Agende-o para a madrugada ou para o fim de semana em vez de abandoná-lo.