Python中pytest的参数化实例解析

 更新时间:2023年07月12日 09:47:31   作者:菜鸟小超  
这篇文章主要介绍了Python中pytest的参数化实例解析,pytest是一个非常成熟的全功能的Python测试框架,主要有简单灵活,容易上手,支持参数化等特点,需要的朋友可以参考下

Python客栈送红包、纸质书

pytest的参数化

参数化多个参数:

可以使用多个参数来参数化测试。例如:

1
2
3
4
5
6
7
8
import pytest
@pytest.mark.parametrize("x, y, expected", [
    (1, 2, 3),
    (3, 4, 7),
    (5, 6, 11),
])
def test_addition(x, y, expected):
    assert x + y == expected

参数化列表:

可以使用列表来参数化测试。例如:

1
2
3
4
5
6
7
8
import pytest
@pytest.mark.parametrize("test_input, expected_output", [
    ([1, 2, 3], 6),
    ([4, 5, 6], 15),
    ([7, 8, 9], 24),
])
def test_sum(test_input, expected_output):
    assert sum(test_input) == expected_output

参数化字典:

可以使用字典来参数化测试。例如:

1
2
3
4
5
6
7
8
import pytest
@pytest.mark.parametrize("test_input, expected_output", [
    ({"x": 1, "y": 2}, 3),
    ({"x": 3, "y": 4}, 7),
    ({"x": 5, "y": 6}, 11),
])
def test_addition(test_input, expected_output):
    assert test_input["x"] + test_input["y"] == expected_output

参数化文件:

可以使用文件来参数化测试。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
import pytest
import csv
def read_csv():
    with open('testdata.csv', 'r') as f:
        reader = csv.reader(f)
        rows = []
        for row in reader:
            rows.append(row)
        return rows[1:]
@pytest.mark.parametrize("test_input, expected_output", read_csv())
def test_addition(test_input, expected_output):
    x, y = map(int, test_input.split(','))
    assert x + y == int(expected_output)

动态参数化:

可以使用 Python 代码动态生成参数。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pytest
import time
def get_test_data():
    test_data = []
    start_time = time.time()
    while time.time() - start_time < 10# 运行时间小于 10 秒
        x = random.randint(1, 100)
        y = random.randint(1, 100)
        expected = x + y
        test_data.append((x, y, expected))
    return test_data
@pytest.mark.parametrize("x, y, expected", get_test_data())
def test_addition(x, y, expected):
    assert x + y == expected

从外部数据源加载数据:

可以使用动态参数化从外部数据源加载测试数据,例如数据库、API 或其他 Web 服务。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pytest
import requests
def get_test_data():
    response = requests.get('https://api.example.com/data')
    test_data = []
    for item in response.json():
        x = item['x']
        y = item['y']
        expected = item['expected']
        test_data.append((x, y, expected))
    return test_data
@pytest.mark.parametrize("x, y, expected", get_test_data())
def test_addition(x, y, expected):
    assert x + y == expected

在上面的例子中,get_test_data 函数使用 requests 库从远程 API 加载测试数据,并返回一个测试数据列表。然后,使用 @pytest.mark.parametrize 装饰器动态参数化测试,使用从 API 加载的测试数据作为参数。

组合参数:

可以使用 itertools 库中的 product 函数生成参数的所有组合。例如:

1
2
3
4
5
import pytest
import itertools
@pytest.mark.parametrize("x, y", itertools.product([1, 2, 3], [4, 5, 6]))
def test_multiplication(x, y):
    assert x * y == y * x

在上面的例子中,使用 itertools.product 函数生成 x 和 y 的所有组合,并将它们作为参数传递给测试函数。

参数化生成器:

可以使用生成器函数生成参数。例如:

1
2
3
4
5
6
7
8
9
10
11
import pytest
import random
def get_test_data():
    while True:
        x = random.randint(1, 100)
        y = random.randint(1, 100)
        expected = x + y
        yield (x, y, expected)
@pytest.mark.parametrize("x, y, expected", get_test_data())
def test_addition(x, y, expected):
    assert x + y == expected

到此这篇关于Python中pytest的参数化实例解析的文章就介绍到这了,更多相关pytest的参数化实例解析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://blog.csdn.net/weixin_41777118/article/details/130435808

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关文章

  • win8下python3.4安装和环境配置图文教程

    win8下python3.4安装和环境配置图文教程

    这篇文章主要为大家详细介绍了win8下python3.4安装和环境配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Python中的生成器和yield详细介绍

    Python中的生成器和yield详细介绍

    这篇文章主要介绍了Python中的生成器和yield详细介绍,本文讲解了列表推导与生成器表达式、斐波那契数列、生成器Generator、协程与yield表达式、使用生成器与协程等内容,需要的朋友可以参考下
    2015-01-01
  • python文件排序的方法总结

    python文件排序的方法总结

    在本篇内容里小编给各位整理的是一篇关于python文件排序的方法总结,有需要的朋友们可以参考下。
    2020-09-09
  • 详解python实现简单区块链结构

    详解python实现简单区块链结构

    区块链是一种数据结构,也是一个分布式数据库。这篇文章主要介绍了python实现简单区块链结构的相关知识,需要的朋友可以参考下
    2021-04-04
  • pandas中8种常用的index 索引设置

    pandas中8种常用的index 索引设置

    在数据处理时,经常会因为index报错而发愁,本文主要介绍了pandas中8种常用的index 索引设置,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • Python实现图像去噪方式(中值去噪和均值去噪)

    Python实现图像去噪方式(中值去噪和均值去噪)

    今天小编就为大家分享一篇Python实现图像去噪方式(中值去噪和均值去噪),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python中的代码运行时间获取方式

    python中的代码运行时间获取方式

    这篇文章主要介绍了python中的代码运行时间获取方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • OpenCV python sklearn随机超参数搜索的实现

    OpenCV python sklearn随机超参数搜索的实现

    这篇文章主要介绍了OpenCV python sklearn随机超参数搜索的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Python判断变量是否为Json格式的字符串示例

    Python判断变量是否为Json格式的字符串示例

    这篇文章主要给大家介绍了利用Python判断变量是否为Json格式的字符串的相关资料,文中给出了详细的示例代码供大家参考学习,需要的朋友们下面来一起看看吧。
    2017-05-05
  • Python HTMLTestRunner可视化报告实现过程解析

    Python HTMLTestRunner可视化报告实现过程解析

    这篇文章主要介绍了Python HTMLTestRunner可视化报告实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04

最新评论