我在不同的目录中有一堆unittest
个测试用例。还有一个目录,其中只包含测试的帮助程序脚本。所以我的文件树看起来像这样
test_dir1
test_dir2
test_dir3
helper_scripts
test_dir*
中的每个python文件都包含以下行:
import sys
sys.path.append('../helper_scripts')
import helper_script
只要我从他们的目录中运行测试,这一切都可以正常工作。但是,我想在项目根目录下运行:
py.test
让它遍历所有目录并运行它找到的每个测试。问题是测试是从错误的目录运行的,因此sys.path.append
不会附加helper_scripts
目录,它会附加项目根目录的父目录。这使得所有导入失败并带有Import Error
。
有没有办法告诉py.test
从他们的目录运行测试脚本?即。在执行之前更改cwd?如果没有,我可以使用另一个测试运行器吗?
答案 0 :(得分:0)
我建议您改为配置环境,以便import helper_scripts
无论当前目录如何都可以正常工作。这是推荐的方法。
如果你绝对必须,你可以使用相对导入:
from .. import helper_script
答案 1 :(得分:0)
我通常要做的是这样构造我的项目:
myproject/
setup.py
myproject/
__init__.py
mymodule.py
tests/
__init__.py
test_dir1/
test_mymodule.py
helper_scripts/
__init__.py
helper_script.py
对于运行测试,我使用虚拟环境,并在myproject
根目录中使用以下命令之一在开发模式下安装了myproject
:
pip install -e .
python setup.py develop
现在在test_mymodule.py
中我可以说
from myproject.tests.helper_scripts import helper_script
然后我可以只运行pytest
,并且根本不需要在测试中更改工作目录。
有关不同项目目录结构的优缺点,请参见Pytest的Good Integration Practices。
答案 2 :(得分:-2)
os.chdir("newdir")
将更改您当前的工作目录