初识 pytest 及断言使用

章节目录:

    • 一、pytest 相关概述
    • 二、环境搭建
    • 三、使用前提
    • 四、断言
      • 4.1 常用断言
      • 4.2 异常断言
      • 4.3 断言装饰器
    • 五、结束语

一、pytest 相关概述

pytest 是一个基于 Python 编写的测试框架,用于编写和运行各种类型的软件测试。它提供了丰富的功能和灵活的语法,用于组织、执行和报告测试结果。它具有以下优点:

  • 简单易用:pytest 的语法简洁明了,学习曲线相对较低,不需要太多的配置和编写代码就可以开始编写测试用例。
  • 自动化和自动发现:pytest 能够自动发现和收集测试用例,无需手动编写测试套件。它根据约定的命名规则在你的代码中自动找到测试函数或方法。
  • 多样化的断言库:pytest 支持多种断言库,如 assert 语句、unittest 库的断言方法、第三方库如pytest_assert等。这使得编写和阅读断言变得更加直观和灵活。
  • 丰富的插件生态系统:pytest 有一个庞大的插件生态系统,可以扩展它的功能。这些插件可以帮助你进行性能测试、代码覆盖率分析、多线程测试等,使测试过程更加高效和全面。
  • 并行执行测试用例:pytest 支持并行执行测试用例,可以加快测试的速度,提高测试效率。
  • 集成于开发环境:pytest 可以与常见的开发环境集成,如 PyCharm、VSCode 等,提供了便捷的测试运行和调试功能。

二、环境搭建

  • 解释器:python 3.x
  • IDE:pycharm
  • 通过IDE 安装 pytest:

  • 设置默认运行:

三、使用前提

在使用 pytest 编写测试用例时,按照一定的规则可以确保测试用例被正确识别和执行。

  • 文件名test_*.py 文件和 *_test.py。
  • :以 Test 开头,不能包含 __init__(self) 方法。
  • 函数:以 test_ 开头。
  • 所有的包 package 必须要有 __init__.py 文件。

四、断言

在 pytest 中,使用 assert 来定义断言。assert 语句接受一个条件表达式作为参数,如果条件为假,则断言失败,pytest 会将其报告为一条测试失败的消息。

4.1 常用断言

  • assert xx :判断 xx 为真

  • assert not xx :判断 xx 不为真

  • assert a in b :判断 b 包含 a

  • assert a == b :判断 a 等于 b

  • assert a != b :判断 a 不等于 b

  • 代码示例

num = 11
assert num % 2 == 0, "当前值 %s 不是偶数。" % num
# AssertionError: 当前值 11 不是偶数。

4.2 异常断言

可以使用 pytest.raises() 作为上下文管理器,当抛出异常时可以获取到对应的异常实例。

  • 代码示例
import pytest


def test_function_pass():
    with pytest.raises(ZeroDivisionError) as e:
        # 捕获到对应异常则通过。
        i = 3 / 0
        # PASSED


def test_function_failed():
    with pytest.raises(ZeroDivisionError) as e:
        # 没有捕获到对应异常则失败。
        i = 3 / 1
        # Failed: DID NOT RAISE <class 'ZeroDivisionError'>

  • 可以将 match 关键字参数传递给上下文管理器,以测试正则表达式与异常的字符串表示形式是否匹配
import pytest


def test_function():
    with pytest.raises(ZeroDivisionError, match=".*zero") as e:
        # 是对应的异常类型 且 异常的 value 和 match 正则匹配上,则通过。
        i = 3 / 0
        # PASSED

  • 提示:使用 match 只能断言 value,不能断言 type。

4.3 断言装饰器

@pytest.mark.xfail(raises=Exception)

  • 代码示例
import pytest


# 和 raises 指定的异常类相匹配 -> case ignored。
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_function():
    i = 3 / 0
    # E       ZeroDivisionError: division by zero

  • pytest.raises() 对于故意测试异常代码的情况,使用可能会更好。
  • @pytest.mark.xfail(raises=Exception) 对于检查未知的错误会更好。

