Un poco de fondo
Hoy en día, las canalizaciones de CI son una necesidad en nuestro trabajo diario de desarrollo, lo que nos ayuda a acortar los ciclos de entrega y brindar software de mayor calidad.
Como desarrollador de backend, las API se han convertido en una piedra angular en la mayoría de mis aplicaciones, por lo que probarlas se convirtió en una necesidad.
Tener una etapa de prueba de API en nuestro pipeline de CI nos brinda confianza en la calidad del producto y nos alerta si algo se ha roto.
Postman
Postman es una gran herramienta que ayuda a los desarrolladores en cada etapa de nuestro ciclo de vida de API. Tiene una gran documentación y una comunidad cada vez mayor de desarrolladores que la usan, por lo que es fácil encontrar publicaciones que expliquen consejos y trucos geniales.
Colecciones
Postman facilita la organización de nuestras diferentes solicitudes en colecciones. Personalmente, creo una colección para cada proyecto que quiero probar. Luego, dentro de la colección, creo una carpeta para cada entidad del proyecto, tratando de cubrir cada extremo de la API.
Entornos
Postman nos permite crear diferentes entornos para ejecutar nuestras solicitudes. Dando un ejemplo real, le diría que trabajo en tres entornos diferentes: mi entorno local, un entorno de preparación y un entorno de producción, por lo que creo tres entornos diferentes con variables que representan los datos cambiantes entre los entornos (como la ruta de base para las solicitudes de API). De esta manera, puedo definir una sola solicitud, pero dirigirla fácilmente a mis tres entornos diferentes. ¡Piense en lo fácil que sería cambiar o agregar un nuevo entorno!
Solicitudes de prueba
Una de las mejores características de Postman es que le permite codificar pruebas que se ejecutan cada vez que se ejecuta una solicitud. Están escritos en JS y tienen un conjunto de aserciones geniales para verificar cosas como el código de respuesta, el cuerpo de respuesta o los encabezados de respuesta.
Dulce! Una vez que hemos escrito un conjunto de pruebas para cubrir nuestra API, utilizamos Collection Runner, una herramienta integrada proporcionada por Postman para ejecutar cada solicitud de una colección y generar un informe de los resultados de las pruebas.
Bono: A veces, queremos ejecutar nuestras solicitudes en un cierto orden y ¿adivina qué? Cartero nos permite hacerlo! Compruébelo en problema de flujos de trabajo de construcción
¿Qué tenemos hasta ahora?
En este punto, hemos creado una colección de Carteros con un montón de solicitudes que podrían dirigirse a nuestra API en todos nuestros entornos. Además de eso, cada solicitud tiene varias pruebas para verificar si funciona correctamente. ¡Qué momento para estar vivo!
Newman
¿Recuerdas el Corredor de Colección que mencioné anteriormente? Podría ejecutar todas las solicitudes de nuestra colección con un simple clic. Pero, ¿qué pasa con una herramienta de línea de comandos para hacer lo mismo? Newman lo hace. Newman es un Corredor de colección de línea de comandos para Postman que le permite ejecutar y probar una Colección de Postman directamente desde la línea de comandos e integrarla fácilmente en servidores CI, lo que lo convierte en una gran herramienta para nuestro propósito: Automatizar nuestra prueba de API con Jenkins.
Ejecutar una colección
Para ejecutar una colección con Newman, primero tenemos que exportarla desde Postman. Dado que tenemos algunas variables jugando en algunas de nuestras solicitudes, también tenemos que exportar el entorno adecuado. Una vez que tenemos ambos archivos, podemos ejecutar la colección con:
$ newman run our.postman_collection.json -e our.postman_environment.json
y veremos un informe de la ejecución de la colección, similar a otros marcos de prueba.
Formatear la salida
El informe se puede formatear de diferentes maneras. Para lograr esto, Newman proporciona un conjunto de reporteros para admitir diferentes formatos de salida como JSON, XUNIT o HTML. Además, puede crear su propio reportero para formatear el informe en el formato que desee.
Jenkins
Genial, hemos definido nuestra suite de pruebas de API con Postman y podemos ejecutarla desde la línea de comandos y obtener un buen informe de los resultados hasta ahora con Newman. Pero ahora queremos incluir nuestra increíble nueva habilidad en nuestra cartera de CI.
Descargo de responsabilidad: Estamos utilizando Jenkins como servidor de automatización para construir nuestras canalizaciones de CI/CD y ejecutamos nuestra canalización de CI en un contenedor Docker que tiene instaladas todas las herramientas necesarias (como Newman).
Mezclar cosas
Esencialmente necesitaremos tres archivos para incluir nuestra prueba de API dentro de una canalización de CI:
- Jenkinsfile, que define nuestra canalización
- Colección Postman, que define nuestro conjunto de solicitudes y pruebas
- Entorno Postman, que define las variables del entorno de destino
Las incluimos todas en el repositorio del proyecto, para que podamos beneficiarnos del control de versiones sobre ellas y realizar un seguimiento de sus cambios.
Basta de hablar, vamos a codificar!
Necesitamos crear una nueva etapa en nuestra canalización para ejecutar la prueba de API. Por lo general, lo colocamos después de las pruebas de unidad e integración para asegurarnos de que todo se ejecuta como se espera antes de probar la interfaz.
pipeline { ... stage('Test API Rest') { steps { sh 'newman run tests/Newman/our.postman_collection.json -e tests/Newman/env/test.postman_environment.json -r junit,html --reporter-junit-export var/reports/newman/junit/newman.xml --reporter-html-export var/reports/newman/html/index.html' publishHTML() } } ...}
Como puede ver, invocamos el comando run de Newman, proporcionando nuestra colección un archivo de entorno de prueba como parámetros. Además de eso, también informamos qué reporteros queremos usar (JUNIT, HTML) y dónde se almacenarán las salidas.
Como bono, utilizamos el plugin Jenkins de editor HTML para vincular el informe HTML a la compilación.
espero que hayas disfrutado de este viaje tanto como yo lo hice escribiéndolo y, como siempre, los comentarios serán bienvenidos!