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年二本毕业,学的园林专业,人属于比较懒的那种,不爱学习,专业学的也一般。实习期间通过校招找到了一份对口的工作。但…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
