如何在Pytest中设置默认项目目录解决FileNotFoundError
问题:测试阶段导入config.py时因文件路径报错
项目目录结构
root_project/ ├── app │ ├── default_photo_profile.jpg │ ├── config.py │ ├── __main__.py # 应用为Python包,通过`python -m`运行 │ └── ... ├── tests │ ├── test_unit.py # 内部导入config.py │ ├── functional # 内部导入config.py │ ├── pytest.ini │ └── ... ...
问题描述
运行测试时,由于tests目录下不存在default_photo_profile.jpg,在导入config.py阶段直接报错。
config.py中读取文件的代码如下:
DEFAULT_PHOTO_FILE_PATH = Path('default_photo.jpg') with open(file=DEFAULT_PHOTO_FILE_PATH, mode='rb') as file_obj: DEFAULT_PHOTO_BYTES = file_obj.read()
已尝试的无效/不符合需求的方案
- 使用fixture模拟访问
default_photo.jpg:无效,错误发生在导入阶段而非测试执行阶段 - 在pytest命令行添加
--rootdir app参数:无效(原因未知) - 在
app.config.py中添加try/except捕获文件读取异常:可行但不符合需求,希望文件不存在时直接抛出错误 - 在每个测试目录中放置
default_photo.jpg:可行但实现繁琐 - 修改os.path相关路径:实现方式不够优雅
- 将tests纳入包(把
__main__.py移到root_project):不确定是否为合理方案(经验不足) - 设置
default_photo.jpg的绝对路径:会在生产服务器上失效
期望的可行解决方案
- 在
pytest.ini中设置根目录为root_project.app,模拟常规运行环境 - 设置根目录为
root_project.tests,将文件放在tests根目录即可被所有测试目录访问
内容的提问来源于stack exchange,提问作者salius
相关产品推荐
相关产品推荐

