Skip to main content

py.test plugin to run Odoo tests

Project description

codecov

pytest-oduit

A pytest plugin for running Odoo tests with enhanced functionality and integration with oduit-core.

Features

  • Automatic Odoo configuration: Integrates with .oduit.toml configuration files using oduit-core
  • Automatic module installation: Automatically detects and installs addon modules based on test paths
  • Module path resolution: Automatically resolves Odoo addon module paths for proper test discovery
  • Test retry management: Disables Odoo's built-in test retry mechanism to work seamlessly with pytest
  • Distributed testing support: Works with pytest-xdist for parallel test execution
  • HTTP server support: Optional Odoo HTTP server launch for integration tests

Installation

pip install pytest-oduit

Note: pytest-odoo must not be installed. Never run pytest for testing odoo modules inside the source dir of pytest-oduit (as then the odoo mock is loaded).

Requirements

  • Python >= 3.9
  • pytest >= 8
  • oduit
  • Odoo >= 15.0

Usage

Basic Usage

Simply run pytest in your Odoo addon directory:

pytest

The plugin will automatically detect which addon modules contain your tests and initialize them in Odoo. For example:

pytest addons/sale                    # Automatically adds --init=sale
pytest addons/sale addons/purchase    # Automatically adds --init=purchase,sale
pytest addons/sale/tests/test_sale.py # Automatically adds --init=sale

This eliminates the need to manually specify --odoo-install for each test run.

Other pytest plugins

This plugin works also together pytest-subtests and pytest-xdist.

Command Line Options

  • --odoo-log-level: Set the log level for Odoo processes during tests (default: 'critical')
  • --odoo-install: Control module installation behavior:
    • Not specified (default): Automatically detect and install modules based on test paths
    • --odoo-install=module1,module2: Manually specify modules to install (disables auto-detection)
    • --odoo-install="": Disable all module installation
  • --oduit-env: Set the oduit config file path (when not specified, uses local .oduit.toml)
  • --odoo-http: Enables http server for testing tours (only needed for Odoo < 18)

Automatic Module Installation

By default, the plugin automatically detects which addon modules are being tested and initializes them in Odoo. This eliminates the need to manually specify modules for each test run.

How it works:

  1. Analyzes the test paths provided to pytest
  2. Extracts addon names by locating __manifest__.py files
  3. Automatically appends --init=<detected_modules> to the Odoo configuration

Examples:

# Auto-detect and install modules
pytest addons/sale                    # Installs: sale
pytest addons/sale addons/purchase    # Installs: purchase, sale
pytest addons/sale/tests/test_sale.py # Installs: sale

# Manually specify modules (overrides auto-detection)
pytest --odoo-install=sale,purchase addons/crm  # Installs: sale, purchase (NOT crm)

# Disable all module installation
pytest --odoo-install="" addons/sale  # Installs: nothing

When automatic detection activates:

  • A .oduit.toml configuration file is present or --oduit-env is specified
  • --odoo-install is not provided (no manual override)

Supported path types:

  • Addon directories: addons/my_module
  • Test files: addons/my_module/tests/test_something.py
  • Subdirectories: addons/my_module/tests/
  • Multiple addons: addons/module_a addons/module_b

Configuration

The plugin automatically detects and uses .oduit.toml configuration files when available. This provides seamless integration with oduit for database configuration, addon paths, and other Odoo settings.

Example .oduit.toml:

[odoo]
db_name = "test_db"
addons_path = ["./addons", "./custom_addons"]

Module Path Resolution

The plugin automatically resolves Odoo addon module paths, ensuring that:

  • Test modules in addon_name/tests/ are properly recognized as odoo.addons.addon_name.tests.test_module
  • Only installable addons (with installable: True in __manifest__.py) are collected for testing
  • Namespace packages are handled correctly

Distributed Testing

Works seamlessly with pytest-xdist for parallel test execution:

pytest -n auto  # Run tests in parallel using all available CPUs

The plugin automatically creates isolated database copies for each worker to prevent conflicts.

Development

Running Tests

cd pytest-oduit
pytest

Test Structure

The plugin includes comprehensive tests that use mock Odoo modules to verify functionality without requiring a full Odoo installation.

License

AGPLv3 - see LICENSE file for details.

Authors

  • Holger Nahrstaedt
  • Based on original work by Pierre Verkest and Camptocamp SA

Contributing

Contributions are welcome! Please feel free to submit issues and pull requests.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytest_oduit-0.4.1.tar.gz (28.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pytest_oduit-0.4.1-py3-none-any.whl (20.1 kB view details)

Uploaded Python 3

File details

Details for the file pytest_oduit-0.4.1.tar.gz.

File metadata

  • Download URL: pytest_oduit-0.4.1.tar.gz
  • Upload date:
  • Size: 28.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pytest_oduit-0.4.1.tar.gz
Algorithm Hash digest
SHA256 3a6c803043c61f0171b97030bf404c55c4b8307761a20db3694da561aea9ff5d
MD5 81576f6b8252d4b7fac5fa6a67a181f2
BLAKE2b-256 9e1ff8e1268110bdd8fcce067ea27f6b0623da32e533508bdfdea4fc831b66f9

See more details on using hashes here.

File details

Details for the file pytest_oduit-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: pytest_oduit-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 20.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pytest_oduit-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c43544ef8012aa91e665c2d7c9a66fee918571d4a772f714d6710b3496966569
MD5 8444fbb9b0089e305d255c8c7ad9984b
BLAKE2b-256 fd1782a46b1d7b8fbc4b866355ca1df8c479439559e725199cc9c7151d652d98

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page