假设我正在编写测试。显然它正在测试我的应用程序,所以我需要以某种方式将应用程序包导入到测试脚本中。目录结构是这样的:
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
工具。
答案 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