Glossário · Fundamentos de testes
Teste flaky (teste instável)
Em inglês: Flaky test
Também chamado de: testes flaky, teste instável, testes instáveis, teste intermitente
Definição
Um teste que passa e falha no mesmo código sem nenhuma mudança, geralmente por causa de timing, estado compartilhado, ordem dos testes ou um ambiente instável.
Um teste flaky (instável) dá resultados diferentes no mesmo commit. Rode-o dez vezes contra o código sem alterações e você terá algumas aprovações e algumas falhas. A característica que o define é que nada no produto mudou: a variação vem do teste, dos seus dados ou do seu ambiente.
Por que isso importa
Uma suíte com alguns testes flaky ensina o time a rodar as falhas de novo até ficarem verdes. Quando esse hábito se instala, regressões reais também somem no re-run. A flakiness também deixa os pipelines mais lentos, porque os retries multiplicam o tempo de execução, e corrói a confiança na automação mais rápido do que a falta de cobertura.
Causas comuns
- Timing. O teste age antes de a página ou a API estar pronta: um
sleepfixo, uma verificação que lê um valor uma única vez em vez de tentar de novo, ou uma animação ainda em andamento. - Estado compartilhado. Dois testes escrevem no mesmo usuário, carrinho ou linha do banco de dados. Eles passam sozinhos e falham em paralelo ou em outra ordem.
- Dependência da ordem dos testes. Um teste depende de dados que um teste anterior criou.
- Ambiente. Ambientes de teste lentos ou compartilhados, serviços de terceiros, rate limits, fusos horários e mudanças de relógio.
- Dados não determinísticos. Entradas aleatórias sem uma seed registrada, ou asserções sobre “agora”.
Como lidar com um
- Reproduza. Rode o teste sozinho em loop (no Playwright:
npx playwright test my.spec.ts --repeat-each=20) e capture um trace ou vídeo de uma execução com falha. - Encontre a causa em vez de adicionar um retry. Troque os sleeps por esperas baseadas em condições, como as web-first assertions do Playwright ou o
WebDriverWaitdo Selenium. Dê a cada teste os seus próprios dados. - Coloque em quarentena se não der para corrigir hoje. Tire-o do gate bloqueante e mova-o para um job não bloqueante e acompanhado, com um responsável, para que o sinal principal continue confiável.
- Acompanhe a taxa de flakiness ao longo do tempo. Retries que passam escondem o problema, a menos que o relatório os mostre.
Retries (retries: 2 no playwright.config.ts) são uma rede de segurança razoável na CI, mas um teste que só passa no retry continua sendo flaky. O Playwright os reporta como “flaky” para que você possa vê-los.