【pytest】多重断言(软断言)-assume插件用法

1,078 阅读2分钟

一.assert(硬断言)

当我们刚开始接触pytest的时候,需要用到断言时,会最先使用assert这个方法,对用例的结果进行验证,经常会适用一些场景,比如下面几种情况:

断言1:断言响应的http的状态

断言2:断言响应返回的code值

断言3:断言响应返回的json中的data字段是否符合预期

但是在实际的使用中,我们不可能在测试用例中,只设置1个断言,往往会在测试用例中,设置多个断言点来佐证测试返回的预期结果,但是执行的时候,遇到一个断言失败,则后续的断言将不会被执行了。 比如说,断言1结果为Failed,那么断言2和断言3都将不会被执行了,比如下面这个例子:

def test_01():
    assert 1 > 2
    print('第1条断言已执行')
    assert 3 < 11
    print('第2条断言已执行')
    assert 1 == 1
    print('第3条断言已执行')

这3条断言,当第1条断言执行失败的时候,第2条和第3条的断言将不会被执行了,理论上第一个print不会被打印,那我们实际运行下这段代码,看预期结果如何: image.png

和预期相符,因为第一条断言因为失败了,只显示了报错信息,下面的代码都未被执行(3个print都未正常打印),所以assert虽然是我们接触到的pytest的初始断言方法,但是并不能满足我们实际的一个使用场景,那么此时我们可以借助一款插件:pytest_assume

二.pytest_assume(软断言)

1.安装:

pip3 install pytest-assume -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

安装好后,导入模块:

from pytest_assume.plugin import assume

然后我们对上面的代码进行改造,这里使用上下文管理器(with)进行修改,这样的好处是不用特意去try和finally捕获异常,建议使用这种写法,简洁有效,格式为:

with assume:原assert断言

image.png

下面是执行的结果,除了第1个断言失败的报错信息以外,后面的代码都被执行了(print打印) image.png

这样当脚本运行断言失败后,就不会停止运行,后面代码将会被执行