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在不同条件下的输入与输出”的完整攻略。 标准输入输出 在Python中,我们可以使用input()函数获取标准输入的内容,使用print()函数输出标准输出内容。 示例代码: # 输入任意字符 name = input("请输入你的姓名:") # 输出 print("欢迎你,%s!"…

    python 2023年6月3日
    00
  • python格式化字符串实例总结

    以下是详细讲解“python格式化字符串实例总结”的攻略: 标准格式化字符串 Python中格式化字符串的语法是在字符串中使用”%”占位符。标准的字符串格式化包含类型和转换标志两个部分,语法如下: "格式化字符串" % 值 其中,”格式化字符串”是包含占位符的字符串,%是格式化操作符,后面的值会替代占位符生成新的字符串。占位符有以下类型:…

    python 2023年5月31日
    00
  • 【验证码逆向专栏】某验深知 V2 业务风控逆向分析

    声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【K哥爬虫】联系作者立即删除! 逆向目标 目标:某…

    python 2023年4月17日
    00
  • 详解Python Matplotlib解决绘图X轴值不按数组排序问题

    下面是详解Python Matplotlib解决绘图X轴值不按数组排序问题的完整攻略。 问题描述 在使用Python库Matplotlib进行绘图时,有时候在X轴上显示的数据值不会按照原始数组中的顺序排列,从而导致绘图结果不符合预期。 解决方案 获取原始数组中的索引 解决此问题的一种方案是,先获取原始数组中每个值的索引,然后按照索引的大小顺序重新排列数组。这…

    python 2023年5月18日
    00
  • PyCharm 解决找不到新打开项目的窗口问题

    针对“PyCharm 解决找不到新打开项目的窗口问题”的完整攻略,我给出以下步骤: 问题背景 在使用 PyCharm 进行开发时,有时可能会遇到无法打开新项目窗口的问题,这会使得进行新项目的开发工作受到很大的影响。下面是解决这个问题的完整攻略。 攻略步骤 1.首先,需要确认你的 PyCharm 是否安装正确,最好是通过官网进行下载安装,避免因为下载安装包的地…

    python 2023年5月20日
    00
  • 基于Python制作一个文件解压缩工具

    下面是基于Python制作一个文件解压缩工具的完整攻略。 1.背景介绍 随着互联网的发展,我们每天都会接触到各种格式的文件,例如压缩文件。如果我们需要解压缩这些文件,一个实用的文件解压缩工具就显得非常必要了。本文将介绍如何使用Python制作一个简单的文件解压缩工具。 2.实现步骤 2.1 安装必要的库 首先,我们需要安装Python中处理压缩文件的库,例如…

    python 2023年6月3日
    00
  • python 动态加载的实现方法

    下面是详细的讲解和示例。 什么是Python动态加载 Python动态加载指的是在程序运行时根据需要动态地导入模块或对象。与静态加载相比,动态加载不需要全部在程序开始时导入所有模块和包,这可以减少启动时间和占用的内存,提高程序的性能。 Python 动态加载的实现方法 Python动态加载的实现方法有以下三种: 1. 使用 importlib 模块 Pyth…

    python 2023年6月3日
    00
  • python里使用正则的findall函数的实例详解

    以下是“Python里使用正则的findall函数的实例详解”的完整攻略: 一、问题描述 在Python中,正则表达式是一种用于匹配和处理文本数据的强大工具。re模块是Python中用于处理正则表达式的标准库。其中,findall()函数是re模块中常用的函数之一,用于在字符串中搜索正则表达式,并返回所有匹配的字符串列表。本文将详细讲解Python中使用正则…

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