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

pytest是一个非常流行的Python测试框架。它支持多种类型的测试,包括单元测试、功能测试和端到端测试等。pytest还支持数据驱动测试,即使用不同的测试数据运行相同的测试用例。pytest支持使用多种格式的文件来保存测试数据,包括YAML、Excel、CSV和JSON等。

下面,我将详细介绍pytest支持的数据驱动测试,以及如何使用这几种格式的文件作为测试数据。

1. 安装pytest

首先,我们需要安装pytest。可以通过以下命令来安装:

pip install pytest

2. 创建测试用例

接下来,我们需要创建测试用例。这里以一个简单的加法测试用例为例。测试用例的代码如下:

def test_addition(a, b, expected):
    assert a + b == expected

这个测试用例有三个参数:a、b和expected。这个测试用例将检查a和b的和是否等于expected。

3. 定义测试数据

接下来,我们需要定义测试数据。pytest支持使用多种格式的文件来保存测试数据。这里我将介绍如何使用YAML、Excel、CSV和JSON文件作为测试数据。

3.1 使用YAML文件

下面是一个用于测试加法的yaml文件的例子:

- name: test1
  a: 1
  b: 2
  expected: 3
- name: test2
  a: 3
  b: 4
  expected: 7

这个文件包含了两个测试用例。每个测试用例都有三个参数:a、b和expected。

3.2 使用Excel文件

下面是一个用于测试加法的Excel文件的例子:

name a b expected
test1 1 2 3
test2 3 4 7

这个文件包含了两个测试用例。每个测试用例都有三个参数:a、b和expected。

3.3 使用CSV文件

下面是一个用于测试加法的CSV文件的例子:

name,a,b,expected
test1,1,2,3
test2,3,4,7

这个文件包含了两个测试用例。每个测试用例都有三个参数:a、b和expected。

3.4 使用JSON文件

下面是一个用于测试加法的JSON文件的例子:

[
  {
    "name": "test1",
    "a": 1,
    "b": 2,
    "expected": 3
  },
  {
    "name": "test2",
    "a": 3,
    "b": 4,
    "expected": 7
  }
]

这个文件包含了两个测试用例。每个测试用例都有三个参数:a、b和expected。

4. 实现数据驱动测试

有了测试用例和测试数据之后,我们就可以实现数据驱动测试了。以下是数据驱动测试的代码:

import pytest
import yaml
import xlrd
import csv
import json


def pytest_generate_tests(metafunc):
    if 'a,b,expected' in metafunc.fixturenames:
        test_data = get_test_data(metafunc.function.__name__)
        metafunc.parametrize('a,b,expected', test_data)


def get_test_data(func_name):
    file_name = get_test_data_file(func_name)
    file_type = get_test_data_file_type(file_name)
    if file_type == 'yaml':
        with open(file_name, 'r') as f:
            test_data = yaml.load(f, Loader=yaml.FullLoader)
            return [(data['a'], data['b'], data['expected']) for data in test_data]
    elif file_type == 'excel':
        book = xlrd.open_workbook(file_name)
        sheet = book.sheet_by_index(0)
        headers = sheet.row_values(0)
        test_data = []
        for i in range(1, sheet.nrows):
            row = sheet.row_values(i)
            test_data.append({headers[j]: row[j] for j in range(len(headers))})
        return [(data['a'], data['b'], data['expected']) for data in test_data]
    elif file_type == 'csv':
        with open(file_name, 'r') as f:
            reader = csv.DictReader(f)
            test_data = []
            for row in reader:
                test_data.append({k: int(v) for k, v in row.items() if k != 'name'})
            return [(data['a'], data['b'], data['expected']) for data in test_data]
    elif file_type == 'json':
        with open(file_name, 'r') as f:
            test_data = json.load(f)
            return [(data['a'], data['b'], data['expected']) for data in test_data]
    else:
        raise ValueError(f'Unsupported test data file type: {file_type}')


def get_test_data_file(func_name):
    return f'{func_name}.yaml'


def get_test_data_file_type(file_name):
    return file_name.split('.')[-1]


def test_addition(a, b, expected):
    assert a + b == expected

这个代码实现了数据驱动测试。pytest会调用pytest_generate_tests函数来动态生成测试用例,然后使用@pytest.mark.parametrize将测试数据传递给测试用例。

5. 运行测试

最后,我们可以运行测试用例。使用pytest命令来运行测试:

