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

初识 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) 对于检查未知的错误会更好。

五、结束语


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

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


http://www.kler.cn/news/163194.html

相关文章:

  • 风控反欺诈安全学习路标
  • JumpServer初探
  • nodejs流
  • 异常检测 | MATLAB实现BiLSTM(双向长短期记忆神经网络)数据异常检测
  • 使用消息队列遇到的问题—kafka
  • ubuntu 系统部署 Stable Video Diffusion
  • 理解基于 Hadoop 生态的大数据技术架构
  • html css title 属性最长字节 1024
  • B : DS静态查找之折半查找
  • MPEG4Extractor
  • C++STL的string(超详解)
  • Django回顾【六 】
  • 解决HTTP错误500.19 - internal server error -内部服务器错误的终极指南
  • TCP Keepalive 和 HTTP Keep-Aliv
  • ros2/ros安装ros-dep||rosdep init错误
  • 贝锐花生壳3大安全能力,保障网络服务安全远程连接
  • 通信协议 远程调用RPC
  • eve-ng山石网科HillStone镜像部署
  • HarmonyOS开发(九):数据管理
  • 【已解决】SpringBoot Maven 打包失败:class lombok.javac.apt.LombokProcessor 错误
  • 【ARMv8 SIMD和浮点指令编程】浮点数据转换指令——数据类型互转必备
  • 【精选】设计模式——工厂设计模式
  • 反向传播算法
  • 分析阿里巴巴的微服务依赖图和性能
  • 生产上线需要注意的安全漏洞
  • 【优选算法系列】【专题二滑动窗口】第四节.30. 串联所有单词的子串和76. 最小覆盖子串
  • 详解Keras3.0 Models API: Model class
  • Linux gtest单元测试
  • 基于Java医院挂号管理系统
  • sql2005日志文件过大如何清理