在运行测试之前更改cwd

时间:2014-10-31 04:19:03

标签: python unit-testing python-2.7 pytest

我在不同的目录中有一堆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?如果没有,我可以使用另一个测试运行器吗?

3 个答案:

答案 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")

将更改您当前的工作目录