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

Pytest之parametrize参数化

文章目录

  • 1.前言
  • 2.单参数
  • 3.多参数
  • 4.字典形式
  • 5.parametrize 结合 ids 参数

1.前言

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

基本语法:

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

2.单参数

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

import pytest

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

运行结果:
在这里插入图片描述
除此之外,我们还是进行多次循环。

@pytest.mark.parametrize('char','String')
def test_parametrize02(char):
    print(char)

这里的可迭代对象是一个字符串,那么会将字符串每一个字符都赋值给参数
运行结果:
在这里插入图片描述
除了使用字符串,可以用列表

@pytest.mark.parametrize('type',['int','boolean','double'])
def test_parametrize03(type):
    print(type)

运行结果:
在这里插入图片描述

3.多参数

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

@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 装饰器来组合不同的参数化维度。
示例:

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

运行结果:
在这里插入图片描述

4.字典形式

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

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

运行结果:
在这里插入图片描述

5.parametrize 结合 ids 参数

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

@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],方便区分和查看。

相关文章:

  • 如何使用Spring Boot框架整合Redis:超详细案例教程
  • Java数据结构第十六期:走进二叉树的奇妙世界(五)
  • DeepSeek MLA(Multi-Head Latent Attention)算法浅析
  • Qt的坐标
  • TrustRAG:通过配置化模块化的检索增强生成(RAG)框架提高生成结果的可靠性和可追溯性
  • Redis - 高可用实现方案解析:主从复制与哨兵监控
  • drawDB:一款免费数据库设计工具
  • 从基础到进阶的Java学习技术指南
  • Spring Boot 测试:单元、集成与契约测试全解析
  • 004 rocketmq集群
  • C++杂记——RTTI
  • PageHelper新发现
  • list的模拟实现
  • P2P 下载科普:原理与应用
  • 三数之和_算法
  • 期权学习与期权异动
  • iOS 使用消息转发机制实现多代理功能
  • 如何将Vue项目部署至 nginx
  • Trae智能协作AI编程工具IDE:如何在MacBook Pro下载、安装和配置使用Trae?
  • DeepSeek 与大数据治理:AI 赋能数据管理的未来
  • 玛丽亚·凯莉虹口连唱两夜,舞台绽放唤醒三代人青春记忆
  • 中央提级巡视后,昆明厅官郭子贞接受审查调查
  • 网易有道一季度净利润同比增长247%:有能力在今年实现更强劲的利润增长
  • 全国省市县国土空间总体规划已基本批复完成,进入全面实施阶段
  • 《上海市建筑信息模型技术应用指南(2025版)》发布
  • 苏轼“胡为适南海”?