第二种:Pytest(二)-assert断言详细使用

第二种:Pytest(二)-assert断言详细使用
一.前言1.与Unittest不同Pytest使用的是Python自带的assert关键字来进行断言2.assert关键字后面可以接一个表达式只要表达式的最终结果为True那么断言通过用例执行成功否则用例执行失败二.assert实例1.想在抛出异常之后输出一些提示信息执行之后就方便查看是什么原因# 异常信息deff():return3deftest_function():af()asserta%20,判断 a 为偶数当前 a 的值为%s%a2.执行结果三.常用断言1.Pytest里面断言实际上就是Python里面的assert断言方法常用的有以下几种1.1.assertxx判断xx为真1.2.assertnotxx判断xx不为真1.3.assertainb判断b包含a1.4.assertab判断a等于b1.5.asserta!b判断a不等于b四.异常断言1.可以使用pytest.raises 作为上下文管理器当抛出异常时可以获取到对应的异常实例# 断言异常deftest_zero_division():withpytest.raises(ZeroDivisionError):1/0断言场景断言它抛的异常是不是预期想要的 代码执行1/0预期结果抛的异常是ZeroDivisionError:division by zero 如何断言通常是断言异常的type和 value 值了 具体方式这里1/0的异常类型是 ZeroDivisionError异常的 value 值是 divisionby zero# 详细断言异常deftest_zero_division_long():withpytest.raises(ZeroDivisionError)asexcinfo:1/0# 断言异常类型 typeassertexcinfo.typeZeroDivisionError# 断言异常 value 值assertdivision by zeroinstr(excinfo.value)excinfo 是一个异常信息实例 主要属性.type、.value 、.traceback 注意断言type的时候异常类型是不需要加引号的断言 value值的时候需转str五.拓展一match1.可以将match关键字参数传递给上下文管理器以测试正则表达式与异常的字符串表示形式是否匹配2.注意这种方法只能断言value不能断言type# 自定义消息deftest_zero_division_long():withpytest.raises(ZeroDivisionError,match.*zero.*)asexcinfo:1/03.该match方法的regexp参数与 re.search 函数匹配因此在上面的示例中matchzero也可以使用六.拓展二检查断言装饰器# 断言装饰器pytest.mark.xfail(raisesZeroDivisionError)deftest_f():1/01.执行结果七.总结知识点1.代码抛出异常但是和raises指定的异常类相匹配所以不会断言失败2.它相当于一个检查异常装饰器功能检查是否有异常不确定是否有异常3.withpytest.raise(ZeroDivisionError)对于故意测试异常代码的情况使用可能会更好4.而pytest.mark.xfail(raisesZeroDivisionError)对于检查未修复的错误(即可能会发生异常)使用检查断言可能会更好