五、结束语


“-------怕什么真理无穷,进一寸有一寸的欢喜。”

微信公众号搜索:饺子泡牛奶

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/230510.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CleanMyMac2024一款十分高效的mac系统清理工具

当很多人还在为电脑运行缓慢、工作问题不能快速得到解决而烦恼的时候&#xff0c;我已经使用过了多款系统清理工具&#xff0c;并找到了最适合我的那一款。我的电脑是超耐用的Mac book&#xff0c;接下来给大家介绍三种在众多苹果电脑清理软件的排名较高的软件。 一、Maintena…

JUnit 之初体验

文章目录 1.定义2.引入1&#xff09;使用 Maven 工具2&#xff09;使用 Gradle 工具3&#xff09;使用 Jar 包 2.样例0&#xff09;前提1&#xff09;测试类2&#xff09;测试方法3&#xff09;测试断言4&#xff09;实施 总结 1.定义 JUnit 是一个流行的 Java 单元测试框架&a…

NLP项目实战01之电影评论分类

介绍&#xff1a; 欢迎来到本篇文章&#xff01;在这里&#xff0c;我们将探讨一个常见而重要的自然语言处理任务——文本分类。具体而言&#xff0c;我们将关注情感分析任务&#xff0c;即通过分析电影评论的情感来判断评论是正面的、负面的。 展示&#xff1a; 训练展示如下…

【深度学习】一维数组的 K-Means 聚类算法理解

刚看了这个算法&#xff0c;理解如下&#xff0c;放在这里&#xff0c;备忘&#xff0c;如有错误的地方&#xff0c;请指出&#xff0c;谢谢 需要做聚类的数组我们称之为【源数组】 需要一个分组个数K变量来标记需要分多少个组&#xff0c;这个数组我们称之为【聚类中心数组】…

Kafka快速实战以及基本原理详解

文章目录 一、Kafka介绍为什么要用Kafka 二、Kafka快速上手实验环境单机服务体验 三、理解Kakfa的消息传递机制四、Kafka集群服务五、理解服务端的Topic、Partition和Broker七、Kafka集群的整体结构八、Kraft集群Kraft集群简介配置Kraft集群 一、Kafka介绍 ChatGPT对于Apache …

人体关键点检测1:人体姿势估计数据集

人体关键点检测1&#xff1a;人体姿势估计数据集 目录 人体关键点检测1&#xff1a;人体姿势估计数据集 1.人体姿态估计 2.人体姿势估计数据集 &#xff08;1&#xff09;COCO数据集 &#xff08;2&#xff09;MPII数据集 &#xff08;3&#xff09;Human3.6M &#xf…

CENTOS 7 添加黑名单禁止IP访问服务器

一、通过 firewall 添加单个黑名单 只需要把ip添加到 /etc/hosts.deny 文件即可&#xff0c;格式 sshd:$IP:deny vim /etc/hosts.deny# 禁止访问sshd:*.*.*.*:deny# 允许的访问sshd:.*.*.*:allowsshd:.*.*.*:allow 二、多次失败登录即封掉IP&#xff0c;防止暴力破解的脚本…

【解决办法】Pycharm中新添加或者导入项目文件名红色!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、问题描述二、问题原因三、解决办法 一、问题描述 Pycharm的代码中添加新的文件夹&#xff0c;发现文件夹下的文件名是红色的&#xff0c;如下图&#xff1a; …

视频推拉流直播点播EasyDSS平台点播文件加密存储的实现方法

视频推拉流直播点播系统EasyDSS平台&#xff0c;可提供流畅的视频直播、点播、视频推拉流、转码、管理、分发、录像、检索、时移回看等功能&#xff0c;可兼容多操作系统&#xff0c;还能支持CDN转推&#xff0c;具备较强的可拓展性与灵活性&#xff0c;在直播点播领域具有广泛…

设计模式基础——概述(1/2)

