Python打包:tests文件夹用途及与unittest、pyproject.toml的配合问题
Python项目打包与unittest相关问题解答
1. tests文件夹的核心用途
tests文件夹没有严格限定单一用途,它可以覆盖你提到的所有测试场景:
- 开发阶段测试本地代码:直接在项目根目录运行测试,此时Python会把当前目录加入模块查找路径,测试代码能直接加载本地的模块(不管是src结构还是根目录下的模块),适合开发时快速验证代码修改,不用提前安装包。
- 测试构建完成的包:把项目打包成wheel或源码包后,安装到干净的虚拟环境中,再运行tests里的测试,能验证打包过程中有没有遗漏文件、路径配置错误等问题,确保构建出的包本身是完整可用的。
- 验证目标设备上的安装包:在目标设备安装好包之后,把tests文件夹(或提取其中的基础测试用例)拷贝过去运行,能确认包在目标环境中功能正常、依赖兼容,完成基础的验收测试。
2. pyproject.toml完全可以和unittest配合
pyproject.toml是Python项目的配置入口,和unittest没有冲突,甚至能帮你更规范地管理测试相关的流程,而且不需要大幅修改现有测试代码:
- 无需额外配置也能运行:在开发阶段,直接在项目根目录执行
python -m unittest discover tests就能自动发现并运行unittest用例,完全不用修改pyproject.toml。 - 配置测试相关的项目属性:如果需要把tests包含在打包产物中(方便在目标设备上跑测试),可以在pyproject.toml里添加包数据配置:
[tool.setuptools.package-data] "*" = ["tests/**/*.py"]
- 自定义测试命令:如果想简化测试命令,可以在pyproject.toml里配置脚本入口,比如先写一个
tests/runner.py:
import unittest def main(): loader = unittest.TestLoader() suite = loader.discover('tests') runner = unittest.TextTestRunner() runner.run(suite) if __name__ == '__main__': main()
然后在pyproject.toml中添加:
[project.scripts] run-tests = "tests.runner:main"
之后执行run-tests就能直接运行所有unittest用例。
- 配合测试依赖管理:如果测试需要额外依赖(比如coverage),可以在pyproject.toml里声明:
[project.optional-dependencies] test = ["coverage"]
安装时用pip install your-package[test]就能把测试依赖一起装好。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

