From 801e0e4d8cc2b6e79c66cc18bb24e025b64fbb26 Mon Sep 17 00:00:00 2001 From: ThomasTDS Date: Sat, 19 Sep 2026 14:36:28 -0300 Subject: [PATCH] =?UTF-8?q?Publica=20relat=C3=B3rio=20de=20testes=20no=20G?= =?UTF-8?q?itHub=20Pages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Depois de cada push em master, o job de testes empacota reports/report.html como index.html e um segundo job publica no GitHub Pages, dando um link fixo para o relatório mais recente sem precisar baixar artifact do CI. PRs e a execução diária agendada não disparam publicação, só push direto em master. --- .github/workflows/tests.yml | 30 ++++++++++++++++++++++++++++++ README.md | 4 +++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1f2390a..c054689 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -8,6 +8,9 @@ on: schedule: - cron: '0 6 * * *' +permissions: + contents: read + jobs: test: runs-on: ubuntu-latest @@ -52,3 +55,30 @@ jobs: 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' + 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' + uses: actions/upload-pages-artifact@v5 + with: + path: pages + + deploy-pages: + if: github.ref == 'refs/heads/master' && github.event_name == 'push' + needs: test + runs-on: ubuntu-latest + permissions: + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Publicar no GitHub Pages + id: deployment + uses: actions/deploy-pages@v5 diff --git a/README.md b/README.md index cf32e18..142f869 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,8 @@ pytest Ao final da execução, um relatório HTML é gerado em `reports/report.html` (não versionado). +O relatório da execução mais recente em `master` também fica publicado em **[thomastds.github.io/qa-api-python](https://thomastds.github.io/qa-api-python/)**, sem precisar rodar nada localmente ou baixar artifact do CI. + ### Rodar apenas a smoke suite ``` @@ -118,7 +120,7 @@ Autenticação: `POST /auth` com `{ "username": "admin", "password": "password12 - API Client Objects: `AuthApiClient` e `BookingApiClient` encapsulam as chamadas HTTP, do mesmo jeito que Page Objects encapsulam elementos de UI. - Validação de schema com [Pydantic](https://docs.pydantic.dev/): as respostas da API são validadas em tempo de execução contra os modelos em `models/booking.py` (fonte única de verdade), não só tipadas por anotação — se a API mudar o formato de uma resposta, o teste falha com uma mensagem clara em vez de passar silenciosamente ou quebrar mais adiante. - Cobertura de autenticação, CRUD completo, PUT vs. PATCH, e casos de acesso não autorizado (403). -- Relatório HTML automatizado a cada execução (`reports/report.html`, via `pytest-html`). +- 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.