Volver a la wiki

Testing Guide - CreaRack Pro

Testing Guide - CreaRack Pro

Estructura de Tests

CreaRack_Pro_app_Django/
├── terminal/tests/
│   ├── __init__.py
│   └── test_ssh_consumer.py      # WebSocket + asyncssh
├── network/tests/
│   ├── __init__.py
│   └── test_api.py                # Network Management API
└── tests/                          # Sistema de validación de paridad
    ├── scripts/
    │   ├── backend_parity_validator.py
    │   └── frontend_parity_validator.py
    └── README.md

Tests Unitarios y de Integración

1. Terminal SSH Tests

Ubicación: terminal/tests/test_ssh_consumer.py

Ejecutar:

# Todos los tests del terminal
pytest terminal/tests/ -v

# Tests específicos
pytest terminal/tests/test_ssh_consumer.py::TestSSHConsumer::test_websocket_connection -v

# Tests de integración (requieren servidor SSH real)
pytest terminal/tests/ -v -m integration

Cobertura:


2. Network Management API Tests

Ubicación: network/tests/test_api.py

Ejecutar:

# Todos los tests de Network API
pytest network/tests/ -v

# Tests de un módulo específico
pytest network/tests/test_api.py::TestDeviceManagementAPI -v
pytest network/tests/test_api.py::TestBackupManagementAPI -v
pytest network/tests/test_api.py::TestScriptTemplatesAPI -v

# Tests de roles y permisos
pytest network/tests/test_api.py::TestRoleBasedAccess -v

Cobertura:


3. Sistema de Validación de Paridad

Ubicación: tests/

Ejecutar:

# Validación completa (Backend + Frontend)
py tests/scripts/backend_parity_validator.py
py tests/scripts/frontend_parity_validator.py

# CI/CD automático (GitHub Actions)
# Se ejecuta en cada push a develop/main

Cobertura:

Ver documentación completa en: tests/README.md


Configuración de Pytest

pytest.ini (Recomendado)

Crear en la raíz del proyecto:

[pytest]
DJANGO_SETTINGS_MODULE = config.settings.test
python_files = tests.py test_*.py *_tests.py
python_classes = Test*
python_functions = test_*
addopts =
    --reuse-db
    --nomigrations
    --cov=.
    --cov-report=html
    --cov-report=term-missing:skip-covered
markers =
    integration: Tests requiring real SSH servers
    slow: Slow tests (deselect with -m "not slow")

Ejecutar Tests con Docker

Opción 1: Dentro del contenedor

# Entrar al contenedor
docker compose exec web bash

# Ejecutar tests
pytest terminal/tests/ -v
pytest network/tests/ -v

Opción 2: Comando directo

docker compose exec web pytest terminal/tests/ -v
docker compose exec web pytest network/tests/ -v

Coverage (Cobertura de Código)

Generar reporte de cobertura

# Instalar pytest-cov
pip install pytest-cov

# Ejecutar con cobertura
pytest --cov=terminal --cov=network --cov-report=html

# Ver reporte en navegador
# Abrir: htmlcov/index.html

CI/CD con GitHub Actions

Workflow Actual

Archivo: .github/workflows/parity-validation.yml

Se ejecuta en:

Pasos:

  1. ✅ Setup Python + PostgreSQL
  2. ✅ Instalar dependencias
  3. ✅ Ejecutar migraciones
  4. ✅ Validación backend parity
  5. ✅ Validación frontend parity
  6. ✅ Upload de reportes como artifacts

Tests de Performance

Django Debug Toolbar (Desarrollo)

# config/settings/dev.py
INSTALLED_APPS += ['debug_toolbar']
MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware'] + MIDDLEWARE
INTERNAL_IPS = ['127.0.0.1']

# urls.py
if settings.DEBUG:
    import debug_toolbar
    urlpatterns = [path('__debug__/', include(debug_toolbar.urls))] + urlpatterns

Uso: Visita cualquier página y verás el panel de debug con queries SQL.

Query Count Assertions

from django.test.utils import CaptureQueriesContext
from django.db import connection

def test_list_backups_query_count(self):
    with CaptureQueriesContext(connection) as context:
        response = self.client.get(f'/api/network/device/{self.device.id}/backups')

    # Asegurar que no hay N+1 queries
    self.assertLessEqual(len(context.captured_queries), 3)

Troubleshooting

Error: “App ‘terminal’ doesn’t have a ‘tests’ module”

Solución: Asegúrate de que existe terminal/tests/__init__.py.

Error: “No tests ran”

Solución: Verifica los nombres de archivos y métodos:

Error: “Database ‘test_crearack_pro’ not found”

Solución: Asegúrate de que PostgreSQL está corriendo y el usuario tiene permisos para crear databases.

-- PostgreSQL
ALTER USER crearack_user CREATEDB;

Próximos Pasos

Tests Pendientes

  1. Blueprints API (blueprints/tests/)

    • Operaciones de canvas (save, load, export)
    • Anotaciones
  2. Racks API (racks/tests/)

    • CRUD completo de racks
    • Clonación de racks
    • Device placements
  3. Terminal SSH Real (terminal/tests/)

    • Conexión a servidor SSH real (requiere configuración)
    • Ejecución de comandos
    • Captura de output

Última actualización

Fecha: 20-01-2026 19:40 Estado: Tests de Terminal SSH y Network API implementados ✅ Cobertura estimada: ~60% (Network API + Terminal WebSocket)

Véase también

Subir