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?如果没有,我可以使用另一个测试运行程序吗?
我通常做的就是像这样构建我的项目:
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 的良好集成实践,了解不同项目目录结构优缺点的精彩总结。
| 归档时间: |
|
| 查看次数: |
4250 次 |
| 最近记录: |