pytest结合数据驱动读取csv文件

  • csv文件介绍

csv: 英文!! 逗号分隔值
每行表示一条记录:CSV文件中每一行代表一条记录,相当于数据库中的一行数据
逗号分隔:每行数据中,使用逗号(,)进行分隔,相当于数据库中不同的字段
引号包围:当数据单元格中的内容含有逗号时,为避免混淆,需要引号(单引号’或双引号")将这个数据包围起来,防止误认为是两个不同数据
image-3

  • csv文件使用
  • 读取数据
    内置函数:open()
    内置模块:csv
  • 读取csv文件的方法
    csv.reader(iterable)
    参数:iterable,文件或列表对象
    返回:迭代器,每次迭代会返回一行数据
def get_csv():
    with open('demo.csv','r') as file:  #以只读的方式打开demo.csv文件,重命名为file
        raw = csv.reader(file) #file作为迭代器使用

        for line in raw: #遍历迭代器
            print(line)  #返回迭代器中的一轮迭代数据,即一行数据
  • pytest结合数据驱动读取csv文件
#测试my_add方法的测试用例
import pytest
import csv
from func.operation import my_add

# 用到csv文件中的数据时,就需要读取出来
def get_csv():
    """
    获取csv数据
    :return: 返回数据的结构:[[1,2,3],[3,6,9],[100,200,300]]
    """
    with open("../data/params.csv",'r',encoding="utf-8") as f:
        raw = csv.reader(f)  # f 表示文件或列表对象, 返回迭代器raw; raw为列表类型, 可迭代, 每次迭代返回的数据类型也是列表类型
        data = []
        for line in raw: #遍历迭代器中的每行数据, 返回的是列表类型
            data.append(line)
        return data #以列表的形式返回文件内容:[[1,2,3],[3,6,9],[100,200,300]]

class TestWithCSV:
    @pytest.mark.parametrize('x,y,expected',get_csv())
    def test_add(self, x, y, expected):
        assert my_add(int(x),int(y)) == int(expected)