Entornos de desarrollo

1º DAM/DAW - Curso 2026-2027

User Tools

Site Tools


apuntes:testing

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
apuntes:testing [2026/09/27 22:32] – [Proyectos de ejemplo] Santiago Faciapuntes:testing [2026/09/28 22:10] (current) – [Test de integración] Santiago Faci
Line 8: Line 8:
 ===== Test unitarios ===== ===== Test unitarios =====
  
 +Se implementan para testear la unidad mínima de código, que normalmente serán funciones o métodos, de forma totalmente aislada del resto de la aplicación.
 ==== Clases de utilidad ==== ==== Clases de utilidad ====
  
Line 128: Line 129:
  
 ===== Test de integración ===== ===== Test de integración =====
 +
 +En este caso escribimos tests que permitan probar varios componentes juntos para verificar que trabajan bien cuando interactuan entre si.
  
   * Caso de uso: **Ok (200 OK)**   * Caso de uso: **Ok (200 OK)**
Line 283: Line 286:
 </code> </code>
  
-====== Tests de integración con Postman ======+====== 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]]): 
 + 
 +<code bash> 
 +santi@zenbook:$ npm install -g newman 
 +</code> 
 + 
 +Cómo lanzar una colección de Postman con Newman: 
 + 
 +<code bash> 
 +santi@zenbook:$ newman run api-collection.postman_collection.json 
 +</code> 
 + 
 +Cómo lanzar una colección de Postman con Newman para un entorno determinado: 
 + 
 +<code bash> 
 +santi@zenbook:$ newman run -e localhost.postman_environment.json api-collection.postman_collection.json 
 +</code> 
 + 
 +Puedes encontrar una colección de ejemplo ya preparada con algunos scripts, lista para ser ejecutada con Newman [[https://github.com/codeandcoke/cities-api/blob/main/cities.postman_collection.json|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 
 + 
 +<code yaml> 
 +FROM node:22-alpine 
 +WORKDIR /usr/src/app 
 +COPY package*json ./ 
 +RUN npm ci --only=production 
 +COPY . . 
 +EXPOSE 3000 
 +ENV NODE_ENV=production 
 +CMD ["node", "src/app.js"] 
 +</code> 
 + 
 +==== Docker compose ==== 
 + 
 +El siguiente es un ejemplo de un fichero ''docker-compose.yml'' listo para lanzar la API + Base de datos como contenedores docker 
 + 
 +<code yaml> 
 +version: "3.4" 
 +name: cities 
 +services: 
 +  db: 
 +    image: mariadb:11.3.2 
 +    container_name: cities-db 
 +    environment: 
 +      MARIADB_USER: 'user' 
 +      MARIADB_PASSWORD: 'password' 
 +      MARIADB_PORT: 3306, 
 +      MARIADB_ROOT_PASSWORD: 'rootpassword' 
 +    volumes: 
 +      - ./db:/docker-entrypoint-initdb.d 
 +    healthcheck: 
 +      test: [ CMD, healthcheck.sh, --connect, --innodb_initialized] 
 +      interval: 10s 
 +      timeout: 5s 
 +      retries: 3 
 +    networks: 
 +      - network1 
 +  backend: 
 +    image: cities-be 
 +    container_name: cities-api 
 +    ports: 
 +      - "8080:8080" 
 +    depends_on: 
 +      db: 
 +        condition: service_healthy 
 +    networks: 
 +      - network1 
 +  frontend: 
 +    image: cities-fe 
 +    container_name: cities-ui 
 +    ports: 
 +      - "1234:1234" 
 +    networks: 
 +      - network1 
 +networks: 
 +  network1: 
 +    driver: bridge</code> 
 + 
 +==== 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 
 + 
 +<code yaml> 
 +name: Integration tests with Newman 
 + 
 +on: 
 +  pull_request: 
 +    branches: 
 +      - main 
 + 
 +jobs: 
 +  newman: 
 +    runs-on: ubuntu-latest 
 +     
 +    strategy: 
 +      matrix: 
 +        node-version: [20.x, 22.x, 24.x] 
 +     
 +    steps: 
 +      - uses: actions/checkout@master 
 +      - uses: actions/setup-node@v4 
 +        with: 
 +          node-version: ${{ matrix.node-version }} 
 +          cache: 'npm' 
 +      - run: npm install 
 +      - run: docker build -t cities-api . 
 +      - run: docker compose up -d 
 +      - run: npm install -g newman 
 +      - run: newman run cities.postman_collection.json -e local.postman_environment.json 
 +</code> 
 + 
 + 
  
 ====== Proyectos de ejemplo ====== ====== Proyectos de ejemplo ======
apuntes/testing.1790548363.txt.gz · Last modified: by Santiago Faci