【pytest】pytest` 中几种常用的参数化方法

pytest 是一个强大的 Python 测试框架,它提供了多种参数化测试的方法。参数化测试允许你使用不同的输入集来运行相同的测试逻辑,从而确保代码在各种条件下都能正常工作。以下是 pytest 中几种常用的参数化方法:

1. 使用 @pytest.mark.parametrize 装饰器

这是 pytest 中最常用的参数化方法。你可以使用 @pytest.mark.parametrize 装饰器来指定测试函数的参数和对应的值。

示例:

import pytest

@pytest.mark.parametrize("input, expected", [
    (1, 2),
    (2, 4),
    (3, 6),
])
def test_multiplication(input, expected):
    assert input * 2 == expected

在这个例子中,test_multiplication 函数会被调用三次,每次使用不同的 (input, expected) 对作为参数。

2. 使用 pytest-cases 插件

pytest-cases 是一个第三方插件,它提供了更强大和灵活的参数化方法。你可以使用它来定义和组合测试用例,并将它们作为参数传递给测试函数。

安装:

pip install pytest-cases

示例:

import pytest
from pytest_cases import case, parametrize_with_cases

@case(id="case1")
def case_data1():
    return 1, 2

@case(id="case2")
def case_data2():
    return 2, 4

@parametrize_with_cases("input, expected", cases=[case_data1, case_data2])
def test_multiplication(input, expected):
    assert input * 2 == expected

在这个例子中,我们使用了 pytest-cases 插件来定义了两个测试用例 case_data1case_data2,并将它们作为参数传递给 test_multiplication 函数。

3. 使用 pytest-subtests 插件

pytest-subtests 插件允许你在一个测试函数中运行多个子测试,每个子测试都有自己的输入和预期输出。这对于测试具有多个分支或条件的函数非常有用。

安装:

pip install pytest-subtests

示例:

import pytest
from pytest_subtests import SubTests

def test_multiplication():
    with SubTests() as subtests:
        for input, expected in [(1, 2), (2, 4), (3, 6)]:
            with subtests.test(input=input, expected=expected):
                assert input * 2 == expected

在这个例子中,我们使用 pytest-subtests 插件在一个测试函数中运行了多个子测试。每个子测试都使用不同的 (input, expected) 对作为参数。

这些是 pytest 中常用的参数化方法。你可以根据你的具体需求选择适合你的方法来进行参数化测试。

相关推荐

  1. 【pytest】pytest` 常用参数方法

    2024-04-01 19:24:01       19 阅读
  2. CSS常用清除浮动方法

    2024-04-01 19:24:01       6 阅读
  3. vue 项目常用import 书写 方式

    2024-04-01 19:24:01       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-01 19:24:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-01 19:24:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-01 19:24:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-01 19:24:01       20 阅读

热门阅读

  1. 2024年3月29日西山居游戏运维开发面经

    2024-04-01 19:24:01       16 阅读
  2. tcpdump 抓包

    2024-04-01 19:24:01       20 阅读
  3. 每日一题 2580统计将重叠区间合并成组的方案数

    2024-04-01 19:24:01       20 阅读
  4. 力扣top100-两数之和

    2024-04-01 19:24:01       17 阅读
  5. Web 应用基础 - ServletContext:获取与应用

    2024-04-01 19:24:01       16 阅读
  6. 砍树c++

    砍树c++

    2024-04-01 19:24:01      17 阅读
  7. 达梦数据库ODBC驱动安装和配置

    2024-04-01 19:24:01       19 阅读
  8. mysql 索引类型 FULLTEXT NORMAL SPATIAL UNIQUE 区别

    2024-04-01 19:24:01       16 阅读
  9. 前端面试题

    2024-04-01 19:24:01       20 阅读
  10. Spring面试题系列-6

    2024-04-01 19:24:01       15 阅读
  11. SpringBoot定时任务

    2024-04-01 19:24:01       17 阅读
  12. 精进TypeScript--优先选择类型声明而不是类型断言

    2024-04-01 19:24:01       19 阅读