Toggle navigation

Testing Odoo - Odoo 11.0

There are many ways to test an application. In Odoo, we have three kinds of tests

  • python unit tests: useful for testing model business logic
  • js unit tests: this is necessary to test the javascript code in isolation
  • tours: this is a form of integration testing. The tours ensure that the python and the javascript parts properly talk to each other.

Testing Python code

Odoo обеспечивает поддержку тестирования модулей с использованием unittest.

Чтобы написать тесты, просто определите подпакет tests в вашем модуле, он будет автоматически запущен для тестирования модулей. Модули тестирования должны иметь имя, начинающееся с test_, и должны быть импортированы из tests/__init__.py, например.

your_module
|-- ...
`-- tests
    |-- __init__.py
    |-- test_bar.py
    `-- test_foo.py

а __init__.py содержит:

from . import test_foo, test_bar

Изменено в версии 8.0: Ранее для тестирования запускались только модули, добавленные в два списка fast_suite и checks в tests/__init__.py. В Odoo 8.0 при тестировании запускаются все импортированные модули

При тестировании будет запускаться любой тест, как описано в официальной unittest documentation, но Odoo предоставляет ряд утилит и помощников, связанных с тестированием контента Odoo (главным образом модулей):

class odoo.tests.common.TransactionCase(methodName='runTest')[исходный код]

TestCase, в котором каждый тестовый метод запускается в своей транзакции и с собственным курсором. Откат транзакции и закрытие курсора после каждого теста.

browse_ref(xid)[исходный код]

Возвращает объект записи для предоставленного: term: external identifier

Параметры
xid -- Полностью квалифицированный: термин: «внешний идентификатор», в форме: samp: {module}. {Identifier}
Raise

ValueError если не найден

Результат
: Класс: ~ odoo.models.BaseModel
ref(xid)[исходный код]

Возвращает ID базы данных для предоставленного: term: внешний идентификатор, ярлык для` get_object_reference`

Параметры
xid -- Полностью квалифицированный: термин: «внешний идентификатор», в форме: samp: {module}. {Identifier}
Raise

ValueError если не найден

Результат
Зарегистрированный идентификатор
class odoo.tests.common.SingleTransactionCase(methodName='runTest')[исходный код]

TestCase, в которой все тестовые методы запускаются в одной транзакции, транзакция запускается с помощью первого метода тестирования и сворачивается в конце последнего.

browse_ref(xid)[исходный код]

Возвращает объект записи для предоставленного: term: external identifier

Параметры
xid -- Полностью квалифицированный: термин: «внешний идентификатор», в форме: samp: {module}. {Identifier}
Raise

ValueError если не найден

Результат
: Класс: ~ odoo.models.BaseModel
ref(xid)[исходный код]

Возвращает ID базы данных для предоставленного: term: внешний идентификатор, ярлык для` get_object_reference`

Параметры
xid -- Полностью квалифицированный: термин: «внешний идентификатор», в форме: samp: {module}. {Identifier}
Raise

ValueError если не найден

Результат
Зарегистрированный идентификатор
class odoo.tests.common.SavepointCase(methodName='runTest')[исходный код]

Similar to SingleTransactionCase in that all test methods are run in a single transaction but each test case is run inside a rollbacked savepoint (sub-transaction).

Useful for test cases containing fast tests but with significant database setup common to all cases (complex in-db test data): setUpClass() can be used to generate db test data once, then all test cases use the same data without influencing one another but without having to recreate the test data either.

class odoo.tests.common.HttpCase(methodName='runTest')[исходный код]

Transactional HTTP TestCase with url_open and phantomjs helpers.

browse_ref(xid)[исходный код]

Возвращает объект записи для предоставленного: term: external identifier

Параметры
xid -- Полностью квалифицированный: термин: «внешний идентификатор», в форме: samp: {module}. {Identifier}
Raise

ValueError если не найден

Результат
: Класс: ~ odoo.models.BaseModel
phantom_js(url_path, code, ready='window', login=None, timeout=60, **kw)[исходный код]

Test js code running in the browser - optionnally log as 'login' - load page given by url_path - wait for ready object to be available - eval(code) inside the page

To signal success test do: console.log('ok')

To signal failure do: console.log('error')

If neither are done before timeout test fails.

ref(xid)[исходный код]

Возвращает ID базы данных для предоставленного: term: внешний идентификатор, ярлык для` get_object_reference`

Параметры
xid -- Полностью квалифицированный: термин: «внешний идентификатор», в форме: samp: {module}. {Identifier}
Raise

ValueError если не найден

Результат
Зарегистрированный идентификатор

По умолчанию тесты запускаются сразу после установки соответствующего модуля. Но можно настроить, чтобы тестирование запускалось после установки всех модулей, а не после установки одного модуля:

odoo.tests.common.at_install(flag)[исходный код]

Устанавливает состояние at-install для теста, флаг является логическим значением, указывающим, должен ли тест (`` True``) или не должен (`` False``) выполняться во время установки модуля.

По умолчанию тесты запускаются сразу после установки модуля перед началом установки следующего модуля.

odoo.tests.common.post_install(flag)[исходный код]

Устанавливает состояние после установки теста. Флаг является логическим параметром, определяющим, должен ли тест запускаться или не запускаться после набора установок модуля.

По умолчанию тесты не * запускаются * после установки всех модулей в текущем установочном наборе.

Наиболее распространенная ситуация заключается в использовании TransactionCase и проверять свойство модели в каждом методе:

class TestModelA(common.TransactionCase):
    def test_some_action(self):
        record = self.env['model.a'].create({'field': 'value'})
        record.some_action()
        self.assertEqual(
            record.field,
            expected_field_value)

    # other tests...

Выполнение тестов

Тесты автоматически запускаются при установке или обновлении модулей, если --test-enable была включена при запуске сервера Odoo.

Начиная с версии 8, запуск тестов за пределами цикла установки/обновления не поддерживается.

Testing JS code

Qunit test suite

Odoo Web включает средства для юнит-тестирования как основного кода Odoo Web, так и ваших собственных модулей javascript. На стороне javascript модульное тестирование основано на QUnit с рядом помощников и расширений для лучшей интеграции с Odoo.

Чтобы посмотреть, как выглядит бегун, найдите (или запустите) сервер Odoo с включенным веб-клиентом и перейдите в `` / web / tests``. Это покажет селектор бегуна, в котором перечислены все модули с javascript модульными тестами и Позволяет запускать любой из них (или все тесты javascript во всех модулях сразу).

Щелчок по любой кнопке бегуна вызовет соответствующие тесты в комплекте QUnit runner:

Написание тестового примера

This section will be updated as soon as possible.

Integration Testing

Testing Python code and JS code separately is very useful, but it does not prove that the web client and the server work together. In order to do that, we can write another kind of test: tours. A tour is a mini scenario of some interesting business flow. It explains a sequence of steps that should be followed. The test runner will then create a phantom_js browser, point it to the proper url and simulate the click and inputs, according to the scenario.