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

【测试框架篇】单元测试框架pytest(4):assert断言详解

一、前言

用例三要素之一就是对预期结果的断言。

何为断言?简单来说就是实际结果和期望结果去对比,符合预期就测试pass,不符合预期那就测试 failed。断言内容就是你要的预期结果。断言包含对接口响应内容做断言、也包含对落DB的数据做断言。

pytest可以让开发者使用Python断言来验证测试中的期望值。

话不多说,我们来举个小例子熟悉一下,一般我们会在抛出异常之后输出一些提示信息,执行之后就方便查看是什么原因了。

# 异常信息
def f():return 3
def test_function():a = f()assert a % 2 == 0, "判断 a 为偶数,当前 a 的值为:%s" % a

执行结果

二、常用断言

pytest 里面断言实际上就是 python 里面的 assert 断言方法,常用的有以下几种

  • assert xx :判断 xx 为真
  • assert not xx :判断 xx 不为真
  • assert a in b :判断 b 包含 a
  • assert a == b :判断 a 等于 b
  • assert a != b :判断 a 不等于 b

三、异常断言

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

# 断言异常
def test_zero_division():with pytest.raises(ZeroDivisionError):1 / 0

断言场景:断言它抛的异常是不是预期想要的

代码执行:1/0

预期结果:抛的异常是ZeroDivisionError: division by zero

如何断言:通常是断言异常的 type 和 value 值了

具体方式:这里 1/0 的异常类型是 ZeroDivisionError,异常的 value 值是 divisionby zero

#详细断言异常
def test_zero_division_long():with pytest.raises(ZeroDivisionError) as excinfo:1 / 0# 断言异常类型 typeassert excinfo.type == ZeroDivisionError# 断言异常 value 值assert "division by zero" in str(excinfo.value)

excinfo :是一个异常信息实例

主要属性: .type 、  .value 、 .traceback 

注意:断言 type 的时候,异常类型是不需要加引号的,断言 value值的时候需转 str

拓展一:match

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

注意:这种方法只能断言value,不能断言type

# 自定义消息
def test_zero_division_long():with pytest.raises(ZeroDivisionError, match=".*zero.*") as excinfo:1 / 0

该 match 方法的regexp参数与 re.search  函数匹配,因此在上面的示例中 match='zero' 也可以使用

拓展二:检查断言装饰器

# 断言装饰器
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_f():1 / 0

执行结果

知识点

  • 代码抛出异常,但是和raises指定的异常类相匹配,所以不会断言失败
  • 它相当于一个检查异常装饰器,功能:检查是否有异常,不确定是否有异常
  • with pytest.raise(ZeroDivisionError)  对于故意测试异常代码的情况,使用可能会更好
  • 而@pytest.mark.xfail(raises=ZeroDivisionError) 对于检查未修复的错误(即,可能会发生异常),使用检查断言可能会更好


http://www.mrgr.cn/news/93884.html

相关文章:

  • 【Linux内核系列】:深入理解缓冲区
  • 《平面几何强化训练题集》第2章5到9题
  • [GHCTF 2025]SQL??? 【sqlite注入】
  • uniapp+Vue3 开发小程序的下载文件功能
  • 选择排序算法OpenMP并行优化
  • 从新手到专家:嵌入式代码空间优化技巧
  • 【组件安装】Rocky 8.10 安装Local License Server 25.03.0 for Linux
  • C/C++中使用CopyFile、CopyFileEx原理、用法、区别及分别在哪些场景使用
  • 从零构建逻辑回归: sklearn 与自定义实现对比
  • [数据结构]并查集--C++版本的实现代码
  • sparkTTS window 安装
  • 数据集构建与训练前准备
  • OpenHarmony5.0分布式系统源码实现分析—软总线
  • C++蓝桥杯皮亚诺曲线距离求解
  • Cline使用MCP-TypeScript版本
  • MCP-代码解读TypeScript版本
  • 尚硅谷TS快速入门笔记(个人笔记用)
  • 通义万相2.1技术深度解析
  • 【面试】框架
  • 6-langchang多模态输入和自定义输出