Python测试之Pytest详解

概要
当涉及到python的测试框架时,pytest是一个功能强大且广泛应用的第三方库。它提供简洁而灵活的方式来编写和执行测试用例,并具有广泛的应用场景。下面是pytest的介绍和详细使用说明:
pytest是一个用于python单元测试的框架,它建立在标准的unittest模块之上,并提供了更简洁、更易于使用的语法风格。它支持丰富的断言库,提供丰富的插件和扩展性,可以轻松地进行测试的编写、执行和报告。pytest的设计哲学强调可读性、灵活性和可扩展性,使得它适用于各种单元测试和集成测试场景。
在使用pytest工具之前,我们有必要了解一下python的一个关键字assert:
1. assert关键字
assert是python中的一个关键字,用于在代码中执行断言。它用于检查一个条件是否为真,如果条件为假,则会引发AssertionError异常,以指示代码中的错误或意外情况。assert语句通常在调试和测试中使用,用于验证程序的正确性。使用方法如下:
1.1 基本使用
assert语句的一般用法如下:
assert condition, message
其中:
-
condition是要检查的条件,如果为 False,则会引发AssertionError异常。 -
message是可选的附加消息,用于在断言失败时提供更具体的错误信息。这对于识别断言失败的原因非常有用。
示例:
def divide(a, b):assert b != 0, "除数不能为零"return a / bresult = divide(10, 0)
print(result)
在上面的示例中,我们定义了一个 divide 函数,它执行两个数相除的操作。在执行除法之前,我们使用 assert语句来确保除数 b 不为零,如果为零,则会引发 AssertionError 异常,并在错误消息中指定除数不能为零的原因。
1.2 注意事项
-
assert语句主要用于调试和测试目的,因此在正式生产代码中使用时要谨慎,并注意在所需的情况下使用适当的异常处理机制。 -
断言的目的是在运行时检查代码的假设条件,并帮助捕获潜在的错误。它不应该用于处理预期的错误情况(例如输入验证),而应该用于检查不应该发生的情况。
1.3 小结
assert关键字是python中的一个断言语句,用于检查条件的真假,并在条件为假时引发 AssertionError。它用于调试和测试目的,帮助识别代码中的错误或意外情况。但请注意,在正式生产代码中使用时要谨慎,并遵循适当的异常处理机制。
聊完了,assert,接下来我们可以深入了解一下pytest这个第三方库在代码测试方面的使用。
2.pytest代码测试
它提供了简洁而灵活的方式来编写和执行测试用例,并且具有广泛的应用场景。以下是一些关于 Pytest 的介绍:
-
简洁的语法:
Pytest具有简洁、直观的语法,比传统的unittest更易于使用和阅读。你可以使用函数来定义测试用例,以test_开头,并使用断言来验证预期结果。 -
自动发现:
Pytest能够自动发现项目中的测试文件和测试用例,并在不需要额外配置的情况下执行它们。只需运行pytest命令,它会根据约定的命名规则查找测试文件和测试函数。 -
丰富的断言支持:
Pytest提供了丰富的断言支持,包括标准的 assert 语句、使用内置的assert断言模块的自定义断言、以及第三方断言库(如pytest-assume和pytest-check)。
2.1 使用方法
安装pytest,可以使用pip安装pytest:
pip install pytest
编写测试用例:pytest使用一种基于函数的方式编写测试用例。创建一个以test_开头的函数,根据需要添加断言来验证预期结果。示例代码如下:
def test_addition():assert 1 + 1 == 2def test_subtraction():assert 5 - 2 == 3
运行测试:在命令行中,运行以下命令来执行测试用例:
pytest
pytest将会自动发现项目中以test_开头的函数,并执行这些函数作为测试用例。
下面给出一个简单的测试用例:
class Bag:def __init__(self, maxsize=10):self.size = maxsizeself._item = []def add(self, item):if len(self) >= self.size:raise Exception('full')self._item.append(item)def remove(self, item):self._item.remove(item)def __len__(self):return len(self._item)def __iter__(self):for item in self._item:yield itemdef test_bag():bag = Bag()bag.add(1)bag.add(2)bag.add(3)assert len(bag) == 3bag.remove(3)assert len(bag) == 2for item in bag:print(item)if __name__ == '__main__':test_bag()
运行如下:

