Skip to content

Pytest 结合数据驱动 - CSV


简介

数据驱动测试(Data-Driven Testing,DDT)是一种测试方法,它将测试数据与测试逻辑分离,使用外部数据源提供测试输入数据,并驱动测试执行。这样,测试用例的设计和执行不依赖于硬编码的数据,而是通过动态加载不同的数据集来自动执行多次测试。数据驱动测试可以帮助提高测试效率、扩展性,并减少重复工作。

简单来说,就是参数化的应用。数据量小的测试用例可以使用代码的参数化来实现数据驱动,数据量大的情况下建议大家使用一种结构化的文件如 CSV 文件、Excel 表格、JSON 文件或 YAML 文件等)来对数据进行存储,然后在测试用例中读取这些数据。


数据驱动应用场景

  • App、Web、接口自动化测试
  • 测试步骤的数据驱动
  • 测试数据的数据驱动
  • 配置的数据驱动

CSV 简介

CSV 是 "Comma-Separated Values"(逗号分隔值)的缩写,它是一种常用的文本文件格式,用于存储和交换表格数据。CSV 文件以纯文本形式保存表格数据,每行代表表格中的一行,每个字段在行中由逗号或其他分隔符分隔。CSV 是一种非常简单、通用的数据交换格式,通常不包含样式、公式或其他元数据,因此非常适合于数据导入、导出和交换。


CSV 文件内容示例:

Linux从入门到高级,linux,¥5000
web自动化测试进阶,python,¥3000
app自动化测试进阶,python,¥6000
Docker容器化技术,linux,¥5000
测试平台开发与实战,python,¥8000

读取 CSV 数据

  • 内置函数:open()
  • 内置模块:csvcsv.reader(iterable)
# 读取 csv 文件内容

def get_csv():
    with open('demo.csv', 'r') as file:
        raw = csv.reader(file)
        for line in raw:
            print(line)

CSV 实现数据驱动测试

工程目录结构

  • src 目录:存放被测函数文件。
  • data 目录:存放 csv 数据文件。
  • tests 目录:存放测试用例文件。
# 工程目录结构
.
├── data
│   └── params.csv
├── src
│   ├── __init__.py
│   └── operation.py
└── tests
    ├── __init__.py
    └── test_add.py

代码示例

# params.csv 文件内容

1,1,2
3,6,9
100,200,300
# operation.py 文件内容
def my_add(x, y):
    result = x + y
    return result

# test_add.py 文件内容
import pytest
import csv

def get_csv():
    '''
    读取 csv 文件内容
    :return: 返回 [[]] 格式数据
    '''
    with open('../data/params.csv', 'r') as file:
        raw = csv.reader(file)
        data = []
        for line in raw:
            data.append(line)
    return data


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)

测试结果:


总结

  • 读取 CSV 数据。
  • CSV 实现数据驱动测试。