在 PyCharm 中运行 OpenERP 7 单元测试

Posted

技术标签:

【中文标题】在 PyCharm 中运行 OpenERP 7 单元测试【英文标题】:Run OpenERP 7 unittests in PyCharm 【发布时间】:2015-06-22 02:16:44 【问题描述】:

我可以按照here 的描述运行我的 OpenERP v7 插件的单元测试。

PyCharm 中,我通过在 Run/Debug Configuration 中添加 Python 配置来做到这一点,如下所示:

脚本:

/home/juliocesar/work/projects/my_project/openerp-server

脚本参数:

--addons-path=openerp/addons,openerp/addons/my_addons
--log-level=test
--database=my_project_db_test
--db_host=localhost
--db_user=test
--db_password=123
--init=my_addon
--test-enable
--stop-after-init

它运行成功,但以文本日志格式显示标准输出,如下所示:

2015-04-24 13:47:55,101 12340 TEST my_project openerp.modules.module: module my_addon: executing 1 `fast_suite` and/or `checks` sub-modules
2015-04-24 13:47:55,101 12340 TEST my_project openerp.modules.module: test_change_old_received_to_contingency (openerp.addons.my_addon.tests.test_my_addon.TestMyItems)
2015-04-24 13:47:55,101 12340 TEST my_project openerp.modules.module: ` Test patch to change old received status to contingency.
2015-04-24 13:47:55,110 12340 TEST my_project openerp.modules.module: Ran 1 tests in 0.006s
2015-04-24 13:47:55,110 12340 TEST my_project openerp.modules.module: OK

它显示了运行以下测试的结果,我在 my_project 项目 my_addon 的附加组件 my_addon 中创建的 /home/juliocesar/work/projects/my_project/openerp/addons/my_addon/tests/test_my_addon.py

from openerp.tests.common import TransactionCase
import unittest2

class TestMyItems(TransactionCase):

    def test_change_old_received_to_contingency(self):
        """Test patch to change old received status to contingency."""
        self.assertTrue(True)

if __name__ == '__main__':
    unittest2.main()

我想要的是使用 Python 测试 -> Unittest 配置来显示带有红色/绿色图标的测试输出和用于测试结果的 PyCharm 界面。

Unittest 配置需要测试所在的脚本文件,如果我指定该文件,PyCharm 会在文件中找到所有测试但会给出错误,因为数据库(以及其他参数,如 openerp-server 脚本和上面指定的其余参数)运行 OpenERP 测试)未配置:

这是运行此配置的结果:

/usr/bin/python2.7 /home/juliocesar/apps/pycharm/helpers/pycharm/utrunner.py /home/juliocesar/work/projects/my_project/openerp/addons/my_addon/tests/ false
Testing started at 09:38 AM ...
No handlers could be found for logger "openerp.sql_db"

Process finished with exit code 0

Error
Traceback (most recent call last):
  File "/home/juliocesar/work/projects/my_project/openerp/tests/common.py", line 94, in setUp
    TransactionCase.cr = self.cursor()
  File "/home/juliocesar/work/projects/my_project/openerp/tests/common.py", line 55, in cursor
    return openerp.modules.registry.RegistryManager.get(DB).db.cursor()
  File "/home/juliocesar/work/projects/my_project/openerp/modules/registry.py", line 193, in get
    update_module)
  File "/home/juliocesar/work/projects/my_project/openerp/modules/registry.py", line 209, in new
    registry = Registry(db_name)
  File "/home/juliocesar/work/projects/my_project/openerp/modules/registry.py", line 76, in __init__
    cr = self.db.cursor()
  File "/home/juliocesar/work/projects/my_project/openerp/sql_db.py", line 484, in cursor
    return Cursor(self._pool, self.dbname, serialized=serialized)
  File "/home/juliocesar/work/projects/my_project/openerp/sql_db.py", line 182, in __init__
    self._cnx = pool.borrow(dsn(dbname))
  File "/home/juliocesar/work/projects/my_project/openerp/sql_db.py", line 377, in _locked
    return fun(self, *args, **kwargs)
  File "/home/juliocesar/work/projects/my_project/openerp/sql_db.py", line 440, in borrow
    result = psycopg2.connect(dsn=dsn, connection_factory=PsycoConnection)
  File "/usr/lib/python2.7/dist-packages/psycopg2/__init__.py", line 179, in connect
    connection_factory=connection_factory, async=async)
OperationalError: FATAL:  database "False" does not exist

那么,如何指定使用 PyCharm 测试配置运行 OpenERP v7 unittest 所需的参数?

我使用了 PyCharm 4.0.6 Build #PY-139.1659,但它在 PyCharm 5 中也不起作用。

【问题讨论】:

我认为如果你准确地添加你得到的错误消息会很有帮助,也可以指定你使用的是哪个版本的 PyCharm。例如配置 PyCharm 4.0.4 的文档在这里jetbrains.com/pycharm/help/… 作为一个快速的想法,我不认为数据库连接是你必须在 PyCharm 中配置的东西,你所说的“其他参数”是什么意思也不清楚。如果你不澄清这些,你可能会开始拒绝投票。 谢谢,我添加了相关信息以澄清它 你自己解决了这个问题吗? 没有。尚无解决方案 "from openerp.tests.common import TransactionCase" 所以需要一个 db 参数来处理模块。使用“None”打开连接当然会返回“False”数据库名。 【参考方案1】:

在运行/调试窗口中,您是否将当前工作目录字段的值设置为/home/juliocesar/work/projects/my_project?这将有助于 PyCharm 查找相对路径以及导入。

您也可以尝试在参数列表中提供插件的完整路径。

【讨论】:

我设置了这个路径,但我认为问题不在于路径(它找到模块和函数),问题是指定运行openerp-server 脚本并指定其参数如databasedb_user【参考方案2】:

您可以在windows中使用cmd进行调试,使用cmd进入odoo.exe文件夹C:\Program Files (x86)\Odoo 8.0-20150719\server并执行此命令

odoo --log-level=debug

或Linux中的终端输入odoo.py文件(/usr/bin/)并执行此命令

python odoo.py --log-level=debug

按 ctrl+z 或 ctrl+c 以停用日志。

您会在 /var/log/odoo/ 中找到一个文件 (openerp-server.log)

【讨论】:

以上是关于在 PyCharm 中运行 OpenERP 7 单元测试的主要内容,如果未能解决你的问题,请参考以下文章

如何将BeautifulSoup导入到python方法OpenERP 7模块中

OpenERP 7 web 服务支持 Java 吗?

OpenERP 7 服务启动问题

Openerp 7 openerp-server.conf 自定义 addons_path

openerp 7 启动消息“没有名为 pooler 的模块”

如何避免在 OpenERP 7 中以自定义形式显示字段?