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

如何在PyTest参数化测试中读取CSV数据用于测试方法?

从CSV文件读取数据实现PyTest参数化的解决方案

步骤1:准备测试数据文件

把你的测试数据保存为test_data.csv,内容如下:

input1,input2,output
5,5,10
7,5,12

步骤2:编写CSV数据读取函数

你可以用Python标准库的csv模块,或者更简洁的pandas库来读取数据,两种方案如下:

方案A:使用标准库csv

import csv
import pytest

def load_csv_data(file_path):
    data = []
    with open(file_path, mode='r', newline='') as file:
        reader = csv.DictReader(file)
        for row in reader:
            # 转换数据类型(CSV读取的是字符串,需转为整数)
            data.append(
                (int(row['input1']), int(row['input2']), int(row['output']))
            )
    return data

方案B:使用pandas(更简洁)

先安装pandas:

pip install pandas

然后编写读取函数:

import pandas as pd
import pytest

def load_csv_data(file_path):
    df = pd.read_csv(file_path)
    # 把DataFrame转为元组列表,适配parametrize格式
    return list(df.itertuples(index=False, name=None))

步骤3:在测试函数中应用参数化

直接把读取到的数据传给@pytest.mark.parametrize即可:

# 假设test_data.csv和测试脚本在同一目录下
test_data = load_csv_data('test_data.csv')

@pytest.mark.parametrize("input1, input2, output", test_data)
def test_add(input1, input2, output):
    assert input1 + input2 == output, "加法测试失败"

# 扩展到多个测试方法,比如新增乘法测试(需对应CSV字段)
@pytest.mark.parametrize("input1, input2, output", test_data)
def test_multiply(input1, input2, output):
    # 示例逻辑,实际需匹配你的测试需求
    assert input1 * input2 == output * input2 - input1*input2 + input1*input2, "乘法测试失败"

扩展:读取XLSX文件

如果数据在XLSX文件中,用pandas的read_excel方法即可,只需修改读取函数:

def load_xlsx_data(file_path):
    df = pd.read_excel(file_path)
    return list(df.itertuples(index=False, name=None))

使用方式和CSV完全一致。

注意事项

  • 确保文件路径正确,可使用绝对路径避免路径问题
  • 注意数据类型转换,避免字符串与数字的断言错误
  • 若多个测试方法需要不同数据集,可编写多个读取函数或通过参数区分文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:15:38