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.
- Una colección (
collection
), donde colocar nuestrasrequest
’s. - 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
d
e 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 l
a 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.yml
y 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
- Download Postman | Get Started for Free
- Writing tests | Postman Learning Center
- Test script examples | Postman Learning Center
- Building request workflows | Postman Learning Center
- Overview of Docker Compose | Docker Documentation
- Running collections on the command line with Newman | Postman Learning Center
- Postman/newman - Docker Image | Docker Hub
- Get started with Docker Compose | Docker Documentation