Skip to content

Investiga causa raiz dos retries entre navegadores - #66

Merged
ThomasTDS merged 1 commit into
mainfrom
chore/investiga-retries-navegadores
Oct 8, 2026
Merged

ThomasTDS merged 1 commit into
mainfrom
chore/investiga-retries-navegadores

Conversation

@ThomasTDS

Copy link
Copy Markdown
Owner

Resumo

Ultimo item da lista de melhorias: investigar de verdade a causa raiz das falhas que o --retry 1 absorve, em vez de so confiar nele sem questionar (conexao direta com uma reflexao sobre testes 'sempre verdes' que tivemos numa conversa anterior).

Metodologia

Rodei a suite completa 4x em cada navegador, sem retry, pra ver a taxa de falha real sem o retry mascarando nada:

  • Chromium: 4/4 rodadas 100% limpas
  • WebKit: 4/4 rodadas 100% limpas
  • Firefox: falhou em 2 das 4 rodadas, sempre no mesmo passo (RegisterPage.deleteAccount)

Investigacao mais a fundo

A principio parecia um bug especifico do Firefox (race condition, na linha do que ja encontramos antes com WebKit no login). Testei a hipotese de contencao de recursos (rodando sequencial, --parallel 1) e ainda falhava ~50% das vezes no mesmo passo — entao nao era so concorrencia.

Reproduzindo repetidamente e capturando o estado real da pagina no momento exato da falha, descobri a causa verdadeira: um erro 520 do Cloudflare ("Web server is returning an unknown error"), vindo do proprio automationexercise.com, intermitente (~1 em 10 execucoes na investigacao mais extensa). Nao e race condition do nosso codigo nem bug especifico de navegador — e infraestrutura de terceiro genuinamente instavel.

Conclusao

Como e uma falha transitoria real do servidor de terceiro, o --retry 1 ja existente no nivel do cenario (cucumber.js) e o mecanismo certo pra absorver isso — ele reexecuta o fluxo inteiro, incluindo uma nova navegacao, e na pratica sempre resolve. Nao havia bug de codigo pra corrigir aqui. Documentei o achado completo no README, ligado a explicacao que ja existia sobre o --retry 1.

Mantive um ajuste pequeno e honesto: a asercao de "conta deletada" teve o timeout aumentado de 5s (padrao do Playwright) pra 10s, como margem geral de seguranca — nao e a causa raiz (um erro 520 nao desaparece esperando mais), mas e inofensivo manter como timeout um pouco mais generoso pra essa etapa especifica (unica no projeto que envolve uma navegacao real de pagina, nao so atualizacao de DOM).

Test plan

  • npm run lint
  • npm run format:check
  • npm run typecheck
  • Investigacao: 4x por navegador sem retry (12 execucoes completas) + 4x Firefox sequencial sem retry + ~16 reproducoes isoladas do cenario de cadastro/exclusao em Firefox pra capturar o erro 520 com diagnostico completo
  • Validacao final: suite completa nos 3 navegadores + mobile, com a config real de producao (--retry 1), todos verdes

Rodei a suite completa 4x em cada navegador, sem retry, pra entender
de onde vem a instabilidade de verdade em vez de so confiar no retry
sem questionar. Chromium e WebKit: 100% estaveis (4/4 cada). Firefox:
falhou em 2 das 4, sempre no mesmo passo (RegisterPage.deleteAccount).

Investigando mais a fundo (reproducao repetida + captura da pagina
real no momento da falha), descobri que nao e race condition do
codigo nem bug especifico do Firefox - e um erro 520 transitorio do
Cloudflare vindo do proprio automationexercise.com (~1 em 10
execucoes na investigacao). Como e falha de infraestrutura de
terceiro genuinamente transitoria, o --retry 1 ja existente no nivel
do cenario e o mecanismo certo pra absorver isso. Nao havia bug de
codigo pra corrigir - a investigacao confirmou que a estrategia de
retry em vigor estava correta, e documentei o achado no README.

Mantido um ajuste pequeno e honesto: o timeout da asserção de conta
deletada subiu de 5s (padrao do Playwright) pra 10s, como margem
geral de seguranca - nao e a causa raiz, mas e inofensivo manter.
@ThomasTDS
ThomasTDS merged commit 3e088fa into main Oct 8, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant