使用py.test时,如何使应用程序包可用于测试?

时间:2015-12-11 17:25:29

标签: python testing module pytest

假设我正在编写测试。显然它正在测试我的应用程序,所以我需要以某种方式将应用程序包导入到测试脚本中。目录结构是这样的:

root/
    app/
        __init__.py
        somemodule.py
    tests/
        my_test.py

我按照这样的方式运行测试:

cd tests
py.test # runs all the tests in the current directory

问题是:我应该如何在我的测试模块中导入应用程序模块?

my_test.py中,我尝试了from .. import app。这给了我一个错误Parent module '' not loaded, cannot perform relative import.

实现这一目标的标准方法是什么?

编辑:请注意我编辑了这个问题,专门针对py.test工具。

1 个答案:

答案 0 :(得分:1)

您应该能够通过正确配置py.test来运行它。

将您的模块添加到app/__init__.py以下行

from .somemodule import MyClass # or whatever ur class is called

文件夹中创建名为conftest.py的文件。您可以将其留空,但py.test使用它来查找项目路径。在里面你可以运行一些py.test初始化,比如添加fixtures

在您的my_test.py中,您现在可以致电

from app import MyClass

现在,您可以通过文件夹:

py.test tests/test.py

这对我有用。我认为py.test有一种方法可以包含模块,因为没有它你可能无法实现相同的功能。至少如果我没有使用py.test,我会坚持修改我的PYTHONPATH以指向我的应用程序路径。

修改

只是为了澄清py.test操纵测试会话的sys.path以包含根目录。 Py.test使用conftest.py文件识别根路径。然后将根路径添加到系统路径并用于测试。

你确实能够跑:

py.test tests/test.py

这也可行:

cd..
py.test rootTest/tests/test.py