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:

$ python3 -m unittest trytond.tests.test_tools

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

$ python3 -m unittest discover -s trytond.tests

To run all modules tests:

$ python3 -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:

$ python3 -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.