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
- GET
- ✅ 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
- GET
- ✅ 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
- GET
- ✅ 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
mainodevelop - Pull requests
Pasos:
- ✅ Setup Python + PostgreSQL
- ✅ Instalar dependencias
- ✅ Ejecutar migraciones
- ✅ Validación backend parity
- ✅ Validación frontend parity
- ✅ 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
-
Blueprints API (
blueprints/tests/)- Operaciones de canvas (save, load, export)
- Anotaciones
-
Racks API (
racks/tests/)- CRUD completo de racks
- Clonación de racks
- Device placements
-
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