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

学习pytest时脚本运行正常,但pytest无法找到CSV文件求助

解决pytest执行时找不到CSV文件的问题

这问题我碰到过好几次啦!核心坑点在于单独运行脚本和用pytest执行时的工作目录不一致,导致你用相对路径找文件的逻辑失效了:

  • 直接跑脚本时,Python的工作目录是脚本所在的文件夹,所以能找到同目录的CSV;
  • 但pytest默认会把你执行pytest命令的那个目录作为工作目录,它会在这个目录下去找你指定的CSV文件,自然就找不到了。

下面给你两个实用的解决方案:

方案1:用脚本绝对路径拼接文件路径(推荐用于需要真实文件的场景)

修改你的load_data函数,通过__file__获取脚本所在的绝对目录,再和文件名拼接,这样不管从哪个目录运行pytest,都能精准定位到文件:

import csv
import os

def load_data(file):
    # 获取当前脚本所在的绝对目录
    script_dir = os.path.dirname(os.path.abspath(__file__))
    # 拼接出CSV文件的绝对路径
    file_path = os.path.join(script_dir, file)
    mast_list = []
    with open(file_path) as csvfile:
        data = csvfile.read()
        phone_masts = data.split('\n')
        columns = csv.reader(phone_masts, delimiter=',')
        for row in columns:
            if len(row) > 0:
                mast_list.append(row)
    return mast_list

方案2:用Mock模拟文件读取(推荐用于单元测试场景)

如果你只是想验证函数返回列表类型,完全不需要依赖真实的CSV文件,用unittest.mock模拟文件读取的行为就行,这样测试更独立、更快:

from unittest.mock import mock_open, patch
import pytest
from your_script import load_data  # 替换成你的脚本文件名

def test_load_data_returns_list():
    # 模拟一段CSV格式的内容
    mock_csv_content = "id,location\n1,London\n2,Paris"
    # 替换内置的open函数,让它返回我们模拟的内容
    with patch("builtins.open", mock_open(read_data=mock_csv_content)):
        result = load_data("dummy_file.csv")
        # 验证返回结果是列表类型
        assert isinstance(result, list)

额外小技巧

如果坚持要用真实文件且不想改代码,也可以在执行pytest时指定脚本所在目录为根目录:

pytest --rootdir /path/to/your/script/folder

不过这种方式灵活性较差,不如前两个方案实用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:34:32