当前位置: 首页 > news >正文

Python测试之Pytest详解

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1


概要

当涉及到python的测试框架时,pytest是一个功能强大且广泛应用的第三方库。它提供简洁而灵活的方式来编写和执行测试用例,并具有广泛的应用场景。下面是pytest的介绍和详细使用说明:

pytest是一个用于python单元测试的框架,它建立在标准的unittest模块之上,并提供了更简洁、更易于使用的语法风格。它支持丰富的断言库,提供丰富的插件和扩展性,可以轻松地进行测试的编写、执行和报告。pytest的设计哲学强调可读性、灵活性和可扩展性,使得它适用于各种单元测试和集成测试场景。

在使用pytest工具之前,我们有必要了解一下python的一个关键字assert

1. assert关键字

assertpython中的一个关键字,用于在代码中执行断言。它用于检查一个条件是否为真,如果条件为假,则会引发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 注意事项

  1. assert语句主要用于调试和测试目的,因此在正式生产代码中使用时要谨慎,并注意在所需的情况下使用适当的异常处理机制。

  2. 断言的目的是在运行时检查代码的假设条件,并帮助捕获潜在的错误。它不应该用于处理预期的错误情况(例如输入验证),而应该用于检查不应该发生的情况。

1.3 小结

assert关键字是python中的一个断言语句,用于检查条件的真假,并在条件为假时引发 AssertionError。它用于调试和测试目的,帮助识别代码中的错误或意外情况。但请注意,在正式生产代码中使用时要谨慎,并遵循适当的异常处理机制。

聊完了,assert,接下来我们可以深入了解一下pytest这个第三方库在代码测试方面的使用。

2.pytest代码测试

它提供了简洁而灵活的方式来编写和执行测试用例,并且具有广泛的应用场景。以下是一些关于 Pytest 的介绍:

  1. 简洁的语法:Pytest 具有简洁、直观的语法,比传统的 unittest 更易于使用和阅读。你可以使用函数来定义测试用例,以 test_ 开头,并使用断言来验证预期结果。

  2. 自动发现:Pytest 能够自动发现项目中的测试文件和测试用例,并在不需要额外配置的情况下执行它们。只需运行 pytest 命令,它会根据约定的命名规则查找测试文件和测试函数。

  3. 丰富的断言支持: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中具有至少一个自由变量&#xff0c;那么Ax0一定具有非零解。A的列向量可以线性组合得到零向…...

Kubernetes 概述以及Kubernetes 集群架构与组件

目录 Kubernetes概述 K8S 是什么 为什么要用 K8S K8S 的特性 Kubernetes 集群架构与组件 核心组件 Master 组件 Node 组件 ​编辑 Kubernetes 核心概念 常见的K8S按照部署方式 Kubernetes概述 K8S 是什么 K8S 的全称为 Kubernetes,Kubernetes 是一个可移植、可扩…...

GZ035 5G组网与运维赛题第9套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项&#xff08;高职组&#xff09; 赛题第9套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通&#xff08;35分&#xff09; 子任务1&#xff1a;5G公共网络部署与调试&#xff08;15分&#xff09; 子…...

使用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开发框架&#xff0c;它以简洁的配置和快速的开发效率著称。在实际应用中&#xff0c;单点登录是一个非常重要的功能&#xff0c;它可以让用户在多个应用系统中使用同一个账号登录&#xff0c;提高用户体验和安全性。本文将详细讲解如何在Sp…...

Hadoop、Hive安装

一、 工具 Linux系统&#xff1a;Centos&#xff0c;版本7.0及以上 JDK&#xff1a;jdk1.8 Hadoop&#xff1a;3.1.3 Hive&#xff1a;3.1.2 虚拟机&#xff1a;VMware mysql&#xff1a;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++基础算法④——排序算法(快速、归并附完整代码)

快速排序 快速排序是对冒泡排序的一种改进。 它的基本思想是:通过一趟排序将待排记录分割成独立的两部分&#xff0c;其中一部分记录的关键字均比另一部分记录的关键字小&#xff0c;则可分别对这两部分记录继续进行快速排序&#xff0c;以达到整个序列有序。 假设我们现在对 …...

高防CDN如何在防护cc上大显神通

高级防御CDN&#xff08;Content Delivery Network&#xff09;在对抗CC&#xff08;HTTP Flood&#xff09;攻击方面扮演着关键的角色&#xff0c;具备以下重要职能和作用&#xff1a; 流量分散&#xff1a;CC攻击的目标是通过大规模的HTTP请求使服务器过载&#xff0c;从而导…...

解决CSS中height:100%失效的问题

出现BUG的场景&#xff0c;点击退出到登录页面&#xff0c;发现高度不对 上面出现了一种只是占了内容的高度&#xff0c;没有占满100%&#xff0c;为什么会出现这种情况呐&#xff1f; 让div的height"100%"&#xff0c;执行网页时&#xff0c;css先执行到&#xff0…...

小红书穿搭类种草营销怎么做?纯干货

在众多营销方式中&#xff0c;穿搭类种草营销以其独特的优势在小红书平台上崭露头角。穿搭类种草营销&#xff0c;以其独特的优势&#xff0c;成为了品牌和商家推广产品的重要方式。其优势主要体现在以下几个方面&#xff1a; 1. 高度相关性&#xff1a;小红书平台的用户主要是…...

什么是ARFF文件,以.arff结尾

关于arff,主要涉及三个输入类&#xff1a;概念、实例和属性。 1.概念简单而言就是需要被处理的东西&#xff0c; 2. 实例这个词有些陌生&#xff0c;但是可以大致认为其为样本&#xff0c; 3. 属性就是数据表中的一列。 为什么要用arff&#xff1f;&#xff08;arff介绍&#x…...

华为OD机考算法题:计算疫情扩散时间

题目部分 题目计算疫情扩散时间难度难题目说明在一个地图中(地图由 n * n 个区域组成)有部分区域被感染病菌感染区域每天都会把周围(上下左右)的4个区域感染。 请根据给定的地图计算多少天以后&#xff0c;全部区域都会被感染。 如果初始地图上所有区域全部都被感染&#xff0…...

29岁从事功能测试5年被辞,面试4个月还没到工作......

最近一个32岁的老同学因为被公司辞退&#xff0c;聊天过程中找我倾诉&#xff0c;所以写下了这篇文章。 他是15年二本毕业&#xff0c;学的园林专业&#xff0c;人属于比较懒的那种&#xff0c;不爱学习&#xff0c;专业学的也一般。实习期间通过校招找到了一份对口的工作。但…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...