python断言asserttest实例_Pytest系列(2) - assert断言详细使用

本文介绍了pytest中assert的使用,包括基本的断言操作,异常断言,以及拓展功能如match和xfail装饰器的使用,帮助理解在Python测试中如何有效地进行断言检查。
摘要由CSDN通过智能技术生成

一、前言

与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' 也可以使用

import pytest

# 自定义消息

def test_zero_division_long():

with pytest.raises(ZeroDivisionError, match=".*zero.*") as excinfo:

1 / 0

# 自定义消息

def test_zero_division_long2():

with pytest.raises(ZeroDivisionError, match="zero") as excinfo:

1 / 0

六 拓展二:检查断言装饰器

# 断言装饰器

@pytest.mark.xfail(raises=ZeroDivisionError)

def test_f():

1 / 0

​执行结果

6.1 知识点

代码抛出异常,但是和raises指定的异常类相匹配,所以不会断言失败

它相当于一个检查异常装饰器,功能:检查是否有异常,不确定是否有异常

with pytest.raise(ZeroDivisionError)对于故意测试异常代码的情况,使用可能会更好

而@pytest.mark.xfail(raises=ZeroDivisionError)对于检查未修复的错误(即,可能会发生异常),使用检查断言可能会更好

pytest是一个非常流行的Python测试框架,它提供了一个强大的断言系统。在pytest中,你可以使用内置的`assert`语句来完成断言操作,它会抛出一个AssertionError异常,当测试失败时。除此之外,pytest还提供了一些专门的断言函数,这些函数可以在断言失败时提供更多的信息。 pytest中常用的断言函数包括: - `assert`语句:最基本的断言方式。 - `assert not`:用来断言表达式为False。 - `assertEqual`:断言两个对象是否相等,等同于`assert a == b`。 - `assertNotEqual`:断言两个对象是否不相等,等同于`assert a != b`。 - `assertTrue`:断言表达式结果为True。 - `assertFalse`:断言表达式结果为False。 - `assertIs`:断言两个对象引用的是同一个对象。 - `assertIsNot`:断言两个对象引用的不是同一个对象。 - `assertIsNone`:断言对象是否为None。 - `assertIsNotNone`:断言对象是否不为None。 - `assertIn`:断言一个对象是否在另一个对象中。 - `assertNotIn`:断言一个对象是否不在另一个对象中。 - `assertIsInstance`:断言一个对象是否是一个类的实例。 - `assertNotIsInstance`:断言一个对象是否不是一个类的实例使用pytest断言时,当测试失败,pytest会打印出详细的失败信息,包括期望值和实际值,这有助于调试程序。 一个简单的pytest断言语句示例: ```python def test_example(): assert 1 == 1 ``` 如果`assert 1 == 1`这条语句为False,测试会失败,并显示相关的错误信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值