Pytest之parametrize参数化

文章目录

1.前言

在 pytest 中,parametrize 是一个非常实用的装饰器,它允许你对测试函数进行参数化,即使用不同的参数组合多次运行同一个测试函数,从而更高效地进行测试覆盖。

基本语法:

python 复制代码
@pytest.mark.parametrize(argnames, argvalues)
  • argnames:这是一个字符串,表示要传入测试函数的参数名。如果有多个参数,参数名之间用逗号分隔。
  • argvalues:这是一个可迭代对象(如列表、元组等),其中每个元素代表一组参数值。如果 argnames 中有多个参数名,那么 argvalues 中的每个元素应该是一个包含对应数量值的元组。

2.单参数

以下是一个简单的单参数单次循环的案例:

python 复制代码
import pytest

@pytest.mark.parametrize('key',['value'])
def test_parametrize01(key):
    print(key)

运行结果:

除此之外,我们还是进行多次循环。

python 复制代码
@pytest.mark.parametrize('char','String')
def test_parametrize02(char):
    print(char)

这里的可迭代对象是一个字符串,那么会将字符串每一个字符都赋值给参数

运行结果:

除了使用字符串,可以用列表

python 复制代码
@pytest.mark.parametrize('type',['int','boolean','double'])
def test_parametrize03(type):
    print(type)

运行结果:

3.多参数

除了单参数外,还可以使用多参数

示例:

python 复制代码
@pytest.mark.parametrize("a, b, expected", [(1, 2, 3), (4, 5, 9), (0, 0, 0)])
def test_parametrize04(a, b, expected):
    result = a + b
    assert result == expected

🌟可迭代对象的类型是列表,里面的值是用的元组

运行结果:

可以使用多个 pytest.mark.parametrize 装饰器来组合不同的参数化维度。

示例:

python 复制代码
@pytest.mark.parametrize('x',[1,2])
@pytest.mark.parametrize('y',[3,4])
def test_parametrize05(x,y):
    print(f'x = {x},y = {y}')

运行结果:

4.字典形式

字典形式的可迭代参数也很简单

示例:

python 复制代码
@pytest.mark.parametrize('student',[{'name':'zhangsan','age':18}])
def test_parametrize06(student):
    print(f"学生的姓名: {student['name']},年龄:{student['age']}")

运行结果:

5.parametrize 结合 ids 参数

parametrize 装饰器还支持 ids 参数,用于为每组参数值指定一个自定义的标识,这样在测试报告中可以更清晰地看到每个测试用例使用的是哪组参数。

python 复制代码
@pytest.mark.parametrize("a, b, expected", [(1, 2, 3), (4, 5, 9), (0, 0, 0)],
                         ids=["test_case_1", "test_case_2", "test_case_3"])
def test_parametrize07(a, b, expected):
    result = a + b
    assert result == expected

运行结果:

在测试结果中,每组参数对应的测试用例会显示为 test_parametrize07test_case_1、test_additiontest_case_2 和 test_additiontest_case_3,方便区分和查看。

相关推荐
金銀銅鐵7 小时前
[Python] 基于欧几里得算法,实现分数约分计算器
python·数学
Lyn_Li9 小时前
Kaggle Top 5 | 198只股票、200条数据的金融预测——BattleFin高分方案从零复现
python·kaggle·比赛复盘·金融预测
杉氧12 小时前
深入理解 Compose 重组机制:快照系统如何驱动 UI 精准刷新?
android·架构·android jetpack
召钱熏12 小时前
状态枚举正确≠渲染正确:一个语音按钮的状态机边界修复实录
android·前端
杉氧13 小时前
深度解析:Jetpack Compose 核心架构与底层原理 —— 十年安卓老兵的“破茧重生”
android·架构·android jetpack
小九九的爸爸13 小时前
前端想要入门Agent开发,要具备哪些Python基础?
python·agent·ai编程
通玄13 小时前
Jetpack Compose 入门系列(七):ViewModel 与界面状态管理
android
落魄Android在线炒饭13 小时前
Android Framework 开发技巧:android.jar 生成与系统快速编译验证
android
阿耶同学14 小时前
手把手教你用 LangGraph 搭建三层嵌套 Agent 架构
python·程序员
如此风景14 小时前
Kotlin Flow操作符学习
android·kotlin