【问题标题】:How to run Odoo tests unittest2?如何运行 Odoo 测试 unittest2?
【发布时间】:2015-12-23 23:43:01
【问题描述】:

我尝试使用 --test-enable 运行 odoo 测试,但它不起作用。我有几个问题。

根据文档测试只能在模块安装期间运行,当我们添加功能然后想要运行测试时会发生什么?

是否可以从像 Pycharm 这样的 IDE 运行测试?

【问题讨论】:

    标签: python openerp odoo-8 python-unittest


    【解决方案1】:

    这对运行 odoo 测试用例很有用:

    ./odoo.py -i/-u module_being_tested -d being_used_to_test --test-enable
    

    常用选项:

     -i INIT, --init=INIT
           install one or more modules (comma-separated list, use "all" for all modules), requires -d
    
    -u UPDATE, --update=UPDATE
           update one or more modules (comma-separated list, use "all" for all modules). Requires -d.
    

    数据库相关选项:

    -d DB_NAME, --database=DB_NAME
           specify the database name
    

    测试配置:

     --test-enable:  Enable YAML and unit tests.
    

    【讨论】:

    • 您的回答也很有帮助,但 --log-level=test 会以很好的格式显示。
    【解决方案2】:

    @aftab 您需要添加log-level,请参见下文。

    ./odoo.py -d <dbname> --test-enable --log-level=test
    

    关于您的问题,如果您正在更改已安装的模块并需要重新测试所有测试用例,那么您需要使用上述命令使用-u &lt;module_name&gt;-u all(对于所有模块)简单地重新启动服务器。

    【讨论】:

    • Bazzinga,您知道我们如何从像 Pycharm 这样的 IDE 运行测试以及如何模拟 Odoo 模型吗?
    • 抱歉不知道,使用 sublime ;)
    • 你知道模拟模型吗?
    • 抱歉不清楚,我的意思是模拟对象docs.python.org/3/library/unittest.mock.html
    • 如果您想在运行测试后停止 odoo,最好包含 `--stop-after-init`。
    【解决方案3】:

    这是一个非常好的插件,可以直接使用 pytest 运行单元 odoo 测试:

    https://github.com/camptocamp/pytest-odoo

    这是一个结果示例:

    【讨论】:

      【解决方案4】:

      我能够使用 pycharm 运行 odoo 的测试,为此我使用了 docker + pytest-odoo + pycharm(使用远程解释器)。

      首先你像这样设置一个 Dockerfile:

      FROM odoo:14
      USER root
      RUN apt-get update && \
          apt-get install -y --no-install-recommends \
              python3-pip
      RUN pip3 install pytest-odoo coverage pytest-html
      USER odoo
      

      还有一个像这样的 docker-compose.yml:

      version: '2'
      
      services:
        web:
          container_name: plusteam-odoo-web
          build:
            context: .
            dockerfile: Dockerfile
          image: odoo:14
          depends_on:
            - db
          ports:
            - "8069:8069"
          volumes:
            - odoo-web-data:/var/lib/odoo
            - ./config:/etc/odoo
            - ./addons:/mnt/extra-addons
          command: --dev all
        db:
          container_name: plusteam-odoo-db
          image: postgres:13
          ports:
            - "5432:5432"
          environment:
            - POSTGRES_DB=postgres
            - POSTGRES_PASSWORD=odoo
            - POSTGRES_USER=odoo
            - PGDATA=/var/lib/postgresql/data/pgdata
          volumes:
            - odoo-db-data:/var/lib/postgresql/data/pgdata
      volumes:
        odoo-web-data:
        odoo-db-data:
      

      因此,我们使用包扩展 odoo 图像以生成覆盖率报告和pytest-odoo

      一旦你有了这个,你可以运行docker-compose up -d来让你的odoo实例运行,odoo容器将安装pytest-odoo,下一部分是告诉pycharm使用远程解释器和odoo修改后的图像,包括pyest-odoo包:

      现在,每次您在 pycharm 中运行脚本时,它们都会根据您提供的图像启动一个新容器。

      检查 pycharm 启动的容器后,我意识到它们将项目目录绑定到容器内的 /opt/project/ 目录,这很有用,因为您需要在运行测试时修改 odoo.conf 文件。

      您可以为您应该执行的自定义测试数据库自定义数据库连接,重要的部分是您需要将addons_path 选项映射到/opt/project/addons 或由pycharm 启动的容器内的最终路径,您的自定义插件可用。

      有了这个,你可以像这样为 pytest 创建一个 pycharm 脚本:

      请注意我们如何为 odoo 配置提供路径并进行修改以进行测试,这样 pycharm 启动的容器中可用的 odoo 将知道您的自定义插件代码的位置。

      现在我们可以运行脚本甚至调试它,一切都会按预期工作。

      我在一篇中型文章中进一步讨论了这个问题(我的特殊解决方案),我什至写了一个带有工作演示的存储库,以便您可以尝试一下,希望这会有所帮助:

      https://medium.com/plusteam/how-to-run-odoo-tests-with-pycharm-51e4823bdc59https://github.com/JSilversun/odoo-testing-example

      请注意,使用远程解释器,您只需要确保 odoo 二进制文件可以正确找到 addons 文件夹,您就可以准备就绪 :) 除了使用 Dockerfile 来扩展图像有助于加快开发速度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 2019-02-10
        • 1970-01-01
        • 1970-01-01
        • 2016-07-30
        相关资源
        最近更新 更多