Python unittest测试套件中测试专用工具的推荐存放位置
Python测试专用工具的推荐存放方案
方案1:测试目录下的独立子包(最常用)
给你的测试目录添加__init__.py,将其标记为Python可识别的包,再创建专门存放测试工具的子目录(同样添加__init__.py),目录结构如下:
your_project/ ├── src/ │ └── your_app/ # 主业务代码目录 └── tests/ ├── __init__.py # 标记tests为Python包 ├── test_api.py # 业务测试文件 ├── test_logic.py └── test_utils/ ├── __init__.py └── utilities.py # 你的测试工具代码
导入方式:
- 绝对导入(更稳妥,不受运行路径影响):
from tests.test_utils import utilities as tu - 相对导入:
from .test_utils import utilities as tu(仅在tests包内部的测试文件中可用)
方案2:项目根目录下的独立测试工具包
如果测试工具需要跨多个测试子目录复用,或者想和业务测试代码彻底分离,可以在项目根目录单独创建测试工具包:
your_project/ ├── src/ │ └── your_app/ ├── tests/ │ ├── test_api.py │ └── test_logic.py └── test_utils/ ├── __init__.py └── utilities.py
使用前需确保项目根目录在Python的sys.path中,最简单的方式是在项目根目录执行pip install -e .(需配合项目的setup.py或pyproject.toml配置文件),之后即可直接导入:import test_utils.utilities as tu
方案3:利用pytest的conftest.py(仅适用于pytest框架)
如果你的项目使用pytest做测试框架,可直接把通用测试工具写到tests目录下的conftest.py中:
your_project/ ├── src/ │ └── your_app/ └── tests/ ├── conftest.py # 存放测试工具、全局fixture ├── test_api.py └── test_logic.py
pytest会自动加载这个文件里的内容,测试文件无需手动导入,直接调用工具函数或使用fixture即可。
关于你遇到的ImportError
之前的相对导入报错,是因为你的tests目录没有添加__init__.py,Python无法将其识别为可导入的父包,导致相对导入找不到上下文。给tests目录补上__init__.py即可解决该问题。
内容的提问来源于stack exchange,提问作者prxq
相关产品推荐
相关产品推荐

