如何在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
相关产品推荐
相关产品推荐

