1. 参数化测试的核心价值
在自动化测试领域,重复编写相似测试用例是常见痛点。假设我们需要测试一个计算器程序的加法功能,传统方式可能需要为每个测试用例单独编写一个测试函数:
python复制def test_add_1():
assert add(1, 2) == 3
def test_add_2():
assert add(-1, 1) == 0
def test_add_3():
assert add(0, 0) == 0
这种写法不仅代码冗余,当测试场景变化时维护成本也极高。pytest的@pytest.mark.parametrize装饰器通过将测试数据与测试逻辑分离,完美解决了这个问题。它允许我们:
- 用一组参数定义多种测试场景
- 保持测试代码DRY(Don't Repeat Yourself)
- 通过参数组合实现更全面的测试覆盖
- 在测试报告中清晰区分不同参数用例
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础用法与参数解析
2.1 基本语法结构
@pytest.mark.parametrize装饰器的标准用法如下:
python复制import pytest
@pytest.mark.parametrize("arg1, arg2, expected", [
(1, 2, 3),
(-1, 1, 0),
(0, 0, 0)
])
def test_add(arg1, arg2, expected):
assert add(arg1, arg2) == expected
关键组成部分解析:
- 参数名字符串:
"arg1, arg2, expected"定义参数变量名,用逗号分隔 - 参数值列表:
[(1,2,3), (-1,1,0), ...]提供多组测试数据 - 测试函数参数:
def test_add(arg1, arg2, expected)与装饰器参数一一对应
注意:参数名字符串中的变量名必须与测试函数参数名完全匹配,包括顺序
2.2 参数化方式对比
| 参数化方式 | 适用场景 | 优点 |
