Pytest学习教程_基础知识(一)

这篇具有很好参考价值的文章主要介绍了Pytest学习教程_基础知识(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

pytest是一个用于编写和执行Python单元测试的框架。它提供了丰富的功能和灵活性,使得编写和运行测试变得简单而高效。

  pytest的一些主要特点和解释如下:

  • 自动发现测试:pytest会自动查找以"test_"开头的文件、类和函数,并将其识别为测试用例。这样可以避免手动编写复杂的测试套件。
  • 参数化测试:pytest支持使用@pytest.mark.parametrize装饰器来定义参数化测试。通过将不同的参数传递给测试函数,可以轻松地执行多次测试并检查不同输入组合的结果。
  • 断言支持:pytest提供了丰富而灵活的断言库,用于验证预期结果与实际结果是否一致。这些断言函数可以处理各种数据类型和比较逻辑,使编写断言语句变得更简单和直观。
  • 夹具(Fixture):夹具是pytest的一个强大特性,用于在测试之前准备环境并在测试之后进行清理工作。夹具可以帮助您创建和管理共享的测试资源,例如数据库连接、临时文件等。
  • 插件系统:pytest具有可扩展的插件系统,可以根据需要添加各种插件来扩展其功能。这些插件可以用于生成测试报告、集成其他测试工具、修改测试执行流程等。

总结来说,pytest是一个功能强大且易于使用的Python单元测试框架,它提供了丰富的特性和灵活的配置选项,使开发人员能够高效地进行测试驱动的开发,并保证代码质量和可靠性。

一、安装

1、pytest 安装

安装命令: pip install -U pytest
查看版本: pytest --version

2、pytest 扩展插件

pip install pytest-cov
pip install pytest-html
pip install pytest-xdist
pip install pytest-repeat
pip install pytest-mock
pip install pytest-selenium
pip install pytest-timeout
pip install pytest-django
pip install pytest-flask
pip install pytest-bdd
pip install pytest-datadir
pip install pytest-ordering
pip install pytest-rerunfailures
pip install pytest-base-url
pip install allure-pytest
pip install pytest-randomly
pip install pytest-asyncio
  • pytest-cov: 生成测试覆盖报告,显示代码中被测试覆盖的部分
  • pytest-html: 生成漂亮的 HTML 报告,以可视化形式展示测试结果
  • pytest-xdist: 在多个进程或主机上并行执行测试,提高测试速度
  • pytest-repeat: 重复运行测试用例,用于检测稳定性和偶发性错误
  • pytest-mock: 使用 Mock 对象轻松地进行模拟和断言
  • pytest-selenium: 在 Selenium 中运行测试,用于自动化 Web 应用程序的端到端测试
  • pytest-timeout: 设置测试运行的超时时间,避免由于长时间运行而导致的阻塞
  • pytest-django: 对 Django 项目的测试提供支持和增强功能
  • pytest-flask: 对 Flask 应用程序的测试提供支持和增强功能
  • pytest-bdd: 使用行为驱动开发(BDD)方法编写测试,结合 Gherkin 语法
  • pytest-datadir: 在测试运行时访问测试数据目录
  • pytest-ordering: 控制测试函数的执行顺序
  • pytest-rerunfailures: 重新运行失败的测试用例,用于处理偶发性失败
  • pytest-base-url: 设置基本的 URL,用于在 Web 应用程序的测试中引用
  • allure-pytest: 生成 Allure 报告,提供详细和交互式的测试结果
  • pytest-randomly: 随机化测试用例的执行顺序,帮助发现不确定性问题
  • pytest-asyncio: 支持异步测试,用于编写基于 asyncio 的异步代码的测试

二、用例设计原则

  • 文件名要求: 通常 pytest 会自动发现以 test_ 开头或 _test 结尾的文件作为测试文件,但也可以通过配置进行自定义。例如 test_example.py 或 example_test.py 都符合命名约定。

  • 以 test_ 开头的函数: pytest 将识别以 test_ 开头的函数作为测试用例,这些函数应该包含您要测试的特定行为或功能。例如 def test_addition(): 是一个以 test_ 开头的测试用例函数。

  • 以 Test 开头的类和以 test_ 开头的方法: pytest 另一个常见的约定是,以 Test 开头的类用于组织相关的测试用例,并且类中以 test_ 开头的方法被识别为独立的测试用例。请注意,这些方法不能包含 __ init __ 方法。

  • 使用 assert 进行断言: 在 pytest 中,使用 assert 语句进行断言是推荐的做法。例如 assert add(2, 3) == 5 可以用于断言 add() 函数的结果是否符合预期。

三、代码示例

1、测试函数和测试类

# content of test_sample.py
# 测试函数
def func(x):
    return x + 1

def test_answer():
    assert func(3) == 4
# 可以看到pytest自动地运行了test_answer函数,同时提示测试通过,因为func函数的返回值是4


# 测试类,把多条用例放到一个类中
class TestClass:
    def func(self, x):
        return x + 1

    def test_B(self):
        assert self.func(3) == 6, '结果不符合预期'

    def test_A(self):
        assert self.func(3) == 5
# 可以看到,pytest自动地运行了test_B和test_A函数,同时都提示测试失败,\
# 因为TestClass类中的func方法的返回值是4,而不是6和5,所以assert语句报错

Pytest学习教程_基础知识(一),# Pytest 模块,pytest,python

2、异常处理

# content of test_sample.py
import pytest


def divide(a, b):
    if b == 0:
        raise ZeroDivisionError("Cannot divide by zero")
    return a / b


def test_divide():
    with pytest.raises(ZeroDivisionError) as exc_info:
        divide(10, 0)

    assert str(exc_info.value) == "Cannot divide by zero"

在上面的示例中,divide 函数用于执行除法运算。如果除数 b 为零,则会抛出 ZeroDivisionError 异常。在测试函数 test_divide 中,我们使用 pytest.raises 上下文管理器捕获该异常,并断言其异常信息是否与预期相符。

当运行 pytest 命令来执行测试时,它将检测到 divide 函数引发了 ZeroDivisionError 异常,并且断言通过。这表明异常处理机制正常工作。

四、常用的断言方法

assert x == y:判断x是否等于y
assert x != y:判断x是否不等于y
assert x > y:判断x是否大于y
assert x < y:判断x是否小于y
assert x >= y:判断x是否大于等于y
assert x <= y:判断x是否小于等于y
assert x 判断x为真
assert not x 判断x不为真
assert item in collection:判断item是否在collection中
assert item not in collection:判断item是否不在collection中

五、执行命令

1、Pytest执行命令

pytest: 运行所有以test_*.py或*_test.py命名的文件中的测试函数。
pytest test_sample.py: 运行指定的test_sample.py文件中的测试函数。
pytest testing/: 运行指定目录下所有以test_*.py命名的文件中的测试函数。
pytest -k "test_B": 按关键字匹配运行包含test_B关键字的测试函数。
pytest test_sample.py::test_B: 运行指定的test_sample.py文件中的test_B函数。
pytest test_sample.py::TestClass::test_B: 运行指定的test_sample.py文件中的TestClass测试类中的test_B方法。

2、其他执行命令

pytest -q: 使用-q/--quiet标志可以使输出保持简短。
pytest -v: 显示每个测试用例的执行结果。
pytest -s: 用于显示测试函数中的print()函数输出。
pytest -x: 第一次遇到错误后停止测试。
pytest --maxfail=2: 遇到两次错误后停止测试。
pytest -rs: -rs选项可以显示测试报告的摘要,包括已跳过的测试、错误和失败的数量以及原因。

六、目录结构组织

在使用 Pytest 进行单元测试时,你可以按照以下目录结构组织你的测试用例:

project/
├── src/
│   ├── module1.py
│   └── module2.py
└── tests/
    ├── test_module1.py
    └── test_module2.py
  • project/ 是你的项目根目录
  • src/ 目录存放你的源代码文件
  • module1.py 和 module2.py 是你要测试的模块或功能的源代码文件
  • tests/ 目录存放测试用例文件
  • test_module1.py 和 test_module2.py 是用于测试 module1.py 和 module2.py
    的测试用例文件

你可以根据需要在 tests/ 目录下创建更多的测试用例文件,每个文件可以包含多个测试函数。在测试用例文件中,你可以使用 Pytest 提供的各种断言和装饰器来编写测试逻辑。

请注意,这只是一种常见的组织结构示例,你可以根据自己的项目需要进行调整和扩展。文章来源地址https://www.toymoban.com/news/detail-612144.html

到了这里,关于Pytest学习教程_基础知识(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【基础知识】【模块介绍】电机编码器

    目录 概述  测速原理 波形分析 解码 单相计数 A相 B相 双相计数 转速计算 电机编码器常见的是AB相电机编码器,和旋转编码器类似,传送门 常见的有光电和霍尔等,属于非接触测转速的方法 不管是光电还是霍尔的编码器本质上都是在电机的旋转轴上放上一个码盘, 不同的是

    2023年04月08日
    浏览(53)
  • iOS设备和蓝牙模块连接基础知识

    iOS设备和蓝牙模块连接基础知识 一:iOS连接外设的几种方式 如图下面几种方式: CoreBluetooth和ExternalAccessory,两个框架,基本上是蓝牙设备与iOS设备连接的方式 有图可知,EAP要MFi认证,要求设备的设计理念符合苹果的要求,不仅可以进行无线蓝牙通信,还可以进行有线通信(

    2023年04月20日
    浏览(51)
  • 基础篇010.1 STM32驱动RC522 RFID模块之一:基础知识

    目录 1. RFID概述 1.1 RFID工作原理 1.2 RFID分类 1.3 RFID模块 1.4 RFID卡片 1.5 IC卡和ID卡介绍 1.6 IC卡和ID的区分 2. Mifare卡结构原理 2.1 Mifare卡概述 2.2 Mifare非接触式 IC 卡性能简介(M1) 2.2.1 Mifare S50与Mifare S70 2.2.2 S50存储结构 2.2.3 M1射频卡工作原理 2.2.4 M1射频卡与读写器的通讯 2.3 MRF52

    2024年02月09日
    浏览(50)
  • 【AWS云从业者基础知识笔记】——模块4:网络

    学习目标: 描述网络的基本概念。 描述公网络和私网的区别。 请使用真实场景解释虚拟专用网关。 用一个真实的场景来解释一个虚拟专用网(VPN)。 描述AWS直接连接的好处。 描述混合部署的好处。 描述IT策略中使用的安全层。 描述客户用于与AWS全球网络交互的服务。 Amazo

    2023年04月13日
    浏览(54)
  • 【AWS云从业者基础知识笔记】——模块3:全球基础设施和可靠性

    学习目标 总结AWS全球基础设施的好处。 描述可用分区的基本概念。 描述亚马逊CloudFront和edge locations的好处。 比较提供AWS服务的不同方法。 要理解AWS的全球基础设施,请考虑咖啡店。如果游行、洪水或停电等事件影响了一个地方,顾客仍然可以去几个街区外的另一个地方买

    2023年04月21日
    浏览(49)
  • 【机器学习】可视化模块-seaborn详细教程

    Seaborn是一个基于Python语言的数据可视化库,它能够创建高度吸引人的可视化图表,是在matplotlib库的基础上,提供了更为简便的API和更为丰富的可视化函数,使得数据分析与可视化变得更加容易。Seaborn的设计哲学是以美学为中心,致力于创建最佳的数据可视化,同时也保持着

    2024年02月13日
    浏览(44)
  • 【基础知识】【模块介绍】8位8段数码管(74HC595)【硬件部分】

    数码管实际上是 多个LED按照一定顺序排列,并加上遮罩所构成的元件。 八段一般会引出9个引脚,其中7个引脚显示数字(或某些字母),1个显示小数点,1个作为片选端。 根据连接方式的不同,数码管分为共阳和共阴。 共阳在这端输出低电平时点亮,高电平时会熄灭,共阴

    2023年04月17日
    浏览(81)
  • FreeRTOS教程1 基础知识

    正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) Keil µVision5 IDE(MDK-Arm) 野火DAP仿真器 了解 FreeRTOS 相关知识, 并熟悉使用 STM32CubeMX 软件配置 FreeRTOS 工程的流程 读者须知 :本系列教程中关于 FreeRTOS 的学习重点为应用,不会剖析源码内容,利用 STM32CubeMX 软件生

    2024年03月11日
    浏览(31)
  • WebGL系列教程:WebGL基础知识

    下面我们来正式学习WebGL开发中的一些基本的概念和知识。 为了在 Web 上创建图形应用程序,HTML5 提供了一组丰富的功能,例如 2D Canvas、WebGL、SVG、3D CSS 转换和 SMIL。要编写 WebGL 应用程序,就需要用到 HTML5 的画布元素。 HTML5 的标签提供了一个简单而强大的选项来实现 JavaSc

    2024年02月14日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包