====== 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