使用pytest单元测试框架执行单元测试

ops/2024/10/29 22:35:39/

Pytest 是一个功能强大且灵活的 Python 单元测试框架,它使编写、组织和运行测试变得更加简单。以下是 Pytest 的一些主要特点和优点:

简单易用:Pytest 提供了简洁而直观的语法,使编写测试用例变得非常容易。它支持使用 assert 语句进行断言,并提供了丰富的断言方法来验证测试结果。

自动发现测试用例:Pytest 能够自动发现和执行目录中的测试文件和测试函数。只需将测试文件命名为以 test_ 开头的文件,Pytest 就能够识别并执行其中的测试用例。

丰富的插件生态系统:Pytest 拥有丰富的插件生态系统,可以通过插件扩展其功能。这些插件可以用于生成报告、测试覆盖率、参数化测试等方面。

参数化测试:Pytest 支持使用 @pytest.mark.parametrize 装饰器来实现参数化测试,使得可以在一个测试函数中运行多个测试案例。

支持夹具(fixtures):夹具是一种在测试之前或之后执行的代码片段,用于准备测试环境或清理测试后的状态。Pytest 提供了强大的夹具功能,可以通过函数级别或模块级别来使用。

丰富的报告输出:Pytest 生成详细的测试报告,包括测试用例的结果、失败原因、执行时间等信息。这些报告可以帮助开发人员更轻松地诊断和修复问题。

Pytest 是一个灵活、简单且功能丰富的单元测试框架,适用于各种规模的项目,并且具有广泛的社区支持和文档资源。

下午我们举5个简单的pytest框架进行测试的实际案例:

1.测试一个简单的函数

# 文件名:test_example.pydef add(x, y):return x + ydef test_add():assert add(1, 2) == 3assert add(5, 5) == 10

2.测试一个类的方法

# 文件名:test_calculation.pyclass Calculator:def add(self, x, y):return x + ydef test_calculator_add():calc = Calculator()assert calc.add(2, 3) == 5assert calc.add(5, 5) == 10

3.测试一个模块的功能

# 文件名:test_strings.pydef test_uppercase():assert 'hello'.upper() == 'HELLO'def test_split():s = 'hello world'assert s.split() == ['hello', 'world']

4.测试异常情况

# 文件名:test_exceptions.pydef divide(x, y):if y == 0:raise ValueError("Cannot divide by zero")return x / ydef test_divide():with pytest.raises(ValueError):divide(10, 0)

5.测试使用参数化

# 文件名:test_parametrize.py
import pytestdef add(x, y):return x + y@pytest.mark.parametrize("x, y, expected", [(1, 2, 3), (5, 5, 10), (10, -5, 5)])
def test_add(x, y, expected):assert add(x, y) == expected

把以上几个程序文件分别存到指定的目录下,cmd进入到此目录,然后执行pytest即可执行这5个测试文件。测试结果如下:

图片

希望以上的实例可以让大家对pytest单元测试框架有个基本的理解。


http://www.ppmy.cn/ops/129421.html

相关文章

【无人机设计与控制】基于Astar算法无人机路径规划,优化路径平滑

摘要 本文提出了一种基于A算法的无人机路径规划方法,并通过路径平滑优化提升路径的可行性和安全性。传统A算法在生成路径时,常因路径节点分布不规则导致路径不平滑,影响无人机的飞行效率和安全性。本文通过引入贝塞尔曲线对A*算法生成的路径…

JavaWeb合集16-JWT令牌验证

十六、JWT令牌验证 JWT(JSON Web Token)是一种用于在网络上安全传输信息的紧凑、URL 安全的表示形式。它是一种无状态的身份验证机制,常用于现代Web应用和服务之间传递用户身份信息或授权数据。JWT 设计用于在各方之间安全地传输信息&#x…

安全见闻8-9

声明 学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 安全见闻8:量子计算 一,量子计算原理概述: 量子概念的产生&#xf…

Navict的入门使用

目录 Navicat主页面 功能简介​编辑 连接数据库 Navicat 连接 MySQL 数据库 数据库备份 Navicat主页面 功能简介 连接数据库 Navicat 连接 MySQL 数据库 使用 Navicat 连接 MySQL 数据库是一个相对简单的过程。以下是详细的步骤: 1. 下载并安装 Navicat 首先…

C++基础:vector

在编写程序之前,我们首先要准备好相关的数据。比如说需要准备好一组电话号码,一球队的队员表,一个课表等关于这些相同类型的数据,C语言是通过数组来实现的。 int arry[10] {0,1,2,3,4,5,6,7,8,9};而在C当中处理这类数据是通过vec…

C#自定义事件的案例

方法一,详细的声明 namespace HelloWorldConsole {internal class Program{static void Main(string[] args){Customer customer new Customer();Waiter waiter new Waiter();customer.Order waiter.Action;customer.Action();}}public class OrderEventArgs : …

用Rust从头写CAD】第一章 Rust基础 第二节 第一个Rust程序

文章目录 [TOC](文章目录) 1、新建名称为“cad”的项目2、编辑器打开名称为“cad”的项目3、使用编辑器4、运行程序 Rust自带管理工具cargo,它让我们新建项目更加便捷。 1、新建名称为“cad”的项目 请在文件夹中选择项目的主目录 如上图,我选的路径是…

设计模式(一)

设计模式(一) 特点:可复用的面向对象软件 底层思维 设计者 抽象思维语言构造 面向对象 编译转换 组件封装 内存模型 设计模式 运行状态 架构模式封装:隐藏…