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. 所有文件路径 = 根目录 + 相对路径(永不报错)
相关推荐
大鹏说大话1 小时前
MySQL + Redis + Caffeine:Java后端通用三级缓存架构实战
开发语言
yuanpan1 小时前
Python 桌面 GUI 入门开发:从 tkinter 窗口到简易记事本
开发语言·python
川石课堂软件测试1 小时前
软件测试|常见面试题整理
数据库·python·jmeter·mysql·appium·postman·prometheus
做个文艺程序员1 小时前
Multi-Agent 系统实战:用 Python + LangGraph 搭建多智能体协作工作流
python·多智能体·langgraph·multi-agent
bang冰冰1 小时前
Trae工具安装和使用教程(新手零基础入门,全程无坑)
java·人工智能·python
User_芊芊君子1 小时前
聊聊自由开发者常用的学习机会全解析
开发语言·人工智能·python
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题】【Java基础篇】第40题:Java中的深拷贝和浅拷贝有什么区别
java·开发语言·后端·面试
xh didida2 小时前
算法 -- 位运算
开发语言·c++·算法
谙弆悕博士2 小时前
快速学C语言——第2章:编程规范与代码风格
服务器·c语言·开发语言·经验分享·程序人生·学习方法·业界资讯