3、pytest实现参数化

pytest 中,参数化(parametrization)是一种强大的功能,可以让你用不同的输入数据重复执行同一个测试函数。这种功能非常有用,可以帮助你显著减少重复代码并提高测试覆盖率。

参数化的主要作用是:

  1. 测试多种输入数据:确保函数对各种输入表现正确。
  2. 减少重复代码:一个测试函数可以用多种不同的输入进行测试,而不需要多次编写。
  3. 提高测试覆盖率:通过不同的输入组合,能够更全面地测试功能。

实现参数化的基本方法

pytest 提供了@pytest.mark.parametrize 装饰器来实现测试参数化。下面是如何使用它的一个示例:

import pytest# 假设有一个简单的函数,用于计算两个数字的和
def add(a, b):return a + b# 使用 @pytest.mark.parametrize 进行参数化测试
@pytest.mark.parametrize("a, b, expected", [(1, 2, 3),        # 测试数据1(10, 20, 30),     # 测试数据2(-1, 1, 0),       # 测试数据3(0, 0, 0)         # 测试数据4
])
def test_add(a, b, expected):assert add(a, b) == expected

参数化装饰器解析

  • @pytest.mark.parametrize 接受两个参数:
    • argnames: 参数名列表(字符串)。可以是逗号分隔的字符串如 "a, b, expected" 或列表 ["a", "b", "expected"]
    • argvalues: 参数值列表(元组)。每个元组对应一次测试调用的数据组合。

在上述示例中,@pytest.mark.parametrize 装饰器会让 test_add 运行四次,每次传入一组不同的 (a, b, expected) 值。

复杂参数化示例

参数化不仅仅适用于基本数据类型,还可以与复杂的数据结构结合使用,如字典、列表等。

@pytest.mark.parametrize("input_data, expected", [({"a": 1, "b": 2}, 3),({"a": 10, "b": 20}, 30),
])
def test_add_dict(input_data, expected):assert add(input_data["a"], input_data["b"]) == expected

参数化的优势

  1. 更简单的测试管理:通过参数化减少测试代码行数,更易于维护。
  2. 可读性:参数化清晰展示输入和期望结果列表,方便理解测试意图。
  3. 高效测试:可以一次性运行多个输入组合,提高测试效率。

通过使用 pytest 的参数化功能,你可以简化你的测试代码并确保你的函数在不同输入下能够正确执行。

下篇文章入口:
4、pytest常用插件-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cursor:超强AI变成神器

是一个强大的 AI 编程助手,可以帮助开发者快速地编写、编辑和讨论代码,支持 Python、Java、C# 等多种编程语言,并且可以与 GitHub、Slack 等平台集成。 Cursor 是什么? 想象一下,你有一个能把你的创意变成现实的造梦 …

画秒杀系统流程图

秒杀系统流程图 秒杀系统关键点 高并发处理: 使用网关(如 Nginx)进行流量限流,避免过载。分布式锁或 Redis 原子操作控制并发。 活动状态检查: Redis 存储活动状态(如 seckill:activity:1:status),快速…

【js逆向入门】图灵爬虫练习平台 第九题

地址:aHR0cHM6Ly9zdHUudHVsaW5ncHl0b24uY24vcHJvYmxlbS1kZXRhaWwvOS8 f12进入了debugger,右击选择一律不在此处暂停, 点击继续执行 查看请求信息 查看载荷,2个加密参数,m和tt 查看启动器,打上断点 进来 往…

Vue中的状态管理器Vuex被Pinia所替代-上手使用指南

Pinia.js 是新一代的状态管理器,由 Vue.js团队中成员所开发的,因此也被认为是下一代的 Vuex,即 Vuex5.x,在 Vue3.0 的项目中使用也是备受推崇 Pinia.js 有如下特点: 完整的 typescript 的支持;足够轻量&…

向量数据库学习笔记(1) —— 基础概念

一、 嵌入模型 Embedding Models 嵌入模型是将复杂数据(如文本、图像、音频等)转换为向量表示的机器学习模型 1. 核心概念 嵌入(Embedding):将高维、非结构化的数据映射到低维、稠密的向量空间 向量表示:输出固定长度的数值向量…

[NO-WX179]基于springboot+微信小程序的在线选课系统

[NO-WX179]基于springboot微信小程序的在线选课系统 1、管理员角色(web端):2、教师角色(web端):3、用户角色(小程序或web端):4、部分运行截图管理端--教师管理管理端--学…

