pytest中断言的用法

  • 与unittest不同,pytest使用的是python自带的assert关键字来进行断言

  • assert关键字后面可以接一个表达式,只要表达式的最终结果为True,那么断言通过,用例执行成功,否则用例执行失败

举例

# 异常信息
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用作上下文管理器。
通常我们要断言它抛的异常是不是预期的,比如执行:1/0,预期结果是抛异常:ZeroDivisionError: division by zero,那我们要断言这个异常。通常是断言异常的type和value的值。这里1/0的异常类型是ZeroDivisionError,异常的value值是"integer division or modulo by zero"。

def test_zero_division():
        assert 1/0

在这里插入图片描述

使用断言处理
1,直接用pytest.raises()处理异常,直接断言,不添加assert语句,用例直接通过

def test_zero_division2():
    with pytest.raises(ZeroDivisionError):
        1 / 0

在这里插入图片描述

2,将异常信息存储到一个变量中,变量的类型则为异常类,包含异常的type、value和traceback等信息excinfo是一个ExceptionInfo实例,是实际引发的异常的包装。

def test_zero_division():
    with pytest.raises(ZeroDivisionError,message="捕获异常") as exinfo:
        1/0
    assert exinfo.type == ZeroDivisionError
    assert str(exinfo.value) == "division by zero"

可以看出来,这个测试用例,捕获到特定的一场,用例通过
需要注意:断言type的时候,不需要给异常类型添加引号。需要把value的值转换成str类型的才可以比较,而且值是要加引号的。

但是当没有捕获到想要的一场,用例执行失败,raises里面的message关键字参数消息指定自定义失败消息
3.可以将match关键字参数传递给上下文管理器,以测试正则表达式与异常的字符串表示形式是否匹配,在用例中定义抛出的异常信息是否与预期的异常信息匹配,若不匹配则用例执行失败

def test_zero_division():
    with pytest.raises(ZeroDivisionError,match='division_test') as exinfo:
        1/0
    assert exinfo.type == ZeroDivisionError

在这里插入图片描述

def test_zero_division():
    with pytest.raises(ZeroDivisionError,match='division by') as exinfo:
        1/0
    assert exinfo.type == ZeroDivisionError

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值