En qué son realmente buenas las pruebas de API con Cypress
Preparación y limpieza. Crear a través de la API el estado que necesita una prueba de UI, en lugar de recorrer cinco pantallas a golpe de clic. Es más rápido, más confiable y el uso correcto de esta capacidad.
Validaciones entre capas. Hacer algo en la interfaz y después confirmar que el backend lo registró correctamente. Es una categoría real y Cypress la resuelve con elegancia.
Un puñado de comprobaciones de endpoints. Cuando la superficie de la API es pequeña, mantenerla en la misma suite es un compromiso razonable a cambio de la simplicidad.
Los cuatro problemas que aparecen con la escala
Duración de la sesión
Los tokens caducan a mitad de la suite y los fallos parecen errores del producto.
La lógica de renovación termina escrita a mano en un archivo de soporte.
Valores entre llamadas
Un identificador de una llamada de creación tiene que llegar a la llamada de borrado, y el encadenamiento de comandos de Cypress vuelve incómodo hacerlo entre pruebas.
Se termina fijando el valor en el código y la suite funciona una sola vez.
Orden
La cobertura real de una API es un grafo, y los archivos de prueba son una lista. Codificar ese grafo a mano es donde se va el mantenimiento.
El cuarto es la limpieza. Los registros se acumulan, empiezan a saltar las restricciones de unicidad y las validaciones de paginación se desvían a medida que crecen los datos.
Por qué en realidad estos no son problemas de Cypress
Cypress se diseñó en torno a un ciclo de vida de pruebas dirigido por el navegador. Todo lo anterior tiene que ver con estado que vive fuera de una sola prueba y fuera de una sola ejecución. Puedes resolverlo todo en archivos de soporte, y la solución se convierte en un pequeño framework que alguien tiene que mantener: ese es el costo que nadie planifica.
De qué se encarga, en cambio, una capa de API creada para esto
Cuatro cosas deciden si una suite de API sobrevive a su primer año, sea cual sea la herramienta que uses: sesiones que caducan, valores que solo existen en tiempo de ejecución, llamadas que dependen unas de otras y registros que nadie limpia. TestSprite las llama Auto-Authentication, Dynamic Variables, Dependency Chains y Auto-Cleanup, y la documentación de pruebas de API explica cómo funciona.
Cuándo el archivo de soporte se convierte en un framework
Hay un punto reconocible en el que una suite de API dentro de Cypress deja de ser unas cuantas peticiones y se convierte en infraestructura, y vale la pena nombrarlo para que puedas decidir de forma deliberada en lugar de ir a la deriva.
Empieza con un comando de inicio de sesión en el archivo de soporte. Después una caché de tokens, porque iniciar sesión en cada prueba es lento. Después lógica de renovación, porque la caché se queda obsoleta a mitad de la ejecución. Después un helper que guarda los identificadores creados para que las pruebas posteriores puedan encontrarlos, después convenciones de orden en los nombres de los archivos, después una tarea de limpieza que se ejecuta al terminar la suite y conoce todo lo anterior.
Ninguno de esos pasos está mal y cada uno es el siguiente movimiento obvio. El resultado son unos cientos de líneas de framework que viven en un directorio de soporte, que entiende una sola persona y que quedan fuera del runner sobre el que se construyeron. Reconocer la trayectoria a tiempo es todo el valor de describirla.
La división que vale la pena adoptar
Reserva cy.request para la preparación, la limpieza y las validaciones entre capas que de verdad necesitan ambos lados en una misma prueba. Lleva la cobertura independiente de endpoints e integración a una capa que trate esos cuatro problemas como parte de su trabajo y no como tarea tuya.
Las dos suites no necesitan saber una de la otra, y ambas pueden ejecutarse desde el mismo pipeline.
El disparador importa más que el mecanismo. Apuntarlo a tu evento de despliegue significa que cada cambio se verifica sin que nadie tenga que decidirlo; la GitHub App lo hace desde el panel, y un paso de GitHub Actions lo hace desde dentro de tu workflow. Más detalles en el repositorio del CLI.
Lo que dejas de mantener
El framework de archivos de soporte descrito arriba es justo lo que TestSprite reemplaza. Auto-Authentication se encarga de la duración de la sesión. Dynamic Variables lleva un identificador desde la llamada de creación hasta la de borrado. Dependency Chains deriva un orden seguro a partir de lo que cada caso necesita y produce. Auto-Cleanup elimina exactamente lo que creó la ejecución, que es lo que hace segura la ejecución en paralelo.
La cobertura también deja de depender de quién tenga tiempo. Los planes se generan a partir de una especificación o de un recorrido de descubrimiento sobre el servicio en ejecución, incluyendo las rutas de error y los valores límite que nunca se escriben a mano, y se refinan en lenguaje natural.
Cypress conserva aquello en lo que es bueno: preparación, limpieza y las comprobaciones entre capas donde de verdad necesitas el navegador y la API en una misma prueba. Las dos se ejecutan desde el mismo pipeline sin saber una de la otra.
¿Es cy.request una mala práctica?
En absoluto. Es la herramienta correcta para la preparación y para las comprobaciones entre capas. El límite es la escala, no la corrección.
¿Podemos mantenerlo todo en Cypress?
Puedes, y acabarás manteniendo por tu cuenta el manejo de sesiones, la captura de valores, el orden y la limpieza. Vale la pena con una superficie pequeña; a partir de ahí, sale caro.
¿Y las pruebas de componentes de Cypress?
Nada de esto les afecta. Las pruebas de componentes responden a otra pregunta y lo mejor es dejarlas donde están.
¿Cómo evitamos duplicar la cobertura?
Divide por pregunta. Cypress responde si funciona el flujo visible para el usuario. La capa de API responde si los endpoints se comportan como deben. Si una prueba pasaría en ambos lugares, pertenece al más barato.
¿La capa de API necesita nuestro código fuente?
No. Trabaja contra el servicio en ejecución y usa una especificación o un recorrido de descubrimiento para saber qué existe.
Reserva cy.request para la preparación, no para toda la suite de API.
Las pruebas de API con Cypress son excelentes para fixtures y validaciones entre capas. En cuanto crece la cobertura independiente de API, las sesiones, los valores capturados, el orden y la limpieza se convierten en un framework que mantienes a mano, y ese es el momento de mover esa capa a algo creado para ello.