En el apasionante mundo de las pruebas de API, la herramienta Cypress se ha convertido en una herramienta destacada, por lo que en este artículo te invito a explorar más sobre el API testing y cómo la automatización con Cypress puede mejorar tus procesos de QA.
Conociendo el API Testing
El API testing es el proceso de verificar si el API de una aplicación funciona correctamente. Es un proceso similar a asegurarse de que dos personas pueden comunicarse de manera efectiva y entenderse, pues se trata de probar que el API recibe correctamente las solicitudes de información y, a su vez, devuelve las respuestas adecuadas. Durante el testeo se verifican aspectos como:
Autenticación: Asegurarse de que sólo las personas autorizadas pueden acceder al API.
Integridad de los datos: Comprobar que la información se envía y recibe correctamente.
Manejo de errores: Verificar cómo el API responde ante situaciones inesperadas.
Escalabilidad: Evaluar cómo el API maneja una gran cantidad de solicitudes.
Estas pruebas es esencial para garantizar que las aplicaciones y sistemas que dependen de APIs funcionen correctamente y se comuniquen de manera confiable. De esta forma, puedes identificar y solucionar problemas antes de que afecten a los usuarios finales, logrando calidad y estabilidad en las aplicaciones.
Entonces… ¿Cómo hacer el API Testing?
Para comenzar, debes instalar Node.js y npm, y como editor de código recomiendo Visual Studio Code. A continuación, sigue estos pasos:
Preparación
1. Crea una carpeta con el nombre que prefieras. En este caso, usaré el nombre “project-api-cypress”.
2. Abres el terminal CMD y te diriges a la carpeta creada en la ruta “cd C:\project-api-cypress”
3. Una vez situado en la carpeta, empiezas con el primer comando que es muy importante: “npm init”. Este creará tu package.json, que tendrá todas las dependencias que necesites.
Una vez ejecutado el comando, te encontrarás con una serie de preguntas del proyecto que vas a crear:
4. El siguiente paso es muy importante: Instalar Cypress con el siguiente comando “npm install cypress –save-dev”, como se ve en la imagen:
La idea de este comando es guardarlo como dependencia dentro de tu proyecto, para que cuando lo compartas con otra persona de tu equipo, sólo pueda ejecutar “npm install” sin tener que instalar Cypress aparte.
5. Abrir el proyecto en Visual Studio Code, y en tu archivo package.json colocas el siguiente script, que es el recomendado por Cypress:
Un vez hecho, ve a tu terminal y, situado en tu proyecto, ejecuta el comando “npm run cypress:open”…
… El cual abrirá el runner de Cypress, una interfaz visual que tiene ejemplos de pruebas para que puedas ver y ejecutar.
6. Hasta el momento, así debería lucir la estructura de proyecto:
7. Para tu primera prueba de API utilizarás el sitio web Reqres, que ofrece una serie de end points que puedes utilizar para enviar solicitudes HTTP (como GET, POST, PUT, DELETE) y recibir las respuestas correspondientes. Estos end points te permiten realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) en recursos simulados para que puedas entrenar tus habilidades.
En este caso, vas a arrancar con un método GET, el cual trae un usuario en especifico y vas a validar el Estado 200. Primero vamos a crear una Clase llamada “GetUser” y el código estará compuesto por:
- Función describe: Esta toma dos argumentos: una cadena de texto que describe el conjunto de pruebas y una función que contiene las pruebas relacionadas. Dentro de la función describe puedes incluir múltiples pruebas utilizando la función it (que es similar).
- Función it: Es utilizada para definir una prueba individual, pues proporciona un marco en el que puedes escribir y organizar tus expectativas y acciones para probar un aspecto específico de tu aplicación.
- Comando cy.request: Te permite realizar solicitudes HTTP directamente desde tus pruebas. Puedes utilizarlo para interactuar con APIs y realizar pruebas de integración o verificar el comportamiento de tu aplicación en relación a las respuestas de la solicitud.
- Propiedad method: Se utiliza para especificar el verbo HTTP que se usará en la solicitud realizada con cy.request() en Cypress. Indica el tipo de operación que deseas realizar en la API, como GET, POST, PUT, DELETE, entre otros.
- Propiedad url: Es una propiedad utilizada para especificar la dirección URL a la que deseas enviar la solicitud en cy.request() en Cypress. Indica la ubicación de la API o recurso con el que deseas interactuar.
- Función expect: Con ella puedes realizar afirmaciones (assertions) en las pruebas. Proporciona una forma de verificar condiciones y comparar valores para asegurarse de que el comportamiento de la aplicación se ajuste a lo esperado.
Una vez escrito el código, la próxima acción es ejecutar la prueba, para lo cual tienes dos opciones:
a) Usar la interfaz de usuario de Cypress:
b) Usar el comando “npm run cypress:run”, que primero debe configurar en tu package.json y luego, con la carpeta del proyecto seleccionada e ingresando el comando mencionado, ejecutará todas las pruebas automatizadas en segundo plano y generará los resultados correspondientes.
Agrega una dependencia interesante al proyecto
Como pudiste observar, a la hora de ejecutar por medio de la interfaz de usuario de Cypress, se puede notar que visualmente no es muy atractivo y falta más información. Para eso tenemos un plugin súper potente llamado “cypress-plugin-api“. Para poder usarlo revisa los siguientes pasos:
Paso 1: Abre la terminal, posiciónate sobre la carpeta del proyecto y ejecuta el comando “npm i cypress-plugin-api”.
Paso 2: Ve a tu archivo package.json y valida que esté la dependencia.
Paso 3: Dirígete a la carpeta “support” y luego entra en el archivo e2e.js, donde debes ingresar la importación import "cypress-plugin-api".
Paso 4: Cambia en tus tests todos los cy.request por cy.api.
Paso 5: Ejecuta tus tests por medio de la interfaz de usuario de Cypress y ve la mejora visual, donde podrás encontrar más información relevante. Pasarás de esto…
… A esto.
Otros tipos de validaciones
Tiempo de respuesta menor a 1 segundo:
Respuesta con la información esperada:
Que el cuerpo de la respuesta no venga vacío:
Al igual que estos ejemplos, existen muchos más tipos de validaciones posibles de hacer en este tipo de pruebas. Te invito a explorarlas.
Conoce la carpeta Screenshots
Este espacio permite almacenar las capturas de pantalla tomadas durante las pruebas automatizadas y facilita el proceso de depuración y análisis de problemas. Se genera automáticamente cuando ejecutamos las pruebas en segundo plano y se encuentra una prueba fallida. Lo interesante es que en cada ejecución las capturas antiguas se borrarán y sólo estarán las más recientes, para evitar confusiones al revisar el material.
Para el ejemplo de este artículo, haré fallar la prueba a propósito, esperando un estado 400 cuando en realidad va a dar 200. Al ejecutar la prueba en segundo plano, ya se puede ver qué falló:
Al fallar, saca un screenshot:
Luego se genera automáticamente una carpeta llamada “Screenshot”, donde se guarda la captura.
¿Qué hay de los videos?
Cypress también proporciona una carpeta que almacena las grabaciones de video de la ejecución de las pruebas automatizadas. Esta función es útil para depurar problemas, analizar el comportamiento de la aplicación durante las pruebas y compartir resultados con el equipo de desarrollo o QA.
En la ejecución anterior se observa que se generó un video:
Los videos se generan siempre, falle o no la prueba. De todas maneras, existe la posibilidad de configurar la generación de un video en el caso específico que se requiera.
Como sabemos, Cypress es una herramienta de automatización de pruebas moderna y popular que originalmente se diseñó para realizar pruebas de UI (interfaz de usuario) en aplicaciones web. Sin embargo, también se puede utilizar para realizar pruebas de API.
Mirándolo desde ese punto de vista, puede ser una opción sólida para realizar un framework super completo con pruebas de API en combinación con pruebas de UI, gracias a su sintaxis intuitiva, capacidades de depuración y visualización de pruebas.
En la parte 2 de este artículo vamos a seguir con otras solicitudes HTTP (POST, PUT, DELETE) , buenas prácticas en el código, reportes e integración continua con GitHub Actions.