目录 一、设计模式的定义 二、设计模式的三大类别 三、设计模式的原则 四、主要设计模式目录 4.1 创建型模式&#xff08;Creational Patterns&#xff09; 4.2 结构型模式&#xff08;Structural Patterns&#xff09; 4.3 行为型模式&#xff08;Behavioral Patterns&…

5.10 Windows驱动开发:摘除InlineHook内核钩子

在笔者上一篇文章《内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩&#xff0c;对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能&#xff0c;此类功能的实现一般可在应用层进行&#xff0c;而驱动层只需要保留一个读写字节的函数即可…

Numpy数组的重塑,转置与切片 (第6讲)

Numpy数组的重塑,转置与切片 (第6讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

如何将腾讯混元大模型AI接入自己的项目里(中国版本ChatGPT)

如何将腾讯混元大模型AI接入自己的项目里 一、腾讯混元大模型API二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、腾讯混元大模型API 基于腾讯混元大模型AI的智能文本对话AI机器人…

uniapp 数组添加不重复元素

一、效果图 二、代码 //点击事件rightBtn(sub, index) {console.log(sub, index)//uniapp 数组添加不重复元素if (this.selectList.includes(sub.type)) {this.selectList this.selectList.filter((item) > {return item ! sub.type;});} else {this.selectList.push(sub.t…

长城之上的无人机:文化遗产的守护者

长城之上的无人机&#xff1a;文化遗产的守护者 在八达岭长城景区&#xff0c;两架无人机分别部署在了长城的南、北楼两点。根据当前的保护焦点和需求&#xff0c;制定了5条无人机综合巡查航线&#xff0c;以确保长城景区的所有开放区域都能得到有效监管。每天&#xff0c;无人…

【ITK库学习】使用itk库进行图像滤波ImageFilter:二阶微分

目录 1、itkRecursiveGaussianImageFliter 递归高斯滤波器2、itkLapacianRecursiveGaussianImageFiter 拉普拉斯高斯滤波器 1、itkRecursiveGaussianImageFliter 递归高斯滤波器 该类用于计算具有高斯核近似值的 IIR 卷积的基类。 该类是递归滤波器的基类&#xff0c;它与高斯…

MyBatis `saveBatch` 性能调优详解

文章目录 1. 引言2. MyBatis saveBatch 简介3. 常见性能问题3.1 SQL 语句拼接3.2 参数传递3.3 数据库连接数 4. MyBatis saveBatch 性能调优4.1 使用批量插入语句4.1.1 代码示例 4.2 使用MyBatis的foreach标签4.2.1 代码示例 4.3 使用VALUES构造器4.3.1 代码示例 4.4 调整批量大…

linux下部署frp客户端服务端-内网穿透

简介 部署在公司内部局域网虚拟机上的服务需要在外网能够访问到&#xff0c;这不就是内网穿透的需求吗&#xff0c;之前通过路由器实现过&#xff0c;现在公司这块路由器不具备这个功能了&#xff0c;目前市面上一些主流的内网穿透工具有&#xff1a;Ngrok&#xff0c;Natapp&…

【WPF.NET开发】WPF中的对话框

目录 1、消息框 2、通用对话框 3、自定义对话框 实现对话框 4、打开对话框的 UI 元素 4.1 菜单项 4.2 按钮 5、返回结果 5.1 模式对话框 5.2 处理响应 5.3 非模式对话框 Windows Presentation Foundation (WPF) 为你提供了自行设计对话框的方法。 对话框是窗口&…

HarmonyOS(鸿蒙操作系统)与Android系统 各自特点 架构对比 各自优势

综合对比 HarmonyOS&#xff08;鸿蒙操作系统&#xff09;是由华为开发的操作系统&#xff0c;旨在跨多种设备和平台使用。HarmonyOS的架构与谷歌开发的广泛使用的Android操作系统有显著不同。以下是两者之间的一些主要比较点&#xff1a; 设计理念和使用案例&#xff1a; Harm…