Skip to content

Commit a718e9c

Browse files
authored
Revise README for clarity and additional details
Updated README to enhance project description, technical stack, and testing suites.
1 parent a2b1822 commit a718e9c

1 file changed

Lines changed: 175 additions & 41 deletions

File tree

README.md

Lines changed: 175 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,200 @@
1-
# REST Assured API Testing
1+
# REST Assured API Testing — Suite de Automatización
22

3-
Suite de automatización de pruebas de API construido con Java + Rest Assured + TestNG + Allure.
3+
> Proyecto de automatización de pruebas de API construido con Java, RestAssured y TestNG,
4+
> con pipeline CI/CD en GitHub Actions y reportes Allure publicados automáticamente.
45
5-
## 🔧 Stack técnico
6+
🔗 **[Ver reporte Allure en vivo →](https://ipanaque94.github.io/RestAssured3APIS)**
7+
8+
---
9+
10+
## ¿Por qué existe este proyecto?
11+
12+
Cuando empecé a aprender QA Automation me di cuenta de que la mayoría de los proyectos
13+
de práctica prueban una sola API con 5 tests. Quería construir algo más cercano a lo que
14+
se hace en una empresa real: múltiples APIs, suites organizadas por propósito, pipeline
15+
CI/CD que corre automáticamente y reportes que cualquier stakeholder pueda leer sin
16+
entrar al código.
17+
18+
Este proyecto prueba **4 APIs distintas** (REST y SOAP), tiene **8 suites independientes**
19+
y un pipeline que publica el reporte consolidado en GitHub Pages en cada push.
20+
21+
---
22+
23+
## ¿Qué se prueba y por qué?
24+
25+
| API | Protocolo | ¿Qué valida? |
26+
|---|---|---|
27+
| [Simple Books API](https://simple-books-api.glitch.me) | REST + Auth | Flujo completo con autenticación, CRUD de órdenes, validación de schema JSON |
28+
| [Rick and Morty API](https://rickandmortyapi.com) | REST público | Validación de campos simples y anidados con JsonPath |
29+
| [JSONPlaceholder](https://jsonplaceholder.typicode.com) | REST público | Operaciones CRUD: GET, POST, PUT, DELETE |
30+
| [DataAccess](https://www.dataaccess.com) | SOAP/XML | Consumo de servicio SOAP con validación de respuesta XML |
31+
32+
La elección de estas APIs no fue casual. Simple Books tiene autenticación real con tokens,
33+
lo que permitió cubrir seguridad, manejo de errores y flujos autenticados. JSONPlaceholder
34+
cubre las operaciones HTTP básicas. SOAP está presente porque muchas empresas todavía
35+
tienen servicios legacy con ese protocolo.
36+
37+
---
38+
39+
## Stack técnico
640

741
| Herramienta | Versión | Uso |
842
|---|---|---|
943
| Java | 17 | Lenguaje base |
10-
| Rest Assured | 5.3.1 | API Testing |
11-
| TestNG | 7.10.2 | Test runner |
12-
| Allure | 2.25.0 | Reportes |
13-
| Gradle | 9.1.0 | Build tool |
14-
| GitHub Actions | - | CI/CD |
44+
| RestAssured | 5.3.1 | Cliente HTTP para pruebas de API |
45+
| TestNG | 7.10.2 | Framework de pruebas con soporte de grupos y DataProviders |
46+
| Allure | 2.25.0 | Reportes interactivos con trazabilidad completa |
47+
| Jackson | 2.17.1 | Serialización/deserialización de objetos Java ↔ JSON |
48+
| Gradle | 9.1.0 | Build y gestión de dependencias |
49+
| GitHub Actions || CI/CD con jobs independientes por suite |
50+
51+
---
52+
53+
## Estructura del proyecto
1554

16-
## 📁 Estructura del proyecto
1755
```
1856
src/test/java/APITests/
19-
├── auth/ → Tests de autenticación
20-
├── books/ → Tests de Simple Books API
21-
├── dataaccess/ → Tests SOAP
22-
├── jsonplaceholder/ → Tests JsonPlaceholder API
23-
├── rickandmorty/ → Tests Rick & Morty API
24-
├── baseUrl/ → Clases base reutilizables
25-
└── utils/ → Utilidades y configuración
57+
├── auth/ → Registro de clientes y obtención de token
58+
├── books/ → CRUD de libros y órdenes (Simple Books API)
59+
│ ├── BooksTest.java
60+
│ ├── OrdersTest.java
61+
│ ├── BooksSchemaValidation.java
62+
│ └── IdempotenciaTest.java
63+
├── rickandmorty/ → Validación de personajes
64+
├── jsonplaceholder/ → Operaciones CRUD
65+
├── dataaccess/ → Servicio SOAP
66+
├── baseUrl/ → Clases base reutilizables (una por API)
67+
└── utils/
68+
├── Config.java → Lee URLs desde env vars, -D flags o config.properties
69+
├── Order.java
70+
└── OrderResponse.java
71+
72+
src/test/resources/
73+
├── TestNG.xml → Suite completa
74+
├── TestngSmoke.xml
75+
├── TestngRegression.xml
76+
├── TestngContract.xml
77+
├── TestngSecurity.xml
78+
├── TestngNegative.xml
79+
├── TestngIdempotencia.xml
80+
├── TestngPerformance.xml
81+
├── TestsngSoap.xml
82+
├── config.properties
83+
└── schemas/
84+
└── books-schemas.json → Schema JSON para Contract Testing
2685
```
2786

28-
## 🧪 Suites de prueba
87+
---
88+
89+
## Suites de prueba
90+
91+
Cada suite tiene un propósito claro y corre de forma independiente:
92+
93+
| Suite | Propósito | Qué valida |
94+
|---|---|---|
95+
| 🔥 **Smoke** | Verificación rápida post-deploy | El sistema responde y los flujos críticos funcionan |
96+
| 🔁 **Regression** | Cobertura funcional completa | Que nada se rompió con los últimos cambios |
97+
| 📋 **Contract** | Validación de esquema JSON | La estructura de la respuesta no cambió sin aviso |
98+
| 🔒 **Security** | Autenticación y autorización | Tokens inválidos retornan 401, acceso correcto retorna 200 |
99+
|**Negative** | Manejo de errores | El sistema responde correctamente ante datos inválidos |
100+
| 🔄 **Idempotencia** | Métodos HTTP idempotentes | PATCH repetido = mismo resultado, DELETE repetido = 404 |
101+
|**Performance** | Tiempos de respuesta | El endpoint responde en menos de 2000ms |
102+
| 🧼 **SOAP** | Servicios legacy XML | El servicio SOAP convierte números a palabras correctamente |
103+
104+
---
29105

30-
| Suite | Descripción |
31-
|---|---|
32-
| Smoke | Tests críticos de verificación rápida |
33-
| Regression | Suite completa de regresión |
34-
| Contract | Validación de esquemas JSON |
35-
| Security | Tests de autenticación y autorización |
36-
| Negative | Casos negativos y manejo de errores |
37-
| Idempotencia | Verificación de métodos idempotentes |
38-
| Performance | Validación de tiempos de respuesta |
39-
| SOAP | Tests de servicios SOAP |
106+
## Cómo ejecutar
40107

41-
## 🚀 Cómo ejecutar
108+
**Requisitos:** Java 17, Gradle 9+
42109

110+
```bash
43111
# Todas las suites
44-
.\gradlew clean test --no-configuration-cache
112+
./gradlew clean test
113+
114+
# Suite específica
115+
./gradlew clean test -Dsuite=Smoke
116+
./gradlew clean test -Dsuite=Regression
117+
./gradlew clean test -Dsuite=Security
118+
./gradlew clean test -Dsuite=Negative
119+
./gradlew clean test -Dsuite=Contract
120+
./gradlew clean test -Dsuite=Idempotencia
121+
./gradlew clean test -Dsuite=Performance
122+
./gradlew clean test -Dsuite=SOAP
45123
```
46124

47-
## 📊 Reporte Allure
48-
# Ver El Reporte
125+
**Ver el reporte Allure localmente:**
126+
```bash
49127
allure serve build/allure-results
50128
```
51129

52-
Ver reporte online: [GitHub Pages](https://ipanaque94.github.io/RestAssured3APIS)
130+
---
131+
132+
## Pipeline CI/CD
133+
134+
El pipeline corre automáticamente en cada push a `main`. Los jobs tienen dependencias
135+
para que Smoke sea el primer gate — si falla, los demás no corren innecesariamente:
136+
137+
```
138+
Push → 🔥 Smoke
139+
├── 🔁 Regression ──→ 🔄 Idempotencia
140+
│ └──→ ⚡ Performance
141+
├── 📋 Contract
142+
├── 🔒 Security
143+
├── ❌ Negative
144+
└── 🧼 SOAP
145+
└── 📊 Reporte consolidado → GitHub Pages
146+
```
147+
148+
Cada job publica sus resultados como artefacto. Al final, el job `publish-report`
149+
descarga todos los resultados, genera un reporte Allure consolidado y lo publica
150+
automáticamente en GitHub Pages.
151+
152+
---
153+
154+
## Decisiones de diseño
155+
156+
Estas decisiones las tomé pensando en mantenibilidad y escalabilidad — no solo en
157+
hacer que los tests pasen:
158+
159+
**Clase base por API (`BaseBooksTest`, `BaseRickMorty`, etc.)**
160+
Cada API tiene su propia clase base con la configuración de URL y el `RequestSpec`.
161+
Si cambia la URL de una API, se modifica en un solo lugar.
162+
163+
**`Config.java` con prioridad de configuración**
164+
Lee la URL en este orden: variable de entorno → system property → `config.properties`.
165+
Esto permite que CI inyecte URLs distintas por ambiente sin tocar el código.
166+
167+
**`@BeforeClass(alwaysRun = true)` con flag `initialized`**
168+
TestNG crea una nueva instancia de la clase por cada suite que la incluye. Sin el flag
169+
`static initialized`, el setup se ejecutaría múltiples veces y agotaría el rate limit
170+
de la API al obtener el token.
171+
172+
**Un XML por suite en lugar de grupos en un solo XML**
173+
Permite correr cada suite con un comando simple (`-Dsuite=Smoke`) y que el CI lance
174+
jobs completamente independientes sin configuración adicional.
175+
176+
---
177+
178+
## Qué aprendí construyendo esto
179+
180+
Más allá del código, este proyecto me enseñó cosas que no están en los tutoriales:
53181

54-
## ⚙️ CI/CD
182+
- El `@BeforeClass` sin `alwaysRun = true` se salta cuando TestNG corre grupos específicos,
183+
dejando el `spec` nulo y fallando con un error confuso de "Specification cannot be null"
184+
- `simple-books-api.click` está bloqueado por los runners de GitHub Actions — tuve que
185+
cambiar a `simple-books-api.glitch.me`, que es la misma API en un host diferente
186+
- El `doFirst { delete }` de Gradle 9 es incompatible con el configuration cache —
187+
la solución es usar `./gradlew clean test` en lugar de borrar el directorio manualmente
188+
- Los headers duplicados entre el `spec` y el `given()` pueden causar errores 400
189+
silenciosos en algunas APIs
55190

56-
El pipeline de GitHub Actions corre automáticamente en cada push:
191+
---
57192

58-
1. 🔥 Smoke Tests
59-
2. 🔁 Regression + 📋 Contract + 🔒 Security + ❌ Negative + 🧼 SOAP
60-
3. 🔄 Idempotencia + ⚡ Performance
61-
4. 📊 Reporte Consolidado → GitHub Pages
193+
## Autor
62194

63-
## 📚 Curso base
195+
**Enoc Ipanaque**
196+
[LinkedIn](www.linkedin.com/in/enoc-isaac-ipanaque-rodas-b3729a283) · [GitHub](https://github.com/ipanaque94)
64197

65-
Esta Suite de API testing fue construido sobre los conocimientos adquiridos en el curso
66-
**REST Assured Avanzado** de [Free Range Testers](https://www.freerangetesters.com) en Udemy
198+
Estudiante de QA Automation en proceso de certificación ISTQB CTFL.
199+
Construido sobre los conocimientos del curso **REST Assured Avanzado**
200+
de [Free Range Testers](https://www.freerangetesters.com).

0 commit comments

Comments
 (0)