专栏首页自动化、性能测试Pytest系列(2) - assert断言详细使用

Pytest系列(2) - assert断言详细使用

如果你还想从头学起Pytest,可以看看这个系列的文章哦!

https://www.cnblogs.com/poloyy/category/1690628.html

前言

  • 与unittest不同,pytest使用的是python自带的assert关键字来进行断言
  • assert关键字后面可以接一个表达式,只要表达式的最终结果为True,那么断言通过,用例执行成功,否则用例执行失败

assert小栗子

想在抛出异常之后输出一些提示信息,执行之后就方便查看是什么原因了

# 异常信息
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

    # 断言异常类型 type
    assert 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)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Pytest系列(11)- 失败重跑插件pytest-rerunfailures的详细使用

    https://www.cnblogs.com/poloyy/category/1690628.html

    小菠萝测试笔记
  • Pytest系列(18)- 超美测试报告插件之allure-pytest的基础使用

    https://www.cnblogs.com/poloyy/category/1690628.html

    小菠萝测试笔记
  • Pytest系列(1) - 快速入门和基础讲解

    https://www.cnblogs.com/poloyy/category/1690628.html

    小菠萝测试笔记
  • Pytest之断言

    在上一篇Pytest系列文章:Pytest之收集用例及命令行参数,主要介绍Pytest用例收集规则及常用的命令行参数。

    ITester软件测试小栈
  • 不会做产品经理的CEO,不是好的数据科学家 | 数据科学50人·柳超

    如今,我们每个人都在谈论“数据科学”,哈佛商业评论杂志甚至将数据科学家定义为“21世纪最性感的职业”。在这个大数据时代,究竟什么是数据科学?数据科学领域的科学家...

    DT数据侠
  • 前端黑科技:美团网页首帧优化实践

    本文根据美团资深研发工程师寒阳在美团技术沙龙第40期《前端遇上黑科技,打造全新界面体验与效率》的演讲内容整理而成。本文介绍了如何使用构建时预渲染技术,对移动端首...

    美团技术团队
  • WAS 8.5在AIX上无法启动图形化概要管理工具WCT或PMT之解 博客分类: IBM WebSphere Java IBM WebSp

    问题描述:WAS 8.5在AIX上因缺少相应的组件包,而无法启动图形化概要管理工具WCT或PMT

    阿敏总司令
  • 基于pytest集成selenium

    基于pytest集成selenium 什么是pytest pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点 : 简单灵活,容易上手 ...

    苦叶子
  • 天眼查柳超:不会做产品经理的CEO,不是好的科学家

    如今,当各大媒体的封面报道都充斥着大数据、人工智能、深度学习这些时髦的热词时,他却告诉你,科技创业根本不在于这些科学界的舶来词。真正闪着金光的,不是云山雾绕的概...

    DT数据侠
  • 聊聊spring cloud eureka的instanceEnabledOnit属性

    本文主要研究下spring cloud eureka的instanceEnabledOnit属性

    codecraft

扫码关注云+社区

领取腾讯云代金券