天天看点

odoo10参考系列--测试模块

Odoo使用单元测试对测试模块进行支持。

要编写测试,只需在模块中定义一个tests子包,它将自动检查测试模。测试模块应该有一个以test_开始的名字并且应该从tests/__init__.py导入,例如: 

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

且 

__init__.py

 包括:

from . import test_foo, test_bar
           

警告

不从tests/__init__.py导入,测试模块将不会运行

版本8.0中的变化:previously, 以前,测试者只会运行模块添加到两个列表 

fast_suite

 和在

tests/__init__.py

中的

checks

 。在8.0中,它将运行所有导入模块

测试者将会简单的运行任何测试案例,作为正式单元测试文档的描述,但是Odoo提供了一些工具和测试Odoo内容(主要是模块)相关的帮助内容:

class odoo.tests.common.TransactionCase(methodName='runTest')

测试用例中的每个测试方法是运行在其自己的事务上,并使用自己的游标。每次测试结束后,回滚事务并关闭游标

browse_ref(xid)

为所提供的外部标识符返回记录对象

参数

xid -- 完全限定外部标识符,在表单中

module.identifier

异常

ValueError 如果没有发现

返回

BaseModel

ref(xid)

返回所提供的外部标识符的数据库ID,get_object_reference的快捷方式 

参数

xid -- 完全限定外部标识符,在表单中

module.identifier

                          异常

ValueError 如果没有发现

返回

注册的id

class odoo.tests.common.SingleTransactionCase(methodName='runTest')

测试用例中的所有测试方法都是在同一个事务中运行,事务以第一个测试方法开始并在最后一个结束后回滚

browse_ref(xid)

为所提供的外部标识符返回记录对象

参数

xid -- 完全限定外部标识符,在表单中

module.identifier

异常

ValueError 如果没有发现

返回

BaseModel

ref(xid)

返回所提供的外部标识符的数据库ID,get_object_reference的快捷方式 

参数

xid -- 完全限定外部标识符,在表单中

module.identifier

异常

ValueError 如果没有发现

返回

注册的id

class odoo.tests.common.SavepointCase(methodName='runTest')

类似

SingleTransactionCase

 所有测试方法运行在一个单一的事务中,但每个测试用例都是运行在一个回滚保存点中(自事务)。

对包含快速测试的测试用例有用,但是对使用重要的数据库设置共有的所有案例 (在数据库测试数据中是复杂的)是无效的: 

setUpClass()

可用于生成数据库测试数据一次,然后所有测试用例使用相同的数据而不影响彼此,但不必重新创建测试数据

class odoo.tests.common.HttpCase(methodName='runTest')

事务HTTP,使用开发的url和虚构js帮助者的测试用例

browse_ref(xid)

为所提供的外部标识符返回记录对象

参数

xid -- 完全限定外部标识符,在表单中

module.identifier

异常

ValueError 如果没有发现

返回

BaseModel

phantom_js(url_path, code, ready='window', login=None, timeout=60, **kw)

测试运行在浏览器中的js代码 - 可选的日志作为“登录” - 根据url路径加载页面 - 等待就绪对象可用 - 在页面内容eval(code)

信号成功测试: console.log('ok')

信号失败测试: console.log('error')

如果没有在超时测试失败之前完成

ref(xid)

返回所提供的外部标识符的数据库ID,get_object_reference的快捷方式 

参数

xid -- 完全限定外部标识符,在表单中

module.identifier

异常

ValueError 如果没有发现

返回

注册的id

默认情况下,在安装了相应的模块后,测试就运行一次。测试用例还可以配置为在安装了所有模块之后运行,而不是在模块安装之后运行:

odoo.tests.common.at_install(flag)

设置一个测试的在安装状态,该标志是一个布尔值,指定测试是否应该 (

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_开始 

运行测试

测试是自动运行,当安装或更新的模块。如果

--test-enable

 是启用的,当启动Odoo服务器时。

从Odoo 8是起,在安装/更新周期之外运行测试是不支持的

ps:有翻译不当之处,欢迎留言指正。

原文地址:https://www.odoo.com/documentation/10.0/reference/testing.html

继续阅读