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

pytest测试中如何正确定位测试目录下的文件路径?

pytest测试文件中正确定位数据文件的方法

目录结构

tests/my_test1.py
tests/input/data.txt
tests/bench/bench.csv

问题描述

测试文件my_test1.py需要读取tests/input/data.txt,但直接用./input/data.txt这类相对路径会失效——因为pytest支持多种调用方式,当前工作目录会随调用方式变化,导致相对路径找不到文件。之前尝试通过os.getenv('PYTEST_CURRENT_TEST')推导路径,结果不管从何处调用,该环境变量返回的路径始终是tests/,无法准确定位数据文件。

正确的解决方法

方法一:利用测试文件的__file__属性构建绝对路径

__file__会返回当前测试文件的绝对路径,不受工作目录影响,是最可靠的方式:

import os

# 获取当前测试文件所在的目录绝对路径
test_file_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接得到data.txt的绝对路径
data_file_path = os.path.join(test_file_dir, "input", "data.txt")

# 读取文件
with open(data_file_path, "r") as f:
    data_content = f.read()
    # 后续测试逻辑

方法二:通过pytest的pytestconfig fixture获取项目根目录

如果你的项目根目录是包含tests文件夹的上级目录,可以用pytestconfig fixture拿到项目根目录,再拼接数据文件路径:

def test_read_data(pytestconfig):
    # 获取pytest识别的项目根目录
    project_root = pytestconfig.rootdir
    # 拼接数据文件路径
    data_file_path = os.path.join(project_root, "tests", "input", "data.txt")
    
    with open(data_file_path, "r") as f:
        data_content = f.read()
        # 测试断言或处理逻辑

为什么之前的方法不可行

  • 相对路径依赖当前工作目录,而pytest可以从项目根、tests目录甚至其他子目录启动,工作目录随时变化,导致路径失效。
  • PYTEST_CURRENT_TEST环境变量的作用是标记当前正在运行的测试用例信息,并非用于获取文件系统路径,所以无法用来推导数据文件的位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:55:17