Tryton supports both functional and unit tests.

Testing your module

Functional tests

Functional tests are written as doctests using proteus.

Unit tests

Tryton provides the ModuleTestCase class that bundles a set of tests that are useful for every module.

Unit tests in ModuleTestCase can be decorated with with_transaction() to run the test in a transaction.

To use it in your own module you just have to inherit from ModuleTestCase and set the class attribute module to the name of your module.

from trytond.tests.test_tryton import ModuleTestCase, with_transaction

class MyModuleTestCase(ModuleTestCase):
    "My Module Test Case"
    module = 'my_module'

    def test_method(self):
        "Test method"

del ModuleTestCase


The ModuleTestCase must be deleted to not be discovered by unittest as it fails to run without module declaration.

Running trytond’s tests

You can run a specific test file using unittest command line like:

$ python -m unittest trytond.tests.test_tools

To run all trytond’s tests using discover of unittest with:

$ python -m unittest discover -s trytond.tests

To run all modules tests:

$ python -m unittest discover -s trytond.modules

Running your module’s tests

You just need to replace the directory path with the one of your module:

$ python -m unittest discover -s trytond.modules.my_module.tests

Extending trytond’s tests

Python modules extending trytond core can define additional classes to register in tests module. Those modules must create an entry point trytond.tests which defines a register function to be called with the module name.

Testing options

Tryton runs tests against the configured database backend. You can specify the name of the database to use via the environment variable DB_NAME. Otherwise it generates a random name.

A configuration file can be used by setting its path to the environment variable TRYTOND_CONFIG.

The tests recreate frequently the database. You can accelerate the creation by setting a cache directory in DB_CACHE environment which will be used to dump and restore initial databases backups.