当前位置: 首页 > 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 + bassert 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 + bassert result == expected

运行结果:
在这里插入图片描述
在测试结果中,每组参数对应的测试用例会显示为 test_parametrize07[test_case_1]、test_addition[test_case_2] 和 test_addition[test_case_3],方便区分和查看。

http://www.lryc.cn/news/545819.html

相关文章:

  • Python面试(八股)
  • 2024年第十五届蓝桥杯大赛软件赛省赛Python大学A组真题解析《更新中》
  • 湖仓一体概述
  • 【行政区划获取】
  • 【深入剖析:机器学习、深度学习与人工智能的关系】
  • Docker 学习(一)
  • flink web ui未授权漏洞处理
  • 【vue-echarts】——03.配置项---tooltip
  • 【弹性计算】弹性裸金属服务器和神龙虚拟化(二):适用场景
  • 提升系统效能:从流量控制到并发处理的全面解析
  • 计算机毕业设计SpringBoot+Vue.js贸易行业CRM系统(源码+文档+PPT+讲解)
  • 从头开始学SpringBoot—02ssmp整合及案例
  • 0301 leetcode - 1502.判断是否能形成等差数列、 682.棒球比赛、657.机器人能否返回原点
  • Vulnhub靶机——AI-WEB-1
  • 无人系统:未来科技的智能化代表
  • 在Docker中部署DataKit最佳实践
  • 进程的状态 ─── linux第11课
  • MySQL数据库基本概念
  • 什么是 jQuery
  • Redis Desktop Manager(Redis可视化工具)安装及使用详细教程
  • [KEIL]单片机技巧 01
  • 云原生监控篇——全链路可观测性与AIOps实战
  • C# 13与.NET 9革新及工业开发应用
  • Linux系统之DHCP网络协议
  • 【Linux】【网络】不同子网下的客户端和服务器通信其它方式
  • 【C++/数据结构】栈
  • Qt 对象树详解:从原理到运用
  • 【软路由】ImmortalWrt 编译指南:从入门到精通
  • 【智能音频新风尚】智能音频眼镜+FPC,打造极致听觉享受!【新立电子】
  • 第2章 windows故障排除(网络安全防御实战--蓝军武器库)