CodeGym /Cursos /Docker SELF /Pruebas y depuración de la aplicación

Pruebas y depuración de la aplicación

Docker SELF
Nivel 24 , Lección 2
Disponible

8.1 Pruebas del frontend

En esta etapa vamos a ver cómo realizar pruebas y depurar nuestra aplicación multicontenedor. Las pruebas nos ayudarán a identificar y corregir errores, además de asegurarnos de que todos los componentes del sistema funcionen correctamente.

Para probar el frontend en ReactJS utilizaremos las bibliotecas Jest y React Testing Library.

Instalación de Jest y React Testing Library

Paso 1. Instalación de dependencias:

Terminal

cd frontend
npm install --save-dev jest @testing-library/react @testing-library/jest-dom

Paso 2. Configuración de Jest:

Crea un archivo jest.config.js en el directorio frontend:

Javascript

module.exports = {
  setupFilesAfterEnv: ['<rootDir>/src/setupTests.js'],
  testEnvironment: 'jsdom',
};

Paso 3. Creación del archivo setupTests.js:

Crea un archivo setupTests.js en el directorio frontend/src:

Javascript

import '@testing-library/jest-dom/extend-expect';

Paso 4. Escribir pruebas para los componentes

Crea un archivo de prueba para el componente TaskList en el directorio frontend/src:

Javascript

import React from 'react';
import { render, screen } from '@testing-library/react';
import TaskList from './TaskList';

test('renders Task List heading', () => {
  render(<TaskList />);
  const headingElement = screen.getByText(/Task List/i);
  expect(headingElement).toBeInTheDocument();
});

Paso 5. Ejecutar pruebas

Para ejecutar las pruebas utiliza el comando:

Terminal

npm test

8.2 Pruebas del backend

Para probar el backend en Flask, vamos a usar la biblioteca unittest.

Instalación de dependencias:

Terminal

cd ../backend
pip install Flask-Testing

Creación de tests para endpoints

Crea el directorio tests y el archivo test_routes.py en el directorio backend:

Python

import unittest
from app import app, db
from app.models import User, Task

class BasicTests(unittest.TestCase):

    def setUp(self):
        app.config['TESTING'] = True
        app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
        self.app = app.test_client()
        db.create_all()

    def tearDown(self):
        db.session.remove()
        db.drop_all()

    def test_user_registration(self):
        response = self.app.post('/register', json={
            'username': 'testuser',
            'password': 'testpassword'
        })
        self.assertEqual(response.status_code, 201)

    def test_task_creation(self):
        self.app.post('/register', json={
            'username': 'testuser',
            'password': 'testpassword'
        })
        access_token = self.app.post('/login', json={
            'username': 'testuser',
            'password': 'testpassword'
        }).json['access_token']

        response = self.app.post('/tasks', json={
            'title': 'Tarea de Prueba',
            'description': 'Descripción de Prueba',
            'owner_id': 1,
            'status': 'no completada'
        }, headers={'Authorization': f'Bearer {access_token}'})
        self.assertEqual(response.status_code, 201)

if __name__ == "__main__":
    unittest.main()

Ejecución de tests

Para ejecutar los tests utiliza el comando:

Terminal

python -m unittest discover

8.3 Pruebas de integración

Las pruebas de integración verifican la interacción entre los componentes del sistema.

Configuración del entorno de pruebas

Para las pruebas de integración, vamos a usar Docker Compose para levantar todos los servicios en un entorno de pruebas.

Paso 1. Crear un archivo Docker Compose para las pruebas:

Crea el archivo docker-compose.test.yml en el directorio raíz del proyecto:

Yaml

version: '3'

services:
  frontend:
    build: ./frontend
    ports:
      - "3001:3000"
    networks:
      - task-network

  backend:
    build: ./backend
    ports:
      - "5001:5000"
    depends_on:
      - database
    networks:
      - task-network
    environment:
      - DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb

  database:
    image: postgres:13
    environment:
      - POSTGRES_DB=taskdb
      - POSTGRES_USER=taskuser
      - POSTGRES_PASSWORD=taskpassword
    networks:
      - task-network
    volumes:
      - db-data:/var/lib/postgresql/data

networks:
  task-network:
    driver: bridge

volumes:
  db-data:

Paso 2. Iniciar el entorno de pruebas:

Para levantar todos los servicios en el entorno de pruebas usa el comando:

Terminal

docker compose -f docker-compose.test.yml up --build

Escribir pruebas de integración

Se pueden escribir pruebas de integración utilizando varias herramientas. Uno de los enfoques es usar Selenium para pruebas automatizadas de la interfaz de usuario.

Paso 1. Instalar Selenium:

Terminal

pip install selenium

Paso 2. Escribir la prueba de integración:

Crea el archivo test_integration.py en el directorio tests:

Python

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

def test_frontend():
    driver = webdriver.Chrome()
    driver.get("http://localhost:3001")
    assert "Lista de tareas" in driver.title
    driver.close()

if __name__ == "__main__":
    test_frontend()

Paso 3. Ejecutar la prueba de integración:

Para ejecutar la prueba de integración utiliza el comando:

Terminal

python tests/test_integration.py

8.4 Depuración

Para depurar se pueden usar logs de los contenedores y herramientas de monitoreo.

Visualización de logs de contenedores

Para ver los logs usa el comando:

Terminal

docker compose logs

Uso de herramientas de monitoreo

Usa los Prometheus y Grafana configurados anteriormente para monitorear métricas y el estado de los servicios.

  1. Accede a la interfaz web de Grafana: Abre tu navegador y ve a la dirección http://localhost:3033.
  2. Revisa los dashboards: Usa los dashboards creados para seguir el rendimiento y el estado de los servicios.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION