pytest参数化实现DDT:读取CSV数据

Posted 永远不要矫情

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytest参数化实现DDT:读取CSV数据相关的知识,希望对你有一定的参考价值。

1.DDT思想

DDT(Data-Drive test):将测试数据提取出来,与逻辑分离,通过参数传递不同的测试数据来驱动用例运行。pytest中的pytest.mark.parametrize()便可实现参数化。

2.csv文件

csv:逗号分隔的文本文件,其文件以纯文本形式存储表格数据。当然分隔符也不一定是逗号,最常见的是逗号或制表符。例如:一个命名为test.csv的文件中的数据如下所示:

a,b,c
1,2,3
3,4,5

3.读取csv数据,实现DDT
创建test_csv.py,代码如下:

import pytest
import csv

def get_data():
    with open('test.csv') as f:
        lst = csv.reader(f)
        my_data = []
        for row in lst:
            print(row)
            my_data.extend(row)
        print(my_data)
        return my_data

@pytest.mark.parametrize('name',get_data())
def test01(name):
    print(name)


if __name__ == '__main__':
    #get_data()
    pytest.main(['-sv', 'test_csv.py'])

读取csv文件需要导入csv模块。查看reader方法可知:
csv.reader(f)返回一个csv_reader对象,再通过for循环去遍历,每次返回一行。

csv_reader = reader(iterable [, dialect='excel']
                            [optional keyword args])
        for row in csv_reader:
            process(row)

我们在与test_csv.py同目录下创建一个test.csv,数据如下:

collecting ... ['a', 'b', 'c']
['1', '2', '3']
['3', '4', '5']
['a', 'b', 'c', '1', '2', '3', '3', '4', '5']
collected 9 items

test_csv.py::test01[a] a
PASSED
test_csv.py::test01[b] b
PASSED
test_csv.py::test01[c] c
PASSED
test_csv.py::test01[1] 1
PASSED
test_csv.py::test01[2] 2
PASSED
test_csv.py::test01[30] 3
PASSED
test_csv.py::test01[31] 3
PASSED
test_csv.py::test01[4] 4
PASSED
test_csv.py::test01[5] 5
PASSED

以上是关于pytest参数化实现DDT:读取CSV数据的主要内容,如果未能解决你的问题,请参考以下文章

pytest参数化实现DDT:读取数据库数据

pytest参数化实现DDT:读取excel文件

pytest学习和使用12-Unittest和Pytest参数化详解

DDT与pytest.mark.parametrize参数化区别

Pytest进阶之参数化

参数化之ddt数据驱动框架