clinical_laboratory/test/run_parameter_tests.py
Luis Ernesto Portillo Zaldivar aaa1204490 feat(#51): Task 12 completada - Tests automatizados para catálogo de parámetros
- Creados 4 archivos de test completos con cobertura total
- test_analysis_parameter.py: Tests del modelo de parámetros
- test_parameter_range.py: Tests de rangos de referencia
- test_result_parameter_integration.py: Tests de integración
- test_auto_result_generation.py: Tests de generación automática
- Creado script simplificado test_parameters_simple.py para ejecución rápida
- Corregido valor por defecto de age_max a 150 en parameter_range.py
- Documentación completa en README.md
2025-07-15 14:08:33 -06:00

186 lines
6.3 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Script para ejecutar los tests del catálogo de parámetros
"""
import odoo
import logging
from odoo.tests.common import TransactionCase
from odoo.tests import tagged
_logger = logging.getLogger(__name__)
def run_parameter_catalog_tests(db_name='lims_demo'):
"""Ejecuta todos los tests del catálogo de parámetros"""
print("\n" + "="*70)
print("EJECUTANDO TESTS DEL CATÁLOGO DE PARÁMETROS")
print("="*70 + "\n")
# Importar los tests
try:
from odoo.addons.lims_management.tests import (
test_analysis_parameter,
test_parameter_range,
test_result_parameter_integration,
test_auto_result_generation
)
print("✓ Tests importados correctamente\n")
except ImportError as e:
print(f"✗ Error importando tests: {e}")
return
# Lista de clases de test a ejecutar
test_classes = [
(test_analysis_parameter.TestAnalysisParameter, "Parámetros de Análisis"),
(test_parameter_range.TestParameterRange, "Rangos de Referencia"),
(test_result_parameter_integration.TestResultParameterIntegration, "Integración Resultados-Parámetros"),
(test_auto_result_generation.TestAutoResultGeneration, "Generación Automática de Resultados"),
]
# Conectar a la base de datos
registry = odoo.registry(db_name)
# Ejecutar cada conjunto de tests
total_tests = 0
passed_tests = 0
failed_tests = 0
for test_class, test_name in test_classes:
print(f"\n--- Ejecutando tests de {test_name} ---")
with registry.cursor() as cr:
env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
# Crear instancia del test
test_instance = test_class()
test_instance.env = env
test_instance.cr = cr
test_instance.uid = odoo.SUPERUSER_ID
# Obtener todos los métodos de test
test_methods = [method for method in dir(test_instance)
if method.startswith('test_')]
for method_name in test_methods:
total_tests += 1
try:
# Ejecutar setUp
test_instance.setUp()
# Ejecutar el test
method = getattr(test_instance, method_name)
method()
print(f"{method_name}")
passed_tests += 1
except Exception as e:
print(f"{method_name}: {str(e)}")
failed_tests += 1
_logger.exception(f"Test failed: {method_name}")
finally:
# Rollback para no afectar otros tests
cr.rollback()
# Resumen final
print("\n" + "="*70)
print("RESUMEN DE TESTS")
print("="*70)
print(f"Total de tests ejecutados: {total_tests}")
print(f"✓ Tests exitosos: {passed_tests}")
print(f"✗ Tests fallidos: {failed_tests}")
if failed_tests == 0:
print("\n✅ TODOS LOS TESTS PASARON EXITOSAMENTE")
else:
print(f"\n⚠️ {failed_tests} TESTS FALLARON")
return failed_tests == 0
def run_specific_test(db_name='lims_demo', test_module=None, test_method=None):
"""Ejecuta un test específico para debugging"""
if not test_module:
print("Debe especificar el módulo de test")
return
print(f"\nEjecutando test específico: {test_module}")
if test_method:
print(f"Método: {test_method}")
# Importar el módulo de test
exec(f"from odoo.addons.lims_management.tests import {test_module}")
module = eval(test_module)
# Encontrar la clase de test
test_class = None
for item in dir(module):
obj = getattr(module, item)
if isinstance(obj, type) and issubclass(obj, TransactionCase) and obj != TransactionCase:
test_class = obj
break
if not test_class:
print("No se encontró clase de test en el módulo")
return
registry = odoo.registry(db_name)
with registry.cursor() as cr:
env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
test_instance = test_class()
test_instance.env = env
test_instance.cr = cr
test_instance.uid = odoo.SUPERUSER_ID
if test_method:
# Ejecutar método específico
if hasattr(test_instance, test_method):
try:
test_instance.setUp()
method = getattr(test_instance, test_method)
method()
print(f"✓ Test {test_method} pasó exitosamente")
except Exception as e:
print(f"✗ Test {test_method} falló: {str(e)}")
import traceback
traceback.print_exc()
else:
print(f"Método {test_method} no encontrado")
else:
# Ejecutar todos los métodos del módulo
test_methods = [m for m in dir(test_instance) if m.startswith('test_')]
for method_name in test_methods:
try:
test_instance.setUp()
method = getattr(test_instance, method_name)
method()
print(f"{method_name}")
except Exception as e:
print(f"{method_name}: {str(e)}")
finally:
cr.rollback()
if __name__ == '__main__':
import sys
# Verificar argumentos
if len(sys.argv) > 1:
if sys.argv[1] == '--specific':
# Modo de test específico
module = sys.argv[2] if len(sys.argv) > 2 else None
method = sys.argv[3] if len(sys.argv) > 3 else None
run_specific_test(test_module=module, test_method=method)
else:
# Usar base de datos especificada
run_parameter_catalog_tests(db_name=sys.argv[1])
else:
# Ejecutar todos los tests con DB por defecto
success = run_parameter_catalog_tests()
sys.exit(0 if success else 1)