pytest -v

输出结果类似于:

tests/test_addition.py::test_addition[test1] PASSED
tests/test_addition.py::test_addition[test2] PASSED

以上便是使用pytest进行数据驱动测试的完整攻略,通过讲解yaml、excel、csv和json作为测试数据的使用示例,让读者掌握pytest的数据驱动测试方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pytest自动化测试数据驱动yaml/excel/csv/json - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python实现树的深度优先遍历与广度优先遍历详解

    下面是详细讲解“Python实现树的深度优先遍历与广度优先遍历详解”的完整攻略。 1. 什么是树 树是一种非线性数据结构,它由若干个节点组成,每个节点可以有若干个子节点。树节点之间存在一种层次关系,其中上面的节点称根节点,最下面的节点称为叶子节点。 2. 树的遍历 树的遍历是指按照一定的顺序访问树的所有节点。常见的树的遍历方式有深度优先历和广度优先遍历。 2…

    python 2023年5月14日
    00
  • flask中主动抛出异常及统一异常处理代码示例

    针对”flask中主动抛出异常及统一异常处理”,下面是完整的攻略: 异常处理的原理 在Flask程序中,异常处理是围绕着 Flask 的 Exception 类型展开的。我们可以通过创建自己的异常类,以及编写对应的异常处理装饰器来实现自己的异常捕捉和处理。 Flask提供了两个主要的装饰器,用于异常处理: @app.errorhandler() – 用于全局…

    python 2023年5月13日
    00
  • 详解python字节码

    当我们在Python中编写代码时,它会被编译成字节码。字节码是Python语言的一种中间形式,它将我们书写的Python代码转换为计算机可以理解和执行的二进制码。 本文将详细讲解什么是Python字节码,以及如何查看和理解它。我们将使用两个例子来说明Python字节码的工作原理。 什么是Python字节码? Python字节码是Python语言的一种中间形式…

    python 2023年6月7日
    00
  • 推荐11个实用Python库

    以下是详细的攻略: 推荐11个实用Python库 Python 作为一门面向对象的语言,拥有丰富的第三方库,这些库涵盖了各种各样的需求场景,可以帮助我们在编码时更加高效地实现目标。下面,我们就来推荐11个实用的 Python 库,它们分别是: 1. requests requests 被广泛地应用于 HTTP 协议通讯。简洁的语法和丰富的文档使用户只需几行代…

    python 2023年5月14日
    00
  • Python实现深度遍历和广度遍历的方法

    下面是详细讲解“Python实现深度遍历和广度遍历的方法”的完整攻略。 1. 什么是深度遍历和广度遍历? 深度遍历和广度遍历是图遍历中两种常用的方法。深遍是指从某个节点开始,沿着一条路径一直走到底,直到不能再走为止,然后回溯到上一个节点,走其他路径,直到遍历完整个图。广度遍历是指从某个节点开始,先遍该节点的所有邻居节点,然后历邻居节点的邻居节点,直到遍历完整…

    python 2023年5月14日
    00
  • Python接口测试get请求过程详解

    以下是关于“Python 接口测试 GET 请求过程详解”的完整攻略: Python 接口测试 GET 请求过程详解 在 Python 中,我们可以使用 requests 模块进行接口测试。其中,GET 请求是最常用的一种请求方式。以下是 Python 接口测试 GET 请求过程的详解。 发送 GET 请求 我们可以使用 requests 模块的 get()…

    python 2023年5月15日
    00
  • Python基础之字符串操作常用函数集合

    Python基础之字符串操作常用函数集合 Python中的字符串操作非常灵活,因此也有很多常用的字符串操作的函数。本文将介绍在Python中常用的字符串操作函数集合。 1. 字符串的基本操作 1.1 字符串的连接 使用“+”操作符连接两个字符串,例如: text1 = "Hello" text2 = "World" t…

    python 2023年5月13日
    00
  • 如何使用 Redis 的地理空间索引功能?

    以下是详细讲解如何使用 Redis 的地理空间索引功能的完整使用攻略。 Redis 地理空间索引简介 Redis 是一种高性能的键值存储数据库,支持多种数据结构和高级功能。其中,地理空间索引是 Redis 的一个重要功能,可以用于存储和查询地理位置信息。Redis 地理空间索引的特点如下: Redis 地理空索引是基于经纬度的,可以存储和查询地理位置信息。 …

    python 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部