pytest 找不到文件?直接在 pytest.ini 配置根目录 + 路径(最简单方案)

在 pytest.ini 里配置项目根目录 / 路径,让 pytest 执行用例时永远能找到文件pytest 专用、最标准、最省事的配置方法,不用自己写复杂代码!

一、核心结论

pytest.ini 可以配置项目根目录、测试数据目录、报告目录等所有路径 ✅ 配置后,无论在哪执行 pytest,都不会报 FileNotFound✅ 不用写死绝对路径,自动适配所有电脑


二、最简可用:pytest.ini 完整配置

直接在你项目根目录 创建 / 修改 pytest.ini

ini

复制代码
[pytest]
# 1. 配置项目根目录(自动识别,不用改)
pythonpath = .
# 2. 自定义你的测试文件根路径(可写多个)
test_data_path = data
report_path = reports
case_path = test_cases

# 其他 pytest 基础配置(可保留)
addopts = -v
testpaths = test_cases

这三行就是关键!

ini

复制代码
pythonpath = .                # 把项目根目录加入 Python 路径
test_data_path = data         # 测试数据文件夹
report_path = reports         # 报告文件夹
case_path = test_cases        # 用例文件夹

三、Python /pytest 中读取 pytest.ini 里的路径

直接用pytest 内置配置读取,任何测试用例里都能用:

python

运行

复制代码
import pytest
import os

# 读取 pytest.ini 中的路径
def test_demo():
    # 1. 获取项目根目录
    root_dir = os.getcwd()  # 因为配置了 pythonpath = . 所以永远正确
    
    # 2. 读取 pytest.ini 里自定义的路径
    data_dir = pytest.config.getini("test_data_path")
    report_dir = pytest.config.getini("report_path")

    # 3. 拼接绝对路径(永远不会找不到文件)
    data_file = os.path.join(root_dir, data_dir, "test.xlsx")

    print("文件路径:", data_file)

用法示例(再也不会错)

python

运行

复制代码
# 读取 data 目录下的文件 → 100% 找到
file = os.path.join(os.getcwd(), pytest.config.getini("test_data_path"), "user.json")
with open(file) as f:
    data = f.read()

四、最关键的一行(解决 99% 路径错误)

ini

复制代码
[pytest]
pythonpath = .

作用:项目根目录 加入 Python 搜索路径无论你在哪个子目录执行 pytest 命令os.getcwd() 永远 = 项目根目录所有相对路径直接生效


五、你的项目结构推荐(标准结构)

plaintext

复制代码
你的项目/
├─ pytest.ini       # 配置文件
├─ test_cases/      # 用例
├─ data/            # 测试数据
└─ reports/         # 报告

配置后执行:

bash

运行

复制代码
pytest

所有文件都能找到!


六、终极万能方案(复制即用)

1. pytest.ini

ini

复制代码
[pytest]
pythonpath = .
test_data = data
report = reports
testpaths = test_cases
addopts = -v --alluredir=reports

2. conftest.py(pytest 全局文件)

python

运行

复制代码
import os
import pytest

@pytest.fixture(scope="session")
def project_root():
    """项目根目录"""
    return os.getcwd()

@pytest.fixture(scope="session")
def data_path(project_root):
    """测试数据路径"""
    data_dir = pytest.config.getini("test_data")
    return os.path.join(project_root, data_dir)

3. 测试用例中使用

python

运行

复制代码
def test_read_file(data_path):
    file_path = os.path.join(data_path, "test.json")
    with open(file_path, "r") as f:
        data = f.read()
    assert data is not None

总结(你只需要记住 2 步)

  1. pytest.ini 加一行:pythonpath = .
  2. os.getcwd() 获取项目根目录
  3. 所有文件路径 = 根目录 + 相对路径(永不报错)
相关推荐
橙橙笔记15 分钟前
QT的安装
开发语言·qt·安装·软件
Python私教16 分钟前
多个项目怎么安全合并?适配层、双轨验证与可回滚切换
python·软件架构·系统迁移
船厂电气自动化ai大模型27 分钟前
AI大模型与数学第42课:泰勒级数完整展开(神经网络近似核心)
人工智能·python·深度学习·算法·机器学习
格林威37 分钟前
C#图像像素放大:邻域平均、双线性插值实现像素放大的C#实现代码
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
兔兔兔兔11 小时前
记录C++ 8
开发语言·c++
刘新洲1 小时前
我以为 AI Agent 只是调模型,直到我亲手补上审批、Outbox 和故障恢复
python·agent·fastapi
qq_513728041 小时前
浏览器配置 + 文件上传 + 截图
python·selenium·测试工具·计算机外设
名字还没想好☜1 小时前
Go 1.23 range-over-func 迭代器实战:自定义可迭代类型、提前退出与惰性求值
开发语言·后端·golang·go·迭代器
喵同志不止步于码农2 小时前
Java Caffeine 快速入门
java·开发语言·后端·并发·缓存一致性
Fluxproxy2 小时前
Python请求玄学根治:彻底解决脚本间歇性超时、断连、假死问题
网络·python·安全