Python同名测试文件报错,无需修改结构或重命名的解决办法?
问题背景
项目结构如下:
functions/ function1/ app.py tests/ __init__.py test_app.py function2/ app.py tests/ __init__.py test_app.py
运行测试时收到错误提示:
HINT: remove __pycache__ / .pyc files and/or use a unique basename for your test file modules
原因是Python会递归查找第一个不含__init__.py的目录(即function1/function2)作为模块导入的起始路径,导致两个test_app.py都被识别为tests.test_app,引发命名冲突。下面是无需给functionX目录添加__init__.py或重命名测试文件的解决方法:
解决方法
使用
-m pytest指定测试目录运行:针对单个function目录单独执行测试,比如运行function1的测试:python -m pytest functions/function1/tests/ -v运行function2的测试同理替换路径即可。这种方式会让pytest以当前项目根目录为基准,将每个function目录下的tests视为独立的测试集合,避免模块路径冲突。
临时设置PYTHONPATH环境变量:运行测试前将目标function目录设为Python的模块搜索路径,比如在Linux/macOS下运行function1的测试:
cd functions/function1 PYTHONPATH=. python -m pytest tests/Windows环境下则执行:
cd functions\function1 set PYTHONPATH=. && python -m pytest tests/这样Python会把当前function目录当作模块根,每个测试的导入路径会基于各自的function目录,不会出现重名问题。
用pytest的
--rootdir参数指定测试根目录:运行测试时明确指定每个function目录为测试根,比如:pytest functions/function1/tests/ --rootdir=functions/function1 -v该参数会让pytest将指定的function目录作为测试的根目录,确保每个测试模块的路径唯一。
内容的提问来源于stack exchange,提问作者PotatoBrain
相关产品推荐
相关产品推荐

