我遇到pytest问题,不包括我在sys.path列表中的项目rootdir。相反,它默认包括测试所在的目录。
这是我的项目结构。
proj/
setup.py
mypackage/
__init__.py
a.py
tests/
test_a.py
使用
运行pytest时py.test proj/mypackage/tests
它将 proj / mypackage / tests 插入到sys.path中,这是不好的,因为现在我无法导入,因为它不相对于tests目录。
我注意到py.test检测到rootdir,这被认为是我的项目的根,它是proj目录。这是我在测试期间在sys.path中想要的,所以我的所有代码都是相对于该目录的。我如何确保py.test在sys.path中包含(...)/ proj / ,以便我可以在test_a.py中import mypackage.a
。
答案 0 :(得分:4)
我使用conftest.py将包路径(相对于conftest.py文件)附加到sys.path,以便可以导入包。像这样:
# contents of conftest.py
import sys
from os.path import abspath, dirname
package_path = abspath(dirname(dirname(__file__)))
sys.path.insert(0, package_path)
然后,您将此文件放在tests目录中。默认情况下,conftest.py文件将在任何其他内容之前运行,因此其他测试将能够导入mypackage。
另一种可能更好的方法是添加setup.py并按照here给出的建议。