CreaRack-SL

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:

  • ✅ Conexión WebSocket básica
  • ✅ Sesiones cluster (multi-host)
  • ✅ Broadcast de comandos
  • ✅ Resize de terminal
  • ✅ Cleanup al desconectar
  • ⚠️ Tests de integración con SSH real (marcados con @pytest.mark.skip)

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:

  • ✅ Device Management (2 endpoints)
    • GET /api/network/device/{id}/details
    • GET /api/network/device/{id}/credentials
  • ✅ Backup Management (4 endpoints)
    • GET /api/network/device/{id}/backups
    • GET /api/network/backup/{id}/view
    • POST /api/network/backup/compare
    • POST /api/network/device/{id}/backup/trigger
  • ✅ Script Templates CRUD (5 endpoints)
    • GET /api/network/scripts
    • POST /api/network/scripts
    • PUT /api/network/scripts/{id}
    • DELETE /api/network/scripts/{id}
    • GET /api/network/scripts?language=X
  • ✅ Role-Based Access Control
    • Admin: acceso completo
    • Operator: lectura + creación
    • Readonly: solo lectura

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:

  • ✅ Validación de endpoints (Flask vs Django)
  • ✅ Validación de UI/UX (screenshots comparativos)
  • ✅ Detección de regresiones
  • ✅ Reportes JSON históricos

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:

  • Push a main o develop
  • Pull requests

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:

  • Archivos: test_*.py
  • Classes: Test*
  • Métodos: test_*

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

  • [[crearack-tech—guides—testing-local-guide]] — testing en entorno local
  • [[crearack-tech—backend—refactoring-guide]] — guía de refactoring
  • [[crearack-tech—guides—docker-guide]] — guía de Docker Compose
  • [[crearack-tech—guides—deploy-checklist]] — checklist de deploy Golden Path
  • [[crearack-tech—agents—dev-core]] — perfil de subagente dev-core
  • [[ia-tech—roles—dev-qa]] — subagente dev-qa del workspace