当前位置: 首页 > news >正文

3、pytest实现参数化

pytest 中,参数化(parametrization)是一种强大的功能,可以让你用不同的输入数据重复执行同一个测试函数。这种功能非常有用,可以帮助你显著减少重复代码并提高测试覆盖率。

参数化的主要作用是:

  1. 测试多种输入数据:确保函数对各种输入表现正确。
  2. 减少重复代码:一个测试函数可以用多种不同的输入进行测试,而不需要多次编写。
  3. 提高测试覆盖率:通过不同的输入组合,能够更全面地测试功能。

实现参数化的基本方法

pytest 提供了@pytest.mark.parametrize 装饰器来实现测试参数化。下面是如何使用它的一个示例:

import pytest

# 假设有一个简单的函数,用于计算两个数字的和
def add(a, b):
    return a + b

# 使用 @pytest.mark.parametrize 进行参数化测试
@pytest.mark.parametrize("a, b, expected", [
    (1, 2, 3),        # 测试数据1
    (10, 20, 30),     # 测试数据2
    (-1, 1, 0),       # 测试数据3
    (0, 0, 0)         # 测试数据4
])
def test_add(a, b, expected):
    assert add(a, b) == expected

参数化装饰器解析

  • @pytest.mark.parametrize 接受两个参数:
    • argnames: 参数名列表(字符串)。可以是逗号分隔的字符串如 "a, b, expected" 或列表 ["a", "b", "expected"]
    • argvalues: 参数值列表(元组)。每个元组对应一次测试调用的数据组合。

在上述示例中,@pytest.mark.parametrize 装饰器会让 test_add 运行四次,每次传入一组不同的 (a, b, expected) 值。

复杂参数化示例

参数化不仅仅适用于基本数据类型,还可以与复杂的数据结构结合使用,如字典、列表等。

@pytest.mark.parametrize("input_data, expected", [
    ({"a": 1, "b": 2}, 3),
    ({"a": 10, "b": 20}, 30),
])
def test_add_dict(input_data, expected):
    assert add(input_data["a"], input_data["b"]) == expected

参数化的优势

  1. 更简单的测试管理:通过参数化减少测试代码行数,更易于维护。
  2. 可读性:参数化清晰展示输入和期望结果列表,方便理解测试意图。
  3. 高效测试:可以一次性运行多个输入组合,提高测试效率。

通过使用 pytest 的参数化功能,你可以简化你的测试代码并确保你的函数在不同输入下能够正确执行。

下篇文章入口:
4、pytest常用插件-CSDN博客

相关文章:

  • 架构设计-springboot和springcloud的使用场景与区别
  • 【数组】螺旋矩阵
  • 图解AI对话系统架构:一次讲透核心技术
  • 【读点论文】Object Storage on CRAQ
  • 2025最新-智慧小区物业管理系统
  • Excel多级联动下拉菜单的自动化设置(使用Python中的openpyxl模块)
  • 汤臣倍健业绩倒车:2024年利润下滑超六成,三大核心品牌销量失守
  • acwing112:三种排序方法解决组合排序问题
  • 【杂记三】Cython加速模块cython_nms未编译
  • 无人机数据处理系统设计要点与难点!
  • Linux输入系统应用编程
  • 短信验证码安全需求设计
  • 游戏引擎学习第182天
  • # 03_Elastic Stack 从入门到实践(三)-- 2
  • gulimall知识点
  • multi paxos协议
  • Python爬虫获取1688商品(按图搜索)接口的返回数据说明
  • HTTP 协议中请求与响应的详细解析
  • RFID技术智能仓储管理解决方案应用实践
  • 10_JavaScript数组排序和高阶方法
  • 网站开发申请报告/优化大师官网登录入口
  • 谷歌网站统计/查询网站
  • 定制研发服务/泰州网站排名seo
  • 网站建设价格如何/sem推广竞价托管公司
  • 网站加水印/seo标题优化裤子关键词
  • 做设计英文网站/如何联系百度人工客服电话