2025年渗透测试面试题总结-某 长亭(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 长亭 一、Spring SpEL表达式注入漏洞 1. 技术原理 2. 利用条件 3. 攻击方法 4. 防御策略 二、Jav…

conda环境下解决gitk乱码模糊

关键词 conda、git、gitk、git gui、模糊、linux、乱码 现象 操作系统:ubuntu24.04 conda版本:25.1.1 正常的终端里gitk显示不会模糊 但是在conda创建的python虚拟环境中使用gitk,字体开始变得模糊不清 分析 根据deepseek的原因原因分析…

【C++项目实战】:基于正倒排索引的Boost搜索引擎(1)

1. 项目的相关背景与目标 针对boost网站没有搜索导航功能,为boost网站文档的查找提供搜索功能 站内搜索:搜索的数据更垂直,数据量小 类似于cplusplus.com的搜索 2.搜索引擎的相关宏观原理 3.技术栈和项目环境 技术栈:C/C&am…

汽车高级驾驶辅助系统应用存储MRAM

高级驾驶辅助系统和先进的互连航空电子技术等应用要求元件能够承受恶劣的环境条件,并具有较高的耐用性。闪存虽然在某些条件下性能可靠,但在耐用性方面存在局限性,因此无法满足这些严格的要求。 在实时传感器数据处理或高可靠性通信等对时间…

蓝桥-班级活动

问题描述 小明的老师准备组织一次班级活动。班上一共有 n 名 (n 为偶数) 同学,老师想把所有的同学进行分组,每两名同学一组。为了公平,老师给每名同学随机分配了一个 n 以内的正整数作为 id,第 i 名同学的 id 为 ai​。 老师希望…

MongoDB 的索引是提高查询性能的核心机制,类似于传统关系型数据库的索引。以下是对 MongoDB 索引的详细说明:

MongoDB 的索引是提高查询性能的核心机制,类似于传统关系型数据库的索引。以下是对 MongoDB 索引的详细说明: 一、索引基础 1. 索引的作用 加速查询:通过索引快速定位数据,避免全集合扫描(COLLSCAN)。 排…

深入理解指针(1)(C语言版)

文章目录 前言一、内存和地址1.1 内存1.2 究竟该如何理解编址 二、指针变量和地址2.1 取地址操作符&2.2 指针变量和解引用操作符*2.2.1 指针变量2.2.2 如何拆解指针类型2.2.3 解引用操作符 2.3 指针变量的大小 三、指针变量类型的意义3.1 指针的解引用3.2 指针-整数3.3 voi…

【视频】m3u8相关操作

【视频】郭老二博文之:图像视频汇总 1、视频文件转m3u8 1.1 常用命令 1)默认只保留 5 个ts文件 ffmpeg -i input.mp4 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls stream1.m3u82)去掉音频 -an,保留全部ts文件 ffmpeg -i input.mp4 -vf scale=640:480 -an -…

AWS CloudWatch 实战:构建智能监控与自动化运维体系

摘要:本文通过实际案例,详细讲解如何利用AWS CloudWatch实现云端资源的实时监控、日志分析与自动化运维,助力企业提升系统稳定性与运维效率 一、场景痛点分析 某电商平台迁移至AWS后面临三大挑战: 故障响应滞后:服务器…

第一天学爬虫

阅读提示:我今天才开始尝试爬虫,写的不好请见谅。 一、准备工具 requests库:发送HTTP请求并获取网页内容。BeautifulSoup库:解析HTML页面并提取数据。pandas库:保存抓取到的数据到CSV文件中。 二、爬取步骤 发送请求…

网络编程和计算机网络五层模型的关系

计算机网络的五层模型(应用层、传输层、网络层、链路层和物理层)为网络编程提供了基础框架和通信机制。网络编程就是在这些层次上实现应用程序之间的通信。 计算机网络五层模型 (1)应用层: 作用:应用层是…

知识篇 | Oracle的 TEMP表空间管理和优化

Oracle临时表空间(TEMP)是数据库中用于存储会话级临时数据的核心组件,主要用于支持需要中间结果集的操作(如排序、哈希连接)。其数据在事务结束或会话终止后自动释放,不持久化存储。 核心特点:…

重学Java基础篇—线程池参数优化指南

一、核心参数解析 线程池(ThreadPoolExecutor)的性能取决于以下关键参数: 参数说明corePoolSize核心线程数,即使空闲也不会被回收maximumPoolSize最大线程数,当队列满且核心线程忙时创建新线程workQueue任务队列&…

记一次线上环境JAR冲突导致程序报错org.springframework.web.util.NestedServletException

一、问题描述 有个文件导入功能,用到了Hutool 的加密解密功能,本地运行完全可以,但是线上报错:“org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFou…