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_parametrize07[test_case_1]、test_addition[test_case_2] 和 test_addition[test_case_3],方便区分和查看。

相关推荐
一枚小小程序员哈3 小时前
基于Android的随身小管家APP的设计与实现/基于SSM框架的财务管理系统/android Studio/java/原生开发
android·ide·android studio
喂完待续3 小时前
【Tech Arch】Spark为何成为大数据引擎之王
大数据·hadoop·python·数据分析·spark·apache·mapreduce
stevenzqzq3 小时前
android data 文件夹作用
android
2501_915918414 小时前
iOS 应用上架全流程实践,从开发内测到正式发布的多工具组合方案
android·ios·小程序·https·uni-app·iphone·webview
王者鳜錸5 小时前
PYTHON让繁琐的工作自动化-猜数字游戏
python·游戏·自动化
若天明5 小时前
深度学习-计算机视觉-微调 Fine-tune
人工智能·python·深度学习·机器学习·计算机视觉·ai·cnn
倔强青铜三6 小时前
苦练Python第39天:海象操作符 := 的入门、实战与避坑指南
人工智能·python·面试
一百天成为python专家7 小时前
Python循环语句 从入门到精通
开发语言·人工智能·python·opencv·支持向量机·计算机视觉
Sunhen_Qiletian7 小时前
朝花夕拾(五)--------Python 中函数、库及接口的详解
开发语言·python
三年呀8 小时前
标题:移动端安全加固:发散创新,筑牢安全防线引言:随着移动互联网
网络·python·安全