You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Pytest遇FileNotFoundError,如何解决路径问题?

问题原因

你遇到的FileNotFoundError核心是相对路径的工作目录不匹配:

  • app.py里用open("config_demo.json")读取文件时,这个相对路径是基于当前执行代码的工作目录,而非app.py所在的project/文件夹。
  • 你在仓库根目录执行pytest -v tests,此时工作目录是根目录,代码会在根目录下查找config_demo.json,但该文件实际存放在project/目录中,因此找不到。

另外注意:你贴出的文件列表里有project/config.json,但app.py里读取的是config_demo.json,请确保文件名一致,避免额外路径问题。

解决方案

优先推荐方案一,它能彻底解决路径依赖问题,无论代码在哪里运行都能精准定位配置文件。

方案一:修改app.py,使用基于文件位置的绝对路径

调整app.py的配置文件读取逻辑,利用__file__获取当前脚本的绝对路径,再拼接配置文件路径:

from flask import Flask
import json  # 补上缺失的json模块导入
from os.path import dirname, join

# 获取app.py所在的project目录绝对路径
app_directory = dirname(__file__)
# 拼接配置文件的完整路径
config_file_path = join(app_directory, "config_demo.json")

with open(config_file_path, 'r', encoding='utf8') as f:
    base_config = json.load(f)

app = Flask(__name__)

# 后续代码保持不变

这种方法的优势是:无论直接在project/目录运行app.py,还是在根目录执行测试,都能正确找到配置文件。

方案二:在测试中切换工作目录(备选)

如果不想修改app.py的代码,可以通过pytest的fixture强制切换工作目录到project/:

  1. 在tests/目录下新建conftest.py文件(pytest会自动加载该文件):
import os
from os.path import dirname, join, normpath
import pytest

@pytest.fixture(scope="session", autouse=True)
def switch_to_project_dir():
    # 计算project目录的绝对路径
    repo_root = dirname(dirname(__file__))
    project_dir = normpath(join(repo_root, "project"))
    # 保存原工作目录,测试结束后恢复
    original_cwd = os.getcwd()
    os.chdir(project_dir)
    yield
    os.chdir(original_cwd)

这个fixture会在所有测试运行前自动切换到project/目录,让app.py里的相对路径能找到配置文件。

额外注意点
  • 你贴出的tests/test_app.py和目录结构里的tests/unit_tests/test_app.py路径不匹配,请确保测试文件实际路径与代码导入逻辑一致,避免pytest找不到测试用例。
  • app.py中缺少import json,即使解决了路径问题,也会触发NameError: name 'json' is not defined错误,需要补上。

内容的提问来源于stack exchange,提问作者gentlethorns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 21:12:30