PyCharm运行pytest无法加载父目录fixture及资源文件问题求助
环境信息
Pycharm version: 2022.2.3 (Professional Edition) Framework: FastAPI Tests: pytest 6.1.0 OS: macOS Monterey 12.4
试过相关讨论的解决方案均无效,推测是配置不当导致问题。
问题描述
FastAPI项目在终端执行以下命令可正常运行测试:
poetry run dotenv run poetry run pytest tests -k name_of_some_test_method -v -s
但在PyCharm中运行相同测试时,虽能执行测试,却无法找到父目录下的资源文件或fixture,触发FileNotFoundError或找不到fixture的错误。
目录结构示例
My_Project - App_code - sources root - admin - api - auth - .... - tests - fixtures - some_files - JSON files - datafile.json - some_fixtures.py - ... - unit - services - test_service.py
从test_service.py运行依赖JSON文件的测试时,报错如下:
FileNotFoundError: [Errno 2] No such file or directory: 'tests/fixtures/some_files/datafile.json'
依赖fixture的测试同样出现找不到fixture的错误。
补充信息

解决方法
1. 调整PyCharm测试工作目录
PyCharm默认会将测试文件所在目录设为工作目录,和终端以项目根目录运行的逻辑冲突,导致路径错误:
- 点击右上角运行按钮旁的下拉框,选择「Edit Configurations」
- 找到对应的pytest配置项,在Working directory中选择项目根目录
My_Project - 保存配置后重新运行测试
2. 配置fixture扫描路径
找不到fixture是因为PyCharm未识别到fixture所在目录:
- 打开PyCharm设置(
Preferences→Tools→Python Integrated Tools),确认默认测试 runner为pytest - 右键点击
tests/fixtures目录,选择「Mark Directory as」→「Test Sources Root」 - 或者在pytest配置的Additional Arguments中添加
--rootdir=My_Project,强制pytest从项目根目录扫描fixture
3. 改用绝对路径获取资源(可选)
避免路径依赖工作目录,在测试代码中用绝对路径拼接资源文件:
import os # 获取项目根目录 PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # 拼接资源文件路径 data_file = os.path.join(PROJECT_ROOT, "tests", "fixtures", "some_files", "datafile.json")
4. 同步Poetry虚拟环境到PyCharm
确保PyCharm使用的是项目的Poetry虚拟环境:
- 打开
Preferences→Project: My_Project→Python Interpreter - 点击齿轮图标选择「Add」→「Poetry Environment」→「Existing environment」,找到Poetry创建的虚拟环境路径
- 应用设置后重新运行测试
内容的提问来源于stack exchange,提问作者ChronicUser
相关产品推荐
相关产品推荐

