
API Automation Testing
¿Es posible hacer pruebas de API con Cypress? Guía 2026
La mayoría de desarrolladores cree que Cypress solo sirve para hacer clic en botones y rellenar formularios. No es así. Cypress puede testear toda tu capa de API: peticiones, respuestas, cabeceras, códigos de estado e incluso tráfico de red simulado. Si trabajas en QA o en desarrollo backend en 2026, esta es una habilidad que necesitas dominar.
Sí, Cypress Puede Hacer Pruebas de API
La respuesta corta: sí, y lo hace muy bien.
Cypress ofrece dos herramientas potentes para las pruebas de API:
cy.request()— realiza llamadas HTTP directas a tu API, completamente independientes de la interfaz del navegador. Piensa en ello como un cliente HTTP con scripts dentro de tu suite de tests.cy.intercept()— se sitúa entre tu frontend y tu backend, permitiéndote espiar, validar, modificar o reemplazar completamente cualquier petición de red que haga tu aplicación.
Juntas, estas dos herramientas cubren los dos grandes escenarios de pruebas de API: testear la API directamente y testear cómo interactúa tu frontend con la API.
cy.request() — Pruebas Directas de API
cy.request() es el cliente HTTP integrado de Cypress. Envía peticiones HTTP reales a tu servidor y te da acceso completo a la respuesta para hacer assertions.// Petición GET básica
cy.request('GET', '/api/usuarios').then((response) => {
expect(response.status).to.eq(200)
expect(response.body).to.have.length.greaterThan(0)
})
// POST con cuerpo y cabeceras
cy.request({
method: 'POST',
url: '/api/usuarios',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer mi-token'
},
body: {
nombre: 'María García',
email: '[email protected]'
}
}).then((response) => {
expect(response.status).to.eq(201)
expect(response.body).to.have.property('id')
expect(response.body.email).to.eq('[email protected]')
})
// DELETE y verificar 204
cy.request('DELETE', '/api/usuarios/1').its('status').should('eq', 204)
Lo que puedes validar con
cy.request():response.status— código de estado HTTPresponse.body— cuerpo de la respuesta parseado (JSON se parsea automáticamente)response.headers— cabeceras de la respuestaresponse.duration— tiempo que tardó la peticiónresponse.requestHeaders— las cabeceras que se enviaron
cy.intercept() — Interceptación y Simulación de Red
cy.intercept() es más potente que cy.request() para las pruebas de integración. Intercepta el tráfico de red real de tu aplicación en ejecución y te permite validarlo, modificarlo o reemplazarlo completamente con datos simulados.// Espiar una petición y validar después
cy.intercept('GET', '/api/productos').as('obtenerProductos')
cy.visit('/productos')
cy.wait('@obtenerProductos').then(({ request, response }) => {
expect(response.statusCode).to.eq(200)
expect(response.body).to.be.an('array')
})
// Simular respuesta con datos de fixture
cy.intercept('GET', '/api/usuarios', { fixture: 'usuarios.json' }).as('obtenerUsuarios')
cy.visit('/panel')
cy.wait('@obtenerUsuarios')
cy.get('[data-testid="lista-usuarios"]').should('have.length', 3)
// Simular un estado de error
cy.intercept('POST', '/api/pedidos', {
statusCode: 500,
body: { error: 'Error interno del servidor' }
}).as('pedidoFallido')
cy.visit('/checkout')
cy.get('[data-testid="confirmar-pedido"]').click()
cy.wait('@pedidoFallido')
cy.get('[data-testid="mensaje-error"]').should('be.visible')
// Modificar una respuesta al vuelo
cy.intercept('GET', '/api/config', (req) => {
req.reply((res) => {
res.body.featureFlag = true
return res
})
})
Qué Puedes Testear con las Pruebas de API de Cypress
| Escenario | Herramienta | Ejemplo |
|---|---|---|
| Validar el cuerpo de la respuesta | cy.request() / cy.intercept() | Campos JSON, longitud de arrays, propiedades anidadas |
| Validar códigos de estado | Ambas | 200, 201, 400, 401, 404, 500 |
| Validar cabeceras de la petición | cy.intercept() | Authorization, Content-Type |
| Validar cabeceras de la respuesta | Ambas | Cache-Control, cabeceras CORS |
| Simular una respuesta (stub) | cy.intercept() | Reemplazar con fixture o cuerpo fijo |
| Simular errores de red | cy.intercept() | Errores 500, timeouts, respuestas vacías |
| Retrasar una respuesta | cy.intercept() | Testear estados de carga |
| Esperar a que se dispare una petición | cy.intercept() | .as() + cy.wait() |
| Testear flujos de autenticación | cy.request() | Login, renovación de token, logout |
| Sembrar datos de prueba via API | cy.request() | Crear usuarios/registros antes de tests de UI |
Cypress vs Otras Herramientas de Pruebas de API
| Cypress | Postman | Supertest | REST Assured | |
|---|---|---|---|---|
| Uso principal | E2E + pruebas de integración API | Tests de API manuales y automatizados | Tests unitarios de API en Node.js | Tests de API en Java |
| Integración con frontend | Sí — testea UI y API juntos | No | No | No |
| Funciona en CI/CD | Sí | Sí (Newman CLI) | Sí | Sí |
| Simulación de red | Sí (cy.intercept) | No | No | No |
| Lenguaje | JavaScript / TypeScript | Postman scripting | JavaScript | Java |
| Ideal para | Ingenieros QA full-stack | Exploración y documentación de APIs | Tests unitarios de backend | Backends en Java |
| Curva de aprendizaje | Baja para devs JS | Baja | Baja | Media |
La ventaja clave de Cypress: puedes testear la API y la respuesta de la UI a esa API en el mismo test. Cuando tu endpoint POST devuelve un 201, puedes comprobar inmediatamente que la UI se actualizó correctamente. Ninguna otra herramienta hace eso en un solo paso.
Patrones Habituales en Proyectos QA Reales
Patrón 1: Sembrar datos de prueba antes de los tests de UI
beforeEach(() => {
cy.request('POST', '/api/test/resetear-bd')
cy.request('POST', '/api/usuarios', { nombre: 'Usuario Test', email: '[email protected]' })
})
Patrón 2: Autenticarse via API en lugar de rellenar el formulario de login
// Mucho más rápido que escribir en el formulario en cada test
cy.request('POST', '/api/auth/login', {
email: '[email protected]',
contrasena: 'contrasena123'
}).then(({ body }) => {
window.localStorage.setItem('token', body.token)
})
cy.visit('/panel')
Patrón 3: Usar intercept para testear estados de carga y error
cy.intercept('GET', '/api/datos', (req) => {
req.reply({ delay: 2000, body: [] })
})
cy.visit('/pagina')
cy.get('[data-testid="skeleton-carga"]').should('be.visible')
Patrón 4: Verificar exactamente qué petición envía tu frontend
cy.intercept('POST', '/api/checkout').as('checkout')
cy.get('[data-testid="comprar-ahora"]').click()
cy.wait('@checkout').its('request.body').should('deep.include', {
productoId: 'abc-123',
cantidad: 1
})
Pruebas de API con Cypress y la Carrera en QA
Las pruebas de API son de las primeras habilidades que diferencian a un ingeniero QA que solo puede testear interfaces de uno que puede testear el stack completo. Saber escribir tests de Cypress que cubran tanto el comportamiento de red como las respuestas de la UI es exactamente el tipo de competencia que aparece en las ofertas de trabajo de QA en 2026.
La documentación oficial de Cypress incluye ejemplos funcionales de todos los comandos de red en example.cypress.io/commands/network-requests — una referencia muy útil cuando construyes tu primera suite de tests de API.
En Archi's Academy, el Backend Development track trabaja el testing en contextos de proyectos reales; no solo aprendes la sintaxis en ejercicios aislados, sino que entiendes qué testear, cómo estructurar una suite de tests y cómo escribir tests que realmente detecten bugs en escenarios de producción.
La diferencia entre saber que
cy.intercept() existe y saber cuándo usarlo, qué simular frente a qué testear con datos reales, y cómo integrar las pruebas de API en un flujo de extremo a extremo es la brecha que importa en un rol real de QA.Ready to turn insights into real skills?
Start building with guided, project-based training and gain hands-on experience from day one.
Empieza a Desarrollar Habilidades Reales de Backend y QA
Preguntas Frecuentes
¿Puede Cypress testear APIs REST directamente?
Sí. El comando
cy.request() realiza peticiones HTTP reales a cualquier URL — GET, POST, PUT, PATCH, DELETE — y te da el cuerpo de la respuesta, el código de estado, las cabeceras y la duración para validar. No necesitas tener el navegador abierto. Esto convierte a Cypress en un cliente de pruebas de API muy útil dentro de tu suite de tests existente.¿Cuál es la diferencia entre cy.request() y cy.intercept() en Cypress?
cy.request() realiza una llamada HTTP directa desde tu test, como llamar a una API desde un script. cy.intercept() se sitúa entre tu aplicación frontend en ejecución y la red, permitiéndote espiar, validar, modificar o reemplazar las peticiones que hace el código de tu UI. Usa cy.request() para testear la API en sí; usa cy.intercept() para testear cómo tu frontend gestiona las respuestas de la API.¿Se pueden simular respuestas de API en Cypress?
Sí.
cy.intercept() te permite reemplazar cualquier respuesta de API con datos de fixture, un cuerpo fijo, un código de estado específico o una respuesta retrasada. Esto es muy útil para testear estados de error (respuestas 500), estados de carga (respuestas retrasadas) y casos límite (arrays vacíos, campos nulos) sin necesidad de que el backend reproduzca esas condiciones.¿Cómo espero a una llamada de API en Cypress?
Usa
cy.intercept() con .as('nombreAlias') para nombrar la petición, y luego cy.wait('@nombreAlias') para pausar el test hasta que esa petición se complete. Esto es mucho más fiable que los timeouts arbitrarios con cy.wait(2000) y te da acceso al objeto completo de petición y respuesta para validaciones.¿Puede Cypress sustituir a Postman para las pruebas de API?
Para tests automatizados e integrados, sí. Cypress puede cubrir lo que hace Postman en un pipeline de CI. Postman sigue siendo mejor para la exploración manual de APIs, la documentación de contratos y el testing de APIs de forma aislada sin frontend. Cypress es mejor cuando necesitas testear cómo la API y la UI funcionan juntas en la misma ejecución de tests.
¿Funciona Cypress con CI/CD?
Sí. Cypress se ejecuta en modo headless en entornos CI (GitHub Actions, CircleCI, Jenkins, GitLab CI) y genera informes JUnit XML, capturas de pantalla y grabaciones de vídeo en caso de fallo. Tanto
cy.request() como cy.intercept() funcionan de forma idéntica en modo headless. Muchos equipos usan sus tests de API de Cypress como paso previo al despliegue a producción.¿Cómo cubre Archi's Academy las pruebas de API con Cypress?
El Backend Development track de Archi's Academy incluye testing real como parte del modelo de simulación de proyectos. Diseñas APIs, las despliegas y escribes tests con las herramientas del sector; no solo en desarrollo local, sino con el mismo flujo que usa un desarrollador junior en un equipo real. Empieza con una prueba gratuita de 1 semana.
Aprende Haciendo. Demuéstralo Haciendo. Consigue el Trabajo.
¿Tienes preguntas sobre pruebas de API, flujos de QA o qué track encaja con tus objetivos? El equipo de Archi's Academy trabaja con desarrolladores en todos los niveles. Escríbenos cuando quieras.
Wednesday, May 13, 2026

