Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 11 additions & 5 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ permissions:
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ['3.12', '3.13']

steps:
- name: Checkout código
Expand All @@ -22,7 +26,7 @@ jobs:
- name: Configurar Python
uses: actions/setup-python@v7
with:
python-version: '3.12'
python-version: ${{ matrix.python-version }}
cache: 'pip'

- name: Instalar dependências
Expand All @@ -45,30 +49,32 @@ jobs:
- name: Rodar testes
run: pytest

# Cobertura, relatório HTML e Pages só precisam de uma versão do Python
# gerando o artifact — rodar pras duas duplicaria o upload à toa.
- name: Enviar cobertura para o Codecov
if: always()
if: always() && matrix.python-version == '3.12'
uses: codecov/codecov-action@v7
with:
files: reports/coverage.xml
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false

- name: Publicar relatório HTML
if: always()
if: always() && matrix.python-version == '3.12'
uses: actions/upload-artifact@v7
with:
name: pytest-report
path: reports/report.html
retention-days: 15

- name: Preparar página do GitHub Pages
if: github.ref == 'refs/heads/master' && github.event_name == 'push'
if: matrix.python-version == '3.12' && github.ref == 'refs/heads/master' && github.event_name == 'push'
run: |
mkdir -p pages
cp reports/report.html pages/index.html

- name: Empacotar artifact do GitHub Pages
if: github.ref == 'refs/heads/master' && github.event_name == 'push'
if: matrix.python-version == '3.12' && github.ref == 'refs/heads/master' && github.event_name == 'push'
uses: actions/upload-pages-artifact@v5
with:
path: pages
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ Autenticação: `POST /auth` com `{ "username": "admin", "password": "password12
- 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.
- Integração contínua via GitHub Actions: os testes rodam automaticamente a cada push e pull request para `master`, 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.
- 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.
- Rastreabilidade de QA: matriz de test cases em [docs/test-cases.md](docs/test-cases.md), com tags `@TC-XXX` em cada `Scenario` e um subconjunto `@smoke` (`pytest -m smoke`) cobrindo os fluxos ponta-a-ponta mais críticos. Bugs reais encontrados são documentados como GitHub Issues usando o template em [.github/ISSUE_TEMPLATE/bug_report.md](.github/ISSUE_TEMPLATE/bug_report.md).
Expand All @@ -145,11 +145,11 @@ Autenticação: `POST /auth` com `{ "username": "admin", "password": "password12

### Fluxo de Trabalho

A branch `master` é protegida: toda mudança passa por Pull Request, e o merge só é liberado depois que o check de CI (`test`) passa. Fluxo padrão:
A branch `master` é protegida: toda mudança passa por Pull Request, e o merge só é liberado depois que os checks de CI (`test (3.12)` e `test (3.13)`) passarem. Fluxo padrão:

```
git checkout -b minha-branch
# editar, rodar pytest localmente
git push -u origin minha-branch
# abrir PR no GitHub, aguardar o check "test" passar, fazer merge
# abrir PR no GitHub, aguardar os checks passarem, fazer merge
```
Loading