pytest-assert断言

本文介绍了pytest框架中使用assert进行断言的方法,包括基本断言、常用表达式以及异常断言的使用。通过示例展示了如何判断条件、检查包含关系以及异常类型的匹配,帮助理解pytest中的断言机制。

断言

pytest使用python自带的assert关键字来进行断言

在python中,断言语句assert后面跟任何合法的表达式,assert语句做出一个判断,如果结果为true,则该语句不做任何事情,如果结果为false,assert语句会抛出异常AssertionError,在assert语句后加上解释性语句,用来解释某种异常发生的原因,当出现某种异常时,解释性语句作为异常抛出。

例如:

def test_one():
        x = "hello"
        assert "m"in x,"判断x中是否包含m"

运行结果

Launching pytest with arguments test_01.py::test_one --no-header --no-summary -q in C:\Users\zhangman11\PycharmProjects\pythonProject3

============================= test session starts =============================
collecting ... collected 1 item

test_01.py::test_one FAILED                                              [100%]
test_01.py:2 (test_one)
def test_one():
            x = "hello"
>           assert "m"in x,"判断x中是否包含m"
E           AssertionError: 判断x中是否包含m
E           assert 'm' in 'hello'

test_01.py:5: AssertionError


============================== 1 failed in 0.14s ==============================

Process finished with exit code 1

上面的程序中,在测试函数中使用assert判断x中是否包含字母m,因m不包含在x中,所以会报AssertionError错误,导致用例执行失败

常用断言

1.assert 表达式 :判断条件为真

2.assert not 表达式 :判断表达式不为真

3.assert a in b :判断包含a

4.assert a == b:判断a等于b

5.assert a != b :判断a不等于b

异常断言

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

例如

import pytest

def test_one():
        with pytest.raises(NameError) as f:
                a = b
        assert f.type == NameError
        assert "name 'b' is not defined"in str(f.value)

执行结果

Launching pytest with arguments test_01.py::test_one --no-header --no-summary -q in C:\Users\zhangman11\PycharmProjects\pythonProject3

============================= test session starts =============================
collecting ... collected 1 item

test_01.py::test_one PASSED                                              [100%]

============================== 1 passed in 0.02s ==============================

Process finished with exit code 0

断言场景:判断执行a = b的结果是不是预期的NameError,执行a = b后抛出NameError异常,与预期一致,所以用例测试通过

断言时通常断言异常的type和value,此例中,由于b未定义,所以会引发NameError,该异常的type为NameError,值的类型为 name 'b' is not defined

f是一个异常类的实例,主要熟悉包括type,value,traceback

断言type时,异常类型不需要加引号,断言value值时需要转为str

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值