pytest自动化测试数据驱动yaml/excel/csv/json

Owen
Owen
发布时间:2026-10-15| 5人浏览过
原创

本文详解在pytest自动化测试中如何利用数据驱动技术,通过YAML、Excel、CSV和JSON四种格式管理测试数据。内容涵盖从文件读取、解析到结合@pytest.mark.parametrize实现参数化测试的完整流程,包含工程目录结构示例及核心代码实现,帮助开发者提升测试用例的可维护性与执行效率。

数据驱动

所谓数据驱动,是指通过外部数据的变更来自动触发测试用例的执行,进而影响最终的测试结果。其核心本质即为参数化技术的应用。

在自动化测试场景中,数据驱动主要应用于以下环节:

  • 测试执行步骤的数据驱动;
  • 测试输入数据的数据驱动;
  • 系统配置信息的数据驱动;

1、pytest结合数据驱动-yaml

实现读取YAML文件的功能,首先需要创建名为env.yml的配置文件以存储测试数据。

工程目录结构如下:

  • data目录:用于存放yaml格式的数据文件
-
  dev: 127.0.0.1
  #dev: 127.0.0.2
  #prod: 127.0.0.3
  • testcase目录:用于存放具体的测试用例脚本
import pytest
import yaml
class TestYaml:
    @pytest.mark.parametrize("env", yaml.safe_load(open("./env.yml")))
    def test_yaml(self, env):
        if "test" in env:
            print("这是测试环境")
            # print(env)
            print("测试环境的ip是:", env["test"])
        elif "dev" in env:
            print("这是开发文件")
            print("开发环境的ip是:", env["dev"])
            # print(env)

运行结果示例如下:

2、pytest结合数据驱动-excel

目前常用的Excel读取库包括:xlrd、xlwings、pandas以及openpyxl。

以下以读取Excel文件为例,演示如何实现A+B=C的计算逻辑并进行断言验证。

工程目录结构如下:

data目录:用于存放excel格式的数据文件

  • func目录:用于存放被测函数的源代码
def my_add(x, y):
    result = x + y
    return result
  • testcase目录:用于存放测试用例脚本
import openpyxl
import pytest
from test_pytest.read_excel.func.operation import my_add
def test_get_excel():
    """
    解析excel数据
    :return: [[1,1,2],[3,6,9],[100,200,300]]
    """
    book = openpyxl.load_workbook('../data/param.xlsx')
    sheet = book.active
    cells = sheet["A1":"C3"]
    print(cells)
    values = []
    for row in sheet:
        data = []
        for cell in row:
            data.append(cell.value)
        values.append(data)
    print(values)
    return values
class TestWithExcel:
    @pytest.mark.parametrize('x,y,expected', test_get_excel())
    def test_add(self, x, y, expected):
        assert my_add(int(x), int(y)) == int(expected)

3、pytest结合数据驱动-csv

CSV(Comma-Separated Values)即逗号分隔值文件,是一种以逗号作为分隔符的纯文本文件格式。

读取CSV数据的方法如下:

  • 使用Python内置函数open()打开文件;
  • 导入内置模块csv;
  • 调用方法:csv.reader(iterable);
  • 参数说明:iterable,指代文件对象或列表对象;
  • 返回值:返回一个迭代器,遍历该迭代器时,每次操作将返回一行数据。

以下以读取CSV文件为例,演示如何实现A+B=C的计算逻辑并进行断言验证。

工程目录结构如下:

data目录:用于存放csv格式的数据文件

  • func目录:用于存放被测函数的源代码
def my_add(x, y):
    result = x + y
    return result
  • testcase目录:用于存放测试用例脚本
import csv
import pytest
from test_pytest.read_csv.func.operation import my_add
def test_get_csv():
    """
    解析csv文件
    :return:
    """
    with open('../data/params.csv') as file:
        raw = csv.reader(file)
        data = []
        for line in raw:
            data.append(line)
    print(data)
    return data
class TestWithCsv:
    @pytest.mark.parametrize('x,y,expected', test_get_csv())
    def test_add(self, x, y, expected):
        assert my_add(int(x), int(y)) == int(expected)

4、pytest结合数据驱动-json

JSON(JavaScript Object Notation)源自JS对象格式,是一种轻量级的数据交换标准。

JSON的基本结构包括:

  • 对象格式:{key: value};
  • 数组格式:[value1, value2...];

查看JSON文件内容的方法:

  • 1. 使用PyCharm编辑器;
  • 2. 使用txt记事本;

读取JSON文件的方法:

  • 使用内置函数open()打开文件;
  • 导入内置库json;
  • 常用方法包括json.loads()和json.dumps();

以下以读取JSON文件为例,演示如何实现A+B=C的计算逻辑并进行断言验证。

工程目录结构如下:

data目录:用于存放json格式的数据文件

  • func目录:用于存放被测函数的源代码
def my_add(x, y):
    result = x + y
    return result
  • testcase目录:用于存放测试用例脚本
import json
import pytest
from test_pytest.read_json.func.operation import my_add
def test_get_json():
    """
    解析json数据
    :return: [[1,1,2],[3,6,9],[100,200,300]]
    """
    with open('../data/params.json', 'r') as file:
        data = json.loads(file.read())
        print(list(data.values()))
        return list(data.values())
class TestWithJson:
    @pytest.mark.parametrize('x,y,expected', test_get_json())
    def test_add(self, x, y, expected):
        assert my_add(int(x), int(y)) == int(expected)

以上即为pytest自动化测试中数据驱动YAML/Excel/CSV/JSON的详细内容,更多关于pytest测试数据驱动YAML/Excel/CSV/JSON的资料请持续关注本站其他相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。