pytest参数化多种用法总结

news/2024/9/18 14:45:24/ 标签: pytest, 服务器, linux

pytest.mark.parametrizepytest 的一个核心功能,它允许你参数化测试函数,这样你就可以使用不同的参数运行同一个测试函数多次。以下是 pytest.mark.parametrize 的详细用法总结:

基本用法

parametrize 装饰器可以接受一个或多个参数名,然后是一个参数值的列表(或列表的列表,如果测试函数有多个参数)。

import pytest
@pytest.mark.parametrize("test_input,expected", [("3+5", 8), ("2+4", 6), ("6*9", 42)])
def test_eval(test_input, expected):assert eval(test_input) == expected

在这个例子中,test_eval 函数将被调用三次,每次使用 test_inputexpected 参数的不同组合。

使用单个参数

如果你只需要参数化一个参数,可以只提供一个参数名和一个参数值的列表。

@pytest.mark.parametrize("number", [1, 2, 3])
def test_square(number):assert number ** 2 == number * number

使用多个参数

如果你的测试函数需要多个参数,你可以提供一个包含多个参数的元组列表。

@pytest.mark.parametrize("x, y", [(1, 2), (2, 3), (3, 4)])
def test_add(x, y):assert x + y == y + x

使用间接参数化

间接参数化允许你使用一个参数的值来决定另一个参数的值。

@pytest.fixture(scope="module")
def input_value():return [1, 2, 3]
@pytest.mark.parametrize("indirect_param", indirect=True)
@pytest.mark.parametrize("input_value", [1, 2, 3], indirect=True)
def test_indirect(input_value, indirect_param):assert input_value == indirect_param

在这个例子中,input_value 参数的值会传递给 indirect_param

使用参数名

你可以使用参数名来指定参数的顺序。

@pytest.mark.parametrize("a, b, expected", [(1, 2, 3), (2, 3, 5)])
def test_add(a, b, expected):assert a + b == expected

使用 ids 参数

你可以为每个参数组合提供一个唯一的标识符,这在测试结果输出中很有用。

@pytest.mark.parametrize("test_input,expected", [("3+5", 8), ("2+4", 6)], ids=["add", "add"])
def test_eval(test_input, expected):assert eval(test_input) == expected

使用 indirect 参数

indirect 参数允许你将参数传递给 fixture 函数。

@pytest.fixture
def arg(request):return request.param
@pytest.mark.parametrize("arg", [1, 2, 3], indirect=True)
def test_indirect(arg):assert arg > 0

使用 scope 参数

scope 参数允许你控制参数化 fixture 的作用域。

@pytest.fixture(scope="module")
def arg(request):return request.param
@pytest.mark.parametrize("arg", [1, 2, 3], indirect=True, scope="module")
def test_indirect(arg):assert arg > 0

组合使用 parametrize 装饰器

你可以组合使用多个 parametrize 装饰器来创建更复杂的参数化测试。

@pytest.mark.parametrize("a", [1, 2])
@pytest.mark.parametrize("b", [10, 20])
def test_foo(a, b):assert a < b

在这个例子中,test_foo 函数将被调用四次,因为每个 a 值都将与每个 b 值组合。

使用 marks 参数

你可以使用 marks 参数来应用多个标记到一个参数化测试上。

@pytest.mark.parametrize("arg", [1, 2], marks=pytest.mark.xfail)
def test_xfail(arg):assert arg == 2

在这个例子中,所有的参数化测试都将被标记为 xfail
这些是 pytest.mark.parametrize 的基本用法。它是一个非常灵活和强大的功能,可以用于创建详尽的测试套件,确保代码在不同的输入下都能正确工作。


http://www.ppmy.cn/news/1517077.html

相关文章

驱动:mknod-misc 杂项自动

一、杂项设备驱动 #include <linux/init.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/module.h> #include <linux/device.h> #include <asm/io.h> #include <asm/string.h> #include <asm/uaccess.h>…

TinaSDKV2.0 自定义系统开发

TinaSDKV2.0 自定义系统开发 什么是自定义系统&#xff1f; TinaSDK Kconfig界面配置 Tina Linux采用 Kconfig 机制对 SDK 和内核进行配置。 Kconfig 是一种固定格式的配置文件。Linux 编译环境中的 menuconfig 程序可以识别这种格式的配置文件&#xff0c;并提取出有效信息…

电脑丢失dll文件一键修复之dll确实损坏影响电脑运行

在使用电脑过程中&#xff0c;DLL文件丢失或损坏是一个常见的问题&#xff0c;它可能导致程序无法正常运行&#xff0c;甚至影响整个系统的稳定性。本文将详细介绍如何一键修复丢失的DLL文件&#xff0c;探讨常见的DLL丢失报错原因&#xff0c;并提供详细的修复步骤和预防措施。…

【mysql】mysql之数据操作语言(insert、delete、update)

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

《机器学习》—— OpenCV 对图片的各种操作(均值、方框、高斯、中值滤波处理)

文章目录 1、对有椒盐噪声的图片进行均值、方框、高斯、中值滤波处理2、给图像边缘增加边框3、对图片进行阈值化操作 1、对有椒盐噪声的图片进行均值、方框、高斯、中值滤波处理 均值滤波 cv2.blur是 OpenCV 库中的一个函数&#xff0c;用于对图像进行均值模糊处理。这个函数通…

幂等性简介

