Testing APIs usando Docker Compose

  • 3 min read

En este post exploraremos como utilizar Postman y Docker Compose para ejecutar pruebas de integración en nuestras APIs permitiéndonos posteriormente enlazarlo a cualquier pipeline CI/CD.

Herramientas que vamos a Necesitar

  • Docker, para correr nuestra solución usando compose incluyendo cualquier base de datos o servicio adicional que necesitemos para que la solución funcione, así como nuestro runner de Postman.
  • Postman, para diseñar nuestras pruebas de integración.

Para esta demo en particular vamos a usar una API en .NET 6 y VS Code pero podrían usar cualquier otra tecnologia y editor/IDE.

Proyecto de API

Para esta demo podemos usar cualquier proyecto de APIs que ya este containerizado o que podamos containerizar, en caso queramos seguirlo tal cual pueden usar la rama feature/starter en GitHub jesulink2514/API-Tests-Compose at feature/starter (github.com)

docker-compose.yml inicial

Como primer paso necesitamos crear nuestro docker-compose.yml que nos permita levantar nuestra applicacion. En este caso sin entrar en muchos detalles de como docker compose funciona, definimos un service, le especificamos el Dockerfile a utilizar y exponemos los puertos que queremos poder golpear (8080 en este caso).

En una consola en el folder de nuestro proyecto o un terminal de VSCode, ejecutamos el comando docker compose up para levantar los servicios de nuestro docker-compose.yml.

Pruebas de Integración con Postman

Ahora, es momento de definir nuestras pruebas usando Postman. Para esto necesitamos 2 cosas importantes.

  1. Una colección (collection), donde colocar nuestras request’s.
  2. Un entorno (environment), donde colocar las variables globales.

En nuestro environment necesitamos definir la variable BaseUrl que usaremos en nuestras request para poder sobreescribirla en la ejecucion de docker-compose, para sus pruebas manuales podemos usar el Initial value de http://localhost:8080.

Ahora, en nuestra collection necesitamos crear request para nuestras pruebas. en este caso pueden ver el ejemplo para un GET /weatherforecast usando la variable {{BaseUrl}}. No olviden seleccionar el environment en la esquina superior derecha.

Después de probar manualmente nuestra request podemos ir a la pestaña Tests y colocar los scripts que necesitamos para verificar que nuestra API funciona bien. Al lado derecho (2) pueden ver ejemplos de scripts que pueden usar, adicionalmente al final del post hay enlaces con ejemplos de scripts de la web de Postman.

Si todo va bien, al ejecutar manualmente la request podrán ver en el panel Test Results (3) las pruebas ejecutadas y su resultado.

Agregar Postman a nuestro docker-compose.yml

Ahora que podemos usar Postman manualmente solo nos queda agregar un Dockerfile para el runner de Postman en Docker llamado newman y modificar nuestro docker-compose.

DockerFile en la carpeta test

Y ahora solo nos queda, modificar el archivo docker-compose.ymly agregar nuestro service tests que dependa de nuestra API con el comando correcto y la sobreescritura de la variable BaseUrl para que tengamos todo listo.

Presta atención a la linea command donde especificamos los reporters, ósea el output, similarmente en el DockerFile de nuestros tests.

Solo necesitamos cancelar nuestro docker compose up que teníamos corriendo y volver a ejecutarlo para ver nuestros tests funcionando.

Conclusión

Podrán ver que Postman no solo nos permite probar manualmente Requests y Responses en nuestras APIs sino que también definir tests que podemos ejecutar manualmente o automáticamente y en este caso usando Docker Compose representan una forma legítima de realizar pruebas de Integracion en nuestras APIs que luego podemos trasladar a cualquier pipeline de CI/CD.

Asi que, ¿Porque esperar? empieza a agregar pruebas a tus APIs y evita la sorpresa de descubrir que el ultimo PR rompió un endpoint que nadie había tocado en meses.

Referencias y Enlaces Útiles

Comment

Disqus comment here

Recommended for You

VSCode Development Containers - Programa dentro de un contenedor incluyendo tu Base de Datos

VSCode Development Containers - Programa dentro de un contenedor incluyendo tu Base de Datos

Como implementar Feature Flags en ASP.NET usando Azure App Configuration

Como implementar Feature Flags en ASP.NET usando Azure App Configuration