在运行测试之前更改 cwd

Yep*_*_Me 6 python unit-testing pytest python-2.7

我在不同的目录中有一堆unittest测试用例。还有一个目录仅包含测试的帮助程序脚本。所以我的文件树看起来像这样

test_dir1
test_dir2
test_dir3
helper_scripts
Run Code Online (Sandbox Code Playgroud)

每个 python 文件test_dir*都会有这些行:

import sys
sys.path.append('../helper_scripts')
import helper_script
Run Code Online (Sandbox Code Playgroud)

只要我从他们的目录中运行测试,这一切都可以正常工作。但是,我想在项目根目录下运行:

py.test
Run Code Online (Sandbox Code Playgroud)

并让它遍历所有目录并运行它找到的每个测试。问题是测试是从错误的目录运行的,因此不会sys.path.append附加helper_scripts目录,而是附加项目根目录的父目录。这使得所有导入失败并带有Import Error.

有没有办法告诉py.test从他们的目录运行测试脚本?IE。在执行它们之前更改cwd?如果没有,我可以使用另一个测试运行程序吗?

aka*_*ola 0

我通常做的就是像这样构建我的项目:

myproject/
    setup.py
    myproject/
        __init__.py
        mymodule.py
        tests/
            __init__.py
            test_dir1/
                test_mymodule.py
            helper_scripts/
                __init__.py
                helper_script.py
Run Code Online (Sandbox Code Playgroud)

myproject为了运行测试,我使用在根目录中使用以下命令之一以开发模式安装的 virtualenv myproject

pip install -e .
python setup.py develop
Run Code Online (Sandbox Code Playgroud)

现在test_mymodule.py我只能说

from myproject.tests.helper_scripts import helper_script
Run Code Online (Sandbox Code Playgroud)

然后我就可以运行pytest,根本不需要更改测试中的工作目录。

请参阅 Pytest 的良好集成实践,了解不同项目目录结构优缺点的精彩总结。