幂等性&#xff08;Idempotence&#xff09;是计算机科学中的一个重要概念&#xff0c;特别是在分布式系统和网络服务中。幂等性操作的特点是&#xff0c;无论执行多少次&#xff0c;结果都是相同的。换句话说&#xff0c;幂等性操作在多次执行后&#xff0c;对系统的状态不会产…

pycharm中opencv-python和opencv-contrib安装

1.去到https://pypi.org/中查找opencv-python 和opencv-contrib-python 2.分别下载。 3.下载完后&#xff0c;打开pycharm&#xff0c;然后新建一个项目&#xff0c;设置项目配置环境为当前python环境&#xff0c; 4.打开pycharm提供的控制台&#xff0c;使用pip install 安装文…

Datawhale第五期夏令营-CV竞赛

CV竞赛 0.赛事报名租用4090 1.开始运行下载文件提交结果 2.内容解释赛题背景赛题目标社会价值评分规则baseline精读代码什么是YOLO 主要代码内容精读使用Ultraalytics运行代码 0.赛事报名 赛事官网:https://www.marsbigdata.com/competition/details?id3839107548872 租用40…

密码强度验证——js基础积累

//密码强度等级 getPwdLevel:function (pwd,minLength8) {var level 0;if (pwd.length < minLength) return level;if (/\d/.test(pwd)) level; //数字if (/[a-z]/.test(pwd)) level; //小写if (/[A-Z]/.test(pwd)) level; //大写if (/\W/.test(pwd)) level; //特殊字符ret…

第四章:照相机模型与增强现实

目录 1 针孔照相机模型 1.1 照相机矩阵 1.2 三维点的投影 1.3 照相机矩阵的分解 1.4 计算照相机中心 2 照相机标定 3 以平面和标记物进行姿态估计 4 增强现实 4.1 PyGame和PyOpenGL 4.2 从照相机矩阵到OpenGL格式 4.3 在图像中放置物体 1 针孔照相机模型 针孔照相机…

MYSQL集群技术

---------------第一部分---------------------- 一.mysql源码部署 环境&#xff1a;rhel7.9 1.1.下载安装包 官网&#xff1a;http://www.mysql.com 1.2.在linux下部署mysql 1.创建登录用户和数据目录&#xff0c;并给数据目录赋权&#xff0c;因为配置文件读取需要权限&…

WPF中如何根据数据类型使用不同的数据模板

我们在将一个数据集合绑定到列表控件时&#xff0c;有时候想根据不同的数据类型&#xff0c;显示为不同的效果。 例如将一个文件夹集合绑定到ListBox时&#xff0c;系统文件夹和普通文件夹分别显示为不同的效果&#xff0c;就可以使用模板选择器功能。 WPF提供了一个模板选择…

机器学习-训练集、验证集、测试集(附:分割方法+交叉验证)【随记】

训练集、验证集、测试集&#xff08;附&#xff1a;分割方法交叉验证&#xff09; 1. 训练集&#xff08;Training Set&#xff09; 2. 验证集&#xff08;Validation Set&#xff09; 3. 测试集&#xff08;Test Set&#xff09; 4. 数据集的分割方法 5. 交叉验证&#x…

2024.8.15(python管理mysql、Mycat实现读写分离)

一、python管理mysql 1、搭建主mysql [rootmysql57 ~]# tar -xf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz [rootmysql57 ~]# cp -r mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql [rootmysql57 ~]# rm -rf /etc/my.cnf [rootmysql57 ~]# mkdir /usr/local/mysql…

pdf与canvas结合使用的场景1——为pdf增加水印

title: pdf与canvas结合使用的场景 date: 2024-08-28 10:03:45 tags: javascript 场景1:生成新的pdf水印 添加水印场景分析 这种情况下&#xff0c;不用再次封装好的一些水印工具的话&#xff0c;纯vue3前端的话就是使用pdfjscanvas来生成。 思路&#xff1a;1.上传并读取p…

《第二十八章:性能优化 - 电量优化》

一、引言 在 Android 应用开发中&#xff0c;电量优化是提升用户体验、延长设备续航的重要环节。一个电量消耗过高的应用可能会导致用户不满&#xff0c;甚至卸载。在这一章中&#xff0c;我们将重点探讨如何通过合理使用传感器和优化网络请求来降低应用的电量消耗。 二、合理使…

Tower for Mac Git客户端管理软件

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试1、打开软件&#xff0c;测试2、克隆项目&#xff0c;测试 安装完成&#xf…

java-Mybatis框架02

1.#{} 和${}区别 #{} 是占位符&#xff0c;是采用编译方式向sql中传值&#xff0c;可以防止sql注入&#xff0c;如果往sql中传值&#xff0c;使用#{}${} 是将内容直接拼接到sql语句中&#xff0c;一般不用于向sql中传值&#xff0c;一般用于向sql中动态传递列名。区别&#xff…

代理IP的来源、工作原理与应用

在数字化时代&#xff0c;代理IP已经成为网络活动中不可或缺的一部分&#xff0c;尤其在跨境电商、网络营销、网络爬虫等领域&#xff0c;代理IP发挥着至关重要的作用。本文将深入探讨代理IP的来源、工作原理、应用以及潜在风险&#xff0c;帮助读者更好地理解并合理利用这一网…

Git下载安装配置

Git的下载与安装 Git是一种分布式版本控制系统&#xff0c;用于跟踪文件和文件夹的变化。它最初由Linus Torvalds开发&#xff0c;用于管理Linux内核的源代码。Git的设计目标是&#xff1a;速度快、开发效率高、数据完整性和可靠性强。 Git通过创建一个存储库&#xff08;rep…