初识 pytest 及断言使用

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

五、结束语


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

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

相关推荐

  1. C++概述

    2023-12-09 08:52:01       34 阅读
  2. pytest断言

    2023-12-09 08:52:01       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-09 08:52:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-09 08:52:01       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-09 08:52:01       82 阅读
  4. Python语言-面向对象

    2023-12-09 08:52:01       91 阅读

热门阅读

  1. elasticsearch中LessThen遇到的坑

    2023-12-09 08:52:01       35 阅读
  2. python写数据进es中

    2023-12-09 08:52:01       56 阅读
  3. 代码随想录 62. 不同路径

    2023-12-09 08:52:01       55 阅读
  4. 给鼠标描述符打上注释防止忘记

    2023-12-09 08:52:01       54 阅读
  5. DETR 目标检测

    2023-12-09 08:52:01       50 阅读
  6. c 语言常用的加密算法——MD5

    2023-12-09 08:52:01       57 阅读
  7. UDP群聊

    UDP群聊

    2023-12-09 08:52:01      52 阅读
  8. Jenkins安装

    2023-12-09 08:52:01       75 阅读