2.2 断言和测试标记
pytest支持广泛的断言,包括assert语句、使用内置assertions模块的自定义断言和第三方断言库,例如pytest-assume和pytest-check。
可以使用测试标记来组织和过滤测试用例。例如,使用@pytest.mark.skip标记来跳过某些测试,使用@pytest.mark.parametrize实现参数化测试。
2.3 使用插件和扩展:
pytest具有丰富的插件生态系统,可以通过安装和配置插件来扩展其功能。例如,有插件用于生成详细的测试报告、支持测试覆盖率的检查和集成、分布式测试等。
您可以使用pytest.fixture装饰器创建和共享测试固件,使用pytest.mark标记来控制测试的选择和执行,使用插件来生成详细报告、进行性能测试等。
测试配置文件:
可以通过创建pytest.ini或setup.cfg等配置文件来自定义pytest的行为。可以配置测试文件的匹配模式、报告格式、插件设置等。
pytest框架具有很强的灵活性和扩展性,适用于各种python测试场景。它提供了直观的语法、丰富的断言和插件生态系统,使得测试编写和执行变得更加便捷和高效。
pytest --help
运行上述命令可以获得更多关于pytest的命令行选项和用法信息。
这是对pytest的简要介绍和使用说明。请注意,这只是一个简单的入门指南,希望这个更完整的介绍和使用说明能帮助您开始使用pytest进行python测试。如果有其他问题或者指正,请随时提问与我交流!
3.总结
总而言之,Pytest作为一个功能强大的第三方测试库,为Python开发者提供了优雅且简单的方式来编写和执行测试。本文介绍了Pytest的基础概念和使用方法,包括使用简洁的语法编写测试用例、自动发现测试文件、丰富的断言支持以及参数化测试等。
我们还深入讨论了如何利用夹具来组织测试环境和共享设置代码片段。通过使用Pytest插件,我们可以自定义和扩展测试功能,例如生成详细的测试报告、检查测试覆盖率和并行运行测试。通过学习和掌握Pytest,我们能够更轻松地编写高质量的测试,提高Python应用程序的质量和可靠性。
Pytest的简单实用性使其成为任何Python开发者测试工具箱中必不可少的一部分。
相关文章:
Python测试之Pytest详解
概要 当涉及到python的测试框架时,pytest是一个功能强大且广泛应用的第三方库。它提供简洁而灵活的方式来编写和执行测试用例,并具有广泛的应用场景。下面是pytest的介绍和详细使用说明: pytest是一个用于python单元测试的框架,它…...
uni-app微信小程序打开第三方地图
需求 小程序中有个按钮点击以后会调用手机中第三方地图进行导航。参数 位置信息 经度 与纬度。 实现方法 uni.openLocation({latitude: Number(地址纬度),longitude: Number(地址经度),name: 地址名称,address: 地址详情,success: function (res) {console.log(打开系统位置地…...
Android NDK开发详解之NDK 使用入门
Android NDK开发详解之NDK 使用入门 下载 NDK 和工具创建或导入原生项目 原生开发套件 (NDK) 是一套工具,使您能够在 Android 应用中使用 C 和 C 代码,并提供众多平台库,您可使用这些平台库管理原生 activity 和访问实体设备组件,…...
nmap指纹识别要点以及又快又准之方法
nmap指纹识别要点以及又快又准之方法 一. 前言:二. nmap识别实验:一. 实验一:IP配置:空间配置:扫描结果:详细输出二. 实验二:IP配置:空间配置:扫描结果:详细输出三. 实验三:IP配置:空间配置:扫描结果:详细输出四. 实验四:IP...
Rust编程基础之6大数据类型
1.Rust数据类型 在 Rust 中, 每一个值都属于某一个 数据类型(data type), 这告诉 Rust 它被指定为何种数据,以便明确数据处理方式。我们将看到两类数据类型子集:标量(scalar)和复合(compound&a…...
06 MIT线性代数-线性无关,基和维数Independence, basis, and dimension
1. 线性无关 Independence Suppose A is m by n with m<n (more unknowns than equations) Then there are nonzero solutions to Ax0 Reason: there will be free variables! A中具有至少一个自由变量,那么Ax0一定具有非零解。A的列向量可以线性组合得到零向…...
Kubernetes 概述以及Kubernetes 集群架构与组件
目录 Kubernetes概述 K8S 是什么 为什么要用 K8S K8S 的特性 Kubernetes 集群架构与组件 核心组件 Master 组件 Node 组件 编辑 Kubernetes 核心概念 常见的K8S按照部署方式 Kubernetes概述 K8S 是什么 K8S 的全称为 Kubernetes,Kubernetes 是一个可移植、可扩…...
GZ035 5G组网与运维赛题第9套
2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项(高职组) 赛题第9套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通(35分) 子任务1:5G公共网络部署与调试(15分) 子…...
使用Jasypt3.0.3版本对SpringBoot配置文件加密
时间 2023-11-01 使用Jasypt3.0.3版本对SpringBoot配置文件加密 目录 引入依赖使用密钥生成密文配置yml验证是否自动解密 引入依赖 <!--yml 文件加解密--><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-b…...
生成一篇博客,详细讲解springboot的单点登录功能,有流程图,有源码demo
SpringBoot是目前非常流行的一个Java开发框架,它以简洁的配置和快速的开发效率著称。在实际应用中,单点登录是一个非常重要的功能,它可以让用户在多个应用系统中使用同一个账号登录,提高用户体验和安全性。本文将详细讲解如何在Sp…...
Hadoop、Hive安装
一、 工具 Linux系统:Centos,版本7.0及以上 JDK:jdk1.8 Hadoop:3.1.3 Hive:3.1.2 虚拟机:VMware mysql:5.7.11 工具下载地址: https://pan.baidu.com/s/1JYtUVf2aYl5–i7xO6LOAQ 提取码: xavd…...
PHP自定义函数--输入起始日期和解算日期返回日期差几天和 上一个周期的起始结束日期
/** 日期差几天* param beginDate:2018-01-26 endDatee:2018-01-26* return int days* */ function dateDiff($beginDate, $endDate) {$diff date_diff(date_create($beginDate), date_create($endDate))->format(%R%a);return (int)$diff; }/** 返回上一周期的起始和结束日…...
.net 7 上传文件踩坑
(Name “file”) 没加上这个传不进文件 /// <summary>/// 上传单个文件/// </summary>/// <param name"formFile"></param>/// <returns></returns>[HttpPost("UploadFiles")][FunctionAttribute(MuType.Btn, "…...
C++基础算法④——排序算法(快速、归并附完整代码)
快速排序 快速排序是对冒泡排序的一种改进。 它的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行快速排序,以达到整个序列有序。 假设我们现在对 …...
高防CDN如何在防护cc上大显神通
高级防御CDN(Content Delivery Network)在对抗CC(HTTP Flood)攻击方面扮演着关键的角色,具备以下重要职能和作用: 流量分散:CC攻击的目标是通过大规模的HTTP请求使服务器过载,从而导…...
解决CSS中height:100%失效的问题
出现BUG的场景,点击退出到登录页面,发现高度不对 上面出现了一种只是占了内容的高度,没有占满100%,为什么会出现这种情况呐? 让div的height"100%",执行网页时,css先执行到࿰…...
小红书穿搭类种草营销怎么做?纯干货
在众多营销方式中,穿搭类种草营销以其独特的优势在小红书平台上崭露头角。穿搭类种草营销,以其独特的优势,成为了品牌和商家推广产品的重要方式。其优势主要体现在以下几个方面: 1. 高度相关性:小红书平台的用户主要是…...
什么是ARFF文件,以.arff结尾
关于arff,主要涉及三个输入类:概念、实例和属性。 1.概念简单而言就是需要被处理的东西, 2. 实例这个词有些陌生,但是可以大致认为其为样本, 3. 属性就是数据表中的一列。 为什么要用arff?(arff介绍&#x…...
华为OD机考算法题:计算疫情扩散时间
题目部分 题目计算疫情扩散时间难度难题目说明在一个地图中(地图由 n * n 个区域组成)有部分区域被感染病菌感染区域每天都会把周围(上下左右)的4个区域感染。 请根据给定的地图计算多少天以后,全部区域都会被感染。 如果初始地图上所有区域全部都被感染࿰…...
29岁从事功能测试5年被辞,面试4个月还没到工作......
最近一个32岁的老同学因为被公司辞退,聊天过程中找我倾诉,所以写下了这篇文章。 他是15年二本毕业,学的园林专业,人属于比较懒的那种,不爱学习,专业学的也一般。实习期间通过校招找到了一份对口的工作。但…...
艾尔登法环帧率解锁终极指南:告别卡顿,畅享丝滑游戏体验
艾尔登法环帧率解锁终极指南:告别卡顿,畅享丝滑游戏体验 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_m…...
告别命令行!用Python脚本批量管理Docker容器,效率提升不止一点点
告别命令行!用Python脚本批量管理Docker容器,效率提升不止一点点每次在终端敲入docker ps、docker stop、docker rm时,你是否想过——当容器数量超过两位数,这种重复劳动是否在消耗你的生命?去年我们团队在迁移微服务架…...
别再乱算相似度了!用Python实战二元变量聚类:从Jaccard系数到病人分组
医疗数据分析实战:用Python实现基于Jaccard系数的病人症状聚类在医疗数据分析领域,如何从海量病人症状数据中发现潜在规律一直是临床研究的难点。传统方法往往依赖医生经验或简单统计,而现代数据挖掘技术为我们提供了更科学的解决方案。本文将…...
Arduino PWM转4-20mA工业电流信号:二阶滤波与V/I转换电路设计
1. 项目概述:从PWM到工业标准电流信号在工业自动化、过程控制和传感器领域,4-20 mA电流环是一个几乎无处不在的标准。它用4 mA代表测量值的下限(如0C),20 mA代表上限(如100C),这种设…...
Vue3 图片标框功能实现方案
基于 Vue3 组合式 API 的图片标框(画框、标注、选框)完整实现,核心逻辑封装在 GetBoxes 组件里,复制就能用 一、功能说明 ✅ 在图片上鼠标拖拽画矩形框 ✅ 实时显示框坐标(x, y, width, height) ✅ 支持多…...
QMCDecode终极指南:3步解锁QQ音乐加密格式,实现跨平台音乐自由
QMCDecode终极指南:3步解锁QQ音乐加密格式,实现跨平台音乐自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目…...
Hindsight测试策略:单元测试、集成测试和端到端测试
Hindsight测试策略:单元测试、集成测试和端到端测试 【免费下载链接】hindsight Hindsight: Agent Memory That Learns 项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight Hindsight作为一款专注于Agent Memory的开源项目,其可…...
5A智慧景区建设|对标一流!巨有科技打造数智化标杆景区
5A级景区是中国旅游的最高标准,代表着服务与管理的顶尖水平。随着5A评审标准日益严苛,“智慧化”已成为核心硬性指标。然而,不少景区的智慧化建设陷入“重硬件、轻整合”的误区,系统林立、数据孤岛,投入巨大却效果不佳…...
基于STM32与LoRa的低功耗物联网气象站DIY全攻略
1. 项目概述:打造一个低功耗的家庭气象站前阵子想给家里的智能家居系统加点“环境感知”能力,琢磨着搞个能实时监测室外温湿度、风速风向的小玩意儿。市面上成品气象站要么数据出不来,要么功耗感人,不适合长期户外部署。于是&…...
NBTExplorer:让Minecraft数据编辑从专业工具变成人人可用的可视化平台
NBTExplorer:让Minecraft数据编辑从专业工具变成人人可用的可视化平台 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer 你是否曾经面对Minecraft世界文件…...
