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

如何使用Pytest创建临时CSV文件,用于测试CSV解析代码?

使用Pytest创建虚拟CSV文件进行测试的方案

我编写了一段可根据传入ID号解析CSV文件特定值的代码,现在需要开展测试工作,希望使用Pytest创建虚拟CSV数据文件,以下是我写的部分代码(存在一些待修正的问题):

import pytest
import csv

@pytest.fixture
def client():
    return Client('FOO, BAR', 98763, 1986, '08/19/91', 'MALE')

@pytest.fixture(scope='session')
def file_name(tmpdir_factory):
    fn = tmpdir_factory.mktemp('data'.join('csvNg.csv'))
    headers = ['NAME','PN','MRN','DOB','GENDER']
    with open(fn,'w') as csvfile:
        writer = csv.Dict(csvfile,fieldnames=heade...

修正后的完整Fixture实现

针对代码里的问题(比如临时文件路径创建错误、CSV写入器使用不当),我帮你完善了可直接使用的版本:

import pytest
import csv

# 假设你的Client类定义如下(如果没定义需要补充)
class Client:
    def __init__(self, name, pn, mrn, dob, gender):
        self.NAME = name
        self.PN = pn
        self.MRN = mrn
        self.DOB = dob
        self.GENDER = gender

@pytest.fixture
def client():
    return Client('FOO, BAR', 98763, 1986, '08/19/91', 'MALE')

@pytest.fixture(scope='session')
def test_csv_file(tmpdir_factory):
    # 先创建临时目录,再在目录内生成CSV文件
    temp_directory = tmpdir_factory.mktemp('test_data')
    csv_file_path = temp_directory.join('csvNg.csv')
    
    # 定义CSV表头和测试数据
    csv_headers = ['NAME', 'PN', 'MRN', 'DOB', 'GENDER']
    test_records = [
        {'NAME': 'FOO, BAR', 'PN': 98763, 'MRN': 1986, 'DOB': '08/19/91', 'GENDER': 'MALE'},
        {'NAME': 'Jane Smith', 'PN': 54321, 'MRN': 4567, 'DOB': '03/15/88', 'GENDER': 'FEMALE'},
        {'NAME': 'John Doe', 'PN': 99999, 'MRN': 1111, 'DOB': '12/31/95', 'GENDER': 'MALE'}
    ]
    
    # 写入CSV内容,注意newline=''避免跨平台换行问题
    with open(csv_file_path, 'w', newline='') as csv_file:
        writer = csv.DictWriter(csv_file, fieldnames=csv_headers)
        writer.writeheader()  # 写入表头
        writer.writerows(test_records)  # 写入所有测试数据
    
    # 返回文件的字符串路径,供测试函数调用
    return str(csv_file_path)

如何在测试中使用这个Fixture

你可以在测试函数里引入test_csv_file和client fixture,来验证你的CSV解析逻辑:

def test_parse_csv_by_id(test_csv_file, client):
    # 这里替换成你自己的CSV解析函数,传入文件路径和要查询的ID(比如MRN)
    parsed_client_data = your_csv_parser(test_csv_file, client.MRN)
    
    # 断言解析结果与预期一致
    assert parsed_client_data['NAME'] == client.NAME
    assert parsed_client_data['PN'] == client.PN
    assert parsed_client_data['DOB'] == client.DOB

几个关键注意点

  • scope='session':这个fixture只会在整个测试会话开始时创建一次,避免重复生成文件,提升测试效率
  • newline='':这是Python写入CSV文件的最佳实践,能避免Windows和Linux系统下的换行符不一致问题
  • 多测试数据:你可以在test_records里添加更多条目,覆盖边界情况(比如特殊字符、空值等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:34:02