Testes automatizados contra a Dog API (https://dog.ceo/api).
JDK 17+, Maven 3.9+ (o pom força isso com o Enforcer), rede. Opcional: Docker ou Jenkins se quiseres correr igual ao servidor.
Java 17, Maven Wrapper, JUnit 5 com tags smoke e regression, Rest Assured e validação com JSON Schema, Allure para relatório. CI no GitHub Actions (ubuntu/windows/macos); Dependabot para dependências. Versões concretas no pom.xml.
GET /breeds/list/allGET /breeds/image/randome/breeds/image/random/{n}(pedir 51 devolve no máximo 50 URLs)GET /breed/{breed}/images, random e random com NGET /breed/{breed}/list(lista de sub-raças; pode vir vazia)GET /breed/{breed}/{sub}/imagese variantes com random- Respostas 404 para raça ou sub-raça inválida
Schemas em src/test/resources/schemas/. Retry em 429, 5xx ou erro de rede — ver core/RetryExecutor.
Há três classes: DogApiPositiveTests, DogApiNegativeTests, DogApiRegressionTests. Com ./mvnw test -Pregression são 20 testes; com -Psmoke só os marcados com @Tag("smoke").
src/test/java/ core, client, models, tests
src/test/resources/ schemas, allure, testdata
Regressão (o que costumo usar):
./mvnw clean test -Pregression -Ddog.api.maxResponseTimeMs=5000PowerShell precisa de --% antes dos argumentos do Maven, senão o -P e os -D partem-se:
.\mvnw.cmd --% clean test -Pregression -Ddog.api.maxResponseTimeMs=5000Smoke: ./mvnw clean test -Psmoke
Um teste só: ./mvnw -Dtest=DogApiPositiveTests#shouldReturnValidRandomImage test
Propriedades úteis: dog.api.baseUrl (default https://dog.ceo/api), dog.api.maxResponseTimeMs (3000 no código, 5000 no CI), dog.api.retryAttempts, dog.api.retryBackoffMs. No CI/Jenkins também vai -Dsurefire.rerunFailingTestsCount=1 para a aba Retries no Allure.
Relatório local: ./mvnw allure:report e abre target/site/allure-maven-plugin/index.html.
Ficheiro .github/workflows/api-tests.yml — testes em três SOs com artefactos de Surefire e Allure por SO.
Disparo automático três vezes por dia às 08:00, 12:00 e 18:00 UTC (schedule com cron). O GitHub só agenda em UTC: em Portugal continental, no inverno (UTC+0) coincide com 8h/12h/18h locais; no horário de verão (UTC+1) corresponde a 9h/13h/19h em Lisboa. Ajusta o cron no workflow se precisares de outras horas.
O job que gera o HTML e publica no Pages só descarrega allure-results-ubuntu-latest. Assim o relatório online não triplica os mesmos 20 testes (Windows e macOS continuam nos artefactos da matriz para comparar se precisares).
Em PRs não há push para gh-pages.
Relatório online: https://alexxandrelopesqa.github.io/dog-api/
Em Settings → Pages a fonte tem de ser branch gh-pages, pasta root. Se estiver em main, vês o repositório em vez do relatório.
Uma vez por clone, para activar o hook que limpa rodapés automáticos que alguns editores acrescentam à mensagem de commit:
git config core.hooksPath .githooksAlternativa: nas definições do teu editor ou IDE, desactivar o texto automático na mensagem de commit.
Jenkinsfile: checkout, testes com timeout 5000 ms no assert, allure:report, artefactos em target/.
Dockerfile: imagem Maven + Temurin 17; docker build -t dog-api-tests . e docker run --rm dog-api-tests corre testes e allure:report.
Latência da API: subir dog.api.maxResponseTimeMs. Pages a mostrar código: rever branch gh-pages. Primeira vez sem histórico no Allure: normal. No Windows do Actions se faltar artefacto, o mvnw.cmd já vai com --%.
API pública — às vezes falha ou demora.