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.