apuntes:testing
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| apuntes:testing [2025/03/25 00:35] – [Test de integración] Santiago Faci | apuntes: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 47: | Line 48: | ||
| </ | </ | ||
| - | ==== Capa service | + | ==== Capa controller |
| <code javascript> | <code javascript> | ||
| Line 129: | Line 130: | ||
| ===== 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. |
| + | |||
| + | | ||
| <code javascript> | <code javascript> | ||
| Line 166: | Line 169: | ||
| </ | </ | ||
| - | * Caso de uso: Registro (201 Created) | + | * Caso de uso: **Registro (201 Created)** |
| <code javascript> | <code javascript> | ||
| Line 194: | Line 197: | ||
| </ | </ | ||
| - | * Caso de uso: Validación (400 Bad Request) | + | * Caso de uso: **Validación (400 Bad Request)** |
| <code javascript> | <code javascript> | ||
| Line 282: | Line 285: | ||
| santi@zenbook: | santi@zenbook: | ||
| </ | </ | ||
| + | |||
| + | ====== API Testing con Postman ====== | ||
| + | |||
| + | {{postman-logo.png? | ||
| + | |||
| + | ===== 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:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | ===== Newman ===== | ||
| + | |||
| + | Instalar [[https:// | ||
| + | |||
| + | <code bash> | ||
| + | santi@zenbook: | ||
| + | </ | ||
| + | |||
| + | Cómo lanzar una colección de Postman con Newman: | ||
| + | |||
| + | <code bash> | ||
| + | santi@zenbook: | ||
| + | </ | ||
| + | |||
| + | Cómo lanzar una colección de Postman con Newman para un entorno determinado: | ||
| + | |||
| + | <code bash> | ||
| + | santi@zenbook: | ||
| + | </ | ||
| + | |||
| + | Puedes encontrar una colección de ejemplo ya preparada con algunos scripts, lista para ser ejecutada con Newman [[https:// | ||
| + | |||
| + | ===== API testing con Postman automatizado con GitHub Actions ===== | ||
| + | |||
| + | ==== Dockerfile ==== | ||
| + | |||
| + | El primer paso será generar la imagen docker de la API que hemos desarrollado, | ||
| + | |||
| + | <code yaml> | ||
| + | FROM node: | ||
| + | WORKDIR / | ||
| + | COPY package*json ./ | ||
| + | RUN npm ci --only=production | ||
| + | COPY . . | ||
| + | EXPOSE 3000 | ||
| + | ENV NODE_ENV=production | ||
| + | CMD [" | ||
| + | </ | ||
| + | |||
| + | ==== Docker compose ==== | ||
| + | |||
| + | El siguiente es un ejemplo de un fichero '' | ||
| + | |||
| + | <code yaml> | ||
| + | version: " | ||
| + | name: cities | ||
| + | services: | ||
| + | db: | ||
| + | image: mariadb: | ||
| + | container_name: | ||
| + | environment: | ||
| + | MARIADB_USER: | ||
| + | MARIADB_PASSWORD: | ||
| + | MARIADB_PORT: | ||
| + | MARIADB_ROOT_PASSWORD: | ||
| + | volumes: | ||
| + | - ./ | ||
| + | healthcheck: | ||
| + | test: [ CMD, healthcheck.sh, | ||
| + | interval: 10s | ||
| + | timeout: 5s | ||
| + | retries: 3 | ||
| + | networks: | ||
| + | - network1 | ||
| + | backend: | ||
| + | image: cities-be | ||
| + | container_name: | ||
| + | ports: | ||
| + | - " | ||
| + | depends_on: | ||
| + | db: | ||
| + | condition: service_healthy | ||
| + | networks: | ||
| + | - network1 | ||
| + | frontend: | ||
| + | image: cities-fe | ||
| + | container_name: | ||
| + | ports: | ||
| + | - " | ||
| + | networks: | ||
| + | - network1 | ||
| + | networks: | ||
| + | network1: | ||
| + | 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 | ||
| + | |||
| + | <code yaml> | ||
| + | name: Integration tests with Newman | ||
| + | |||
| + | on: | ||
| + | pull_request: | ||
| + | branches: | ||
| + | - main | ||
| + | |||
| + | jobs: | ||
| + | newman: | ||
| + | runs-on: ubuntu-latest | ||
| + | | ||
| + | strategy: | ||
| + | matrix: | ||
| + | node-version: | ||
| + | | ||
| + | steps: | ||
| + | - uses: actions/ | ||
| + | - uses: actions/ | ||
| + | with: | ||
| + | node-version: | ||
| + | cache: ' | ||
| + | - 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 | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| ====== Proyectos de ejemplo ====== | ====== Proyectos de ejemplo ====== | ||
| Line 289: | Line 430: | ||
| ---- | ---- | ||
| - | (c) 2025 Santiago Faci | + | (c) 2025-2026 Santiago Faci |
apuntes/testing.1742862922.txt.gz · Last modified: by Santiago Faci
