From bcf278ae1035c838435cef2b18325d13c77ff9ae Mon Sep 17 00:00:00 2001 From: ThomasTDS Date: Thu, 1 Oct 2026 21:35:04 -0300 Subject: [PATCH] =?UTF-8?q?Restringe=20o=20retry=20autom=C3=A1tico=20a=20f?= =?UTF-8?q?alhas=20de=20rede?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit O pytest-rerunfailures passa a repetir só testes que falham por ConnectionError, ConnectTimeout ou ReadTimeout. Falhas de asserção ou de schema não são mais repetidas, para que um bug intermitente da API não passe na segunda tentativa. --- README.md | 2 +- pyproject.toml | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 796fe1f..46edabe 100644 --- a/README.md +++ b/README.md @@ -145,7 +145,7 @@ Autenticação: `POST /auth` com `{ "username": "admin", "password": "password12 - Relatório HTML automatizado a cada execução (`reports/report.html`, via `pytest-html`), com a versão da `master` publicada em [thomastds.github.io/qa-api-python](https://thomastds.github.io/qa-api-python/) via GitHub Pages. - Cobertura de código (`pytest-cov`) de `api/` e `models/` em cada execução, acompanhada no [Codecov](https://codecov.io/gh/ThomasTDS/qa-api-python). - Limpeza automática: a fixture `context` remove o booking criado no cenário (via token próprio de limpeza) ao final de cada teste, evitando acúmulo de dados na API pública. -- Retry automático (`pytest-rerunfailures`, `--reruns 1`): um cenário que falha roda uma segunda vez antes de ser reportado como falha, amortecendo instabilidade transitória da API pública de demonstração. +- Retry automático só para falhas de rede (`pytest-rerunfailures`, com `--reruns 1` e `only_rerun` no `pyproject.toml`): um teste que falha por erro de conexão ou timeout roda uma segunda vez, amortecendo a instabilidade da API pública de demonstração. Falhas de asserção ou de schema nunca são repetidas, para que um bug intermitente não passe na segunda tentativa. - Integração contínua via GitHub Actions: os testes rodam automaticamente a cada push e pull request para `master`, em Python 3.12 e 3.13, e também diariamente às 06:00 UTC (ver [.github/workflows/tests.yml](.github/workflows/tests.yml)) para detectar quebras causadas pela própria API pública, com o relatório HTML publicado como artifact do workflow. - Dependências atualizadas automaticamente pelo Dependabot (pip e GitHub Actions, semanal — ver [.github/dependabot.yml](.github/dependabot.yml)). PRs de patch/minor com CI verde são mergeados automaticamente ([.github/workflows/dependabot-auto-merge.yml](.github/workflows/dependabot-auto-merge.yml)); bumps de major exigem revisão manual. - Auditoria de vulnerabilidades conhecidas nas dependências instaladas a cada execução do CI, via [`pip-audit`](https://github.com/pypa/pip-audit); encontrar uma vulnerabilidade quebra o build. diff --git a/pyproject.toml b/pyproject.toml index 2a7faf9..b5a30ef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,6 +33,10 @@ include = ["api*", "models*"] [tool.pytest.ini_options] testpaths = ["steps", "tests"] addopts = "--reruns 1 --html=reports/report.html --self-contained-html --cov=api --cov=models --cov-report=term-missing --cov-report=xml:reports/coverage.xml" +# O retry só vale para falhas de rede (conexão recusada ou timeout), que são +# instabilidade da API pública. Falha de asserção ou de schema nunca é +# repetida, para que um bug intermitente não passe na segunda tentativa. +only_rerun = ["^(ConnectionError|ConnectTimeout|ReadTimeout):"] markers = [ "smoke: fluxos ponta-a-ponta mais críticos (equivalente a npm run test:smoke)", "TC-001: id do test case, ver docs/test-cases.md",