====== API Testing con Postman ======
{{postman-logo.png?100 }}
===== Test scripts =====
En la propia documentación de Postman hay un montón de ejemplos de todo lo que es posible hacer con los test scripts de esta herramienta:
* https://www.postman.com/api-platform/api-testing/
* https://learning.postman.com/docs/writing-scripts/script-references/test-examples/
* https://learning.postman.com/docs/writing-scripts/script-references/variables-list/
* https://learning.postman.com/docs/writing-scripts/script-references/postman-sandbox-api-reference/
===== Newman =====
Instalar [[https://learning.postman.com/docs/collections/using-newman-cli/command-line-integration-with-newman|Newman]] de forma global como comando en tu equipo, listo para ejecutarse directamente desde la consola (Si aún no tienes Node.js instalado, sigue [[https://docs.npmjs.com/downloading-and-installing-node-js-and-npm|estas instrucciones]]):
santi@zenbook:$ npm install -g newman
Cómo lanzar una colección de Postman con Newman:
santi@zenbook:$ newman run api-collection.postman_collection.json
Cómo lanzar una colección de Postman con Newman para un entorno determinado:
santi@zenbook:$ newman run -e localhost.postman_environment.json api-collection.postman_collection.json
Puedes encontrar una colección de ejemplo ya preparada con algunos scripts, lista para ser ejecutada con Newman [[https://github.com/codeandcoke/games/blob/main/games.yaml|aqui]]
===== API testing con Postman automatizado con GitHub Actions =====
==== Dockerfile ====
El primer paso será generar la imagen docker de la API que hemos desarrollado, para que podamos lanzarla luego como un contenedor docker
FROM eclipse-temurin:21-jdk-alpine
VOLUME /tmp
EXPOSE 8080
COPY target/games-0.1.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
==== Docker compose ====
El siguiente es un ejemplo de un fichero ''docker-compose.yml'' listo para lanzar la API + Base de datos como contenedores docker
name: games
services:
games-db:
image: mariadb:11.3.2
container_name: games-db
restart: always
environment:
MYSQL_USER: games_user
MYSQL_PASSWORD: games_password
MYSQL_DATABASE: games
MYSQL_PORT: 3306
MYSQL_ROOT_PASSWORD: test_root_password
ports:
- "3306:3306"
healthcheck:
test: [ CMD, healthcheck.sh, --connect, --innodb_initialized ]
interval: 5s
timeout: 3s
retries: 3
networks:
- network-games
games-api:
image: games-api
container_name: games-api
ports:
- "8080:8080"
depends_on:
games-db:
condition: service_healthy
environment:
SPRING_APPLICATION_JSON: '{
"spring.application.name": "games",
"sever.port": "8080",
"spring.jpa.hibernate.ddl-auto": "update",
"spring.jpa.properties.hibernate.globally_quoted_identifiers": "true",
"spring.datasource.url": "jdbc:mariadb://games-db:3306/games",
"spring.datasource.username": "games_user",
"spring.datasource.password": "games_password",
"spring.jpa.database-platform": "org.hibernate.dialect.MariaDBDialect"
}'
networks:
- network-games
networks:
network-games:
driver: bridge
==== GitHub action ====
Por último, configuramos un workflow de GitHub Actions que hará lo siguiente:
* Generamos la imagen docker de nuestra API
* Lanzará nuestra API + Base de datos como contenedores docker
* Instalará Newman
* Lanzará la colección con los tests con Newman sobre la API que se acaba de lanzar
name: Integration tests with Newman
on:
pull_request:
branches:
- main
- develop
jobs:
newman:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '21'
- run: mvn package
- run: docker build -t games-api .
- run: docker compose up -d
- run: npm install -g newman
- run: newman run games.postman_collection.json -e local.postman_environment.json
----
(c) 2026 Santiago Faci