Curso odoo (Módulos)

10.1. Testing en Odoo

Las pruebas (tests) permiten verificar que tu código funciona como esperas y prevenir futuros errores al realizar cambios o actualizaciones. Odoo aprovecha el módulo unittest de Python, así como sus propias herramientas, para facilitar la ejecución de pruebas unitarias y de integración.

  1. Estructura básica de los tests

    • Se recomienda ubicar los archivos de prueba en una carpeta llamada tests/ dentro de tu módulo.
    • Cada archivo de prueba debe tener un nombre que indique claramente su finalidad (por ejemplo, test_library_book.py, test_sale_order.py, etc.).
    1mi_modulo/
    2├── __init__.py
    3├── __manifest__.py
    4├── models/
    5├── views/
    6└── tests/
    7    └── test_library_book.py
  2. Ejemplo de prueba unitaria

    1import odoo.tests
    2from odoo.tests import common
    3
    4class TestLibraryBook(common.TransactionCase):
    5    
    6    def setUp(self):
    7        super(TestLibraryBook, self).setUp()
    8        self.LibraryBook = self.env['library.book']
    9    
    10    def test_create_book(self):
    11        """Probar la creación de un libro."""
    12        book = self.LibraryBook.create({
    13            'name': 'Test Book',
    14            'author': 'Test Author'
    15        })
    16        self.assertTrue(book.id, "El libro debería haberse creado correctamente")
    17        self.assertEqual(book.name, 'Test Book', "El nombre del libro no coincide")
    • common.TransactionCase: Inicia una transacción en la base de datos de prueba que se revierte al final de cada test, dejando el entorno limpio.
    • setUp: Se ejecuta antes de cada método de prueba para preparar el contexto necesario (en este caso, obtener el modelo library.book).
    • test_create_book: Crea un registro y luego comprueba con asserts que el comportamiento sea el esperado.
  3. Ejecución de las pruebas

    • Puedes ejecutar todos los tests de tu instancia Odoo con el comando:
      1odoo --test-enable --stop-after-init
      Esto ejecutará las pruebas incluidas en todos los módulos instalables.
    • Para correr solo las pruebas de un módulo en concreto, usa:
      1odoo --test-enable --stop-after-init -i nombre_del_modulo
    • Tras la ejecución, podrás revisar en los logs si hay alguna prueba que haya fallado.
  4. Pruebas de integración y escenarios complejos

    • Además de pruebas unitarias, Odoo permite crear flujos de prueba más amplios, simulando el comportamiento completo de un proceso (por ejemplo, crear un pedido, confirmarlo, generar factura, etc.).

10.2. Buenas prácticas de desarrollo

Además de realizar pruebas, hay que adoptar prácticas que faciliten la lectura, el mantenimiento y la colaboración en el código.

  1. Seguir la convención de código PEP8

    • Python tiene lineamientos (PEP8) que especifican cómo estructurar tu código: indentación, longitud de líneas, nombres de variables y métodos, etc.
    • Herramientas como flake8 o pylint pueden verificar de manera automática el cumplimiento de estas normas.
  2. Documentar y comentar

    • Añade docstrings a tus clases y métodos para explicar su propósito y uso.
    • Escribe comentarios claros cuando realices pasos relevantes o complejos.
    • Evita comentar información obvia; los comentarios deben aportar valor.
  3. Separar la lógica de negocio de la presentación

    • Mantén la lógica compleja en los métodos de tu modelo.
    • En las vistas XML, limita la complejidad a la disposición visual y uso de xpath para modificaciones.
    • Esto facilita que, si cambian los requerimientos de negocio, la adaptación sea sencilla sin modificar la interfaz de usuario.
  4. Uso de control de versiones (Git)

    • Usa repositorios Git para llevar un historial de cambios y poder volver a versiones anteriores si fuera necesario.
    • Implementa buenas prácticas en los commits: mensajes descriptivos, branch por funcionalidad, revisiones de código (pull requests), etc.

10.3. Herramientas de depuración

Cuando el código no se comporta como esperas, la depuración (debugging) es esencial para encontrar y solucionar los problemas.

  1. Logs en Odoo

    • Odoo registra eventos en el log (generalmente en stdout o en un archivo configurado en odoo.conf).
    • Puedes ajustar el nivel de detalle con parámetros como --log-level=debug.
    • Observa cuidadosamente los mensajes de error y las trazas de Python para identificar la causa de los fallos.
  2. Uso de pdb o ipdb

    • Añade import pdb; pdb.set_trace() en tu código para detener la ejecución y analizar variables paso a paso.
    • ipdb ofrece una versión con más funcionalidades.
    • Útil durante el desarrollo para verificar los valores de campos y las rutas de ejecución.
  3. Odoo Shell (REPL)

    • Puedes arrancar el Shell de Odoo para interactuar con la base de datos y los modelos en tiempo real:
      1odoo shell
    • Una vez dentro, cuentas con env para acceder a los modelos (env['library.book'].search([...])).
    • Excelente para probar pequeñas consultas o métodos sin tener que modificar vistas o controladores.
  4. Pruebas controladas en entornos separados

    • Ten siempre al menos tres entornos: desarrollo, pruebas y producción.
    • En desarrollo, puedes hacer debugging intensivo.
    • En pruebas (staging), simulas las condiciones de producción sin afectar datos reales.
    • En producción, mantén logs controlados y evita depuraciones invasivas.

Conclusión de la Parte 10

  1. Pruebas en Odoo: Aprovecha la infraestructura nativa de unittest y la carpeta tests/ para cubrir casos de uso y asegurar la estabilidad de tu código.
  2. Buenas prácticas: Sigue PEP8, documenta adecuadamente, separa la lógica de negocio de la interfaz y utiliza control de versiones (Git) de forma organizada.
  3. Depuración: Utiliza logs, breakpoints (pdb/ipdb) y el shell interactivo de Odoo para investigar y resolver problemas de forma efectiva.

Con estos recursos, tu desarrollo en Odoo será más confiable, mantenible y profesional. En la siguiente parte, hablaremos de optimización y despliegue, abarcando aspectos de rendimiento, configuración de servidores y métodos para poner en producción tus módulos de manera estable. ¡Continuemos!

  • Loading...