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

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

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.mrgr.cn/news/59049.html

相关文章:

  • 【智能大数据分析 | 实验四】Spark实验:Spark Streaming
  • 机器学习5
  • LLM | 论文精读 | 基于大型语言模型的自主代理综述
  • 「C/C++」C++三大特性之封装、继承、多态(大致了解)
  • 【VUE点击父组件按钮,跳转到子组件】
  • GEE引擎架设好之后进游戏时白屏的解决方法——gee引擎白屏修复
  • 计算机网络:网络层 —— IPv4 地址与 MAC 地址 | ARP 协议
  • PSI-BLAST生成的PSSM文件转换为pssm_dict字典
  • leetcode hot100【LeetCode 128. 最长连续序列】java实现
  • 首发CSP-J2题解
  • 【已解决】编译Linux内核报错multiple definition of yylloc
  • 大模型训练、微调数据集
  • linux网络编程6——基于UDP的可靠传输协议KCP/QUIC
  • Minio文件服务器:安装
  • [LeetCode] 77. 组合
  • shodan1,shodan简介和kali下的使用
  • 【Linux】线程池详解及其基本架构与单例模式实现
  • [LeetCode] 494. 目标和
  • 【动态规划】【简单多状态dp问题】买卖股票相关问题(冷冻期、手续费、限制次数)
  • 基于SSM农业信息管理系统的设计
  • python曲线拟合通用代码
  • 数据结构(java)——数组的构建和插入
  • 【网络安全】一文讲清Zero Trust(零信任)安全
  • 【Python爬虫+数据分析】详细教学知网文献基本信息爬取方式(附详细教程+完整代码)
  • ctfshow的sql注入解题思路171-211
  • 文言编程:古老文字与现代编程的融合