众所周知,pytest可以利用python自带的assert来进行断言。可是一旦发生Fail情况,整个执行会被终止;有时候,会希望虽然有个别Fail情况,仍然可以继续执行下去。
这个时候就需要利用pytest的插件,在网上微微一搜,发现 pytest-assume
这个插件可以实现上述情况。
pytest-assume 传送门
于是,简单写点脚本,看看怎么用,啥也不用import
上来就用,略有点懵
pytest.assume(resp.status_code==201)
pytest.assume(len(resp.json()['data'])>11)
再来看看它对于Fail的报错提示情况
tp = <class 'pytest_assume.plugin.FailedAssumption'>, value = None, tb = None
def reraise(tp, value, tb=None):
try:
if value is None:
value = tp()
if value.__traceback__ is not tb:
> raise value.with_traceback(tb)
E pytest_assume.plugin.FailedAssumption:
E 2 Failed Assumptions:
E
E test_demo.py:12: AssumptionFailure
E >> pytest.assume(resp.status_code == 201)
E AssertionError: assert False
E
E test_demo.py:23: AssumptionFailure
E >> pytest.assume(len(resp.json()['data']) > 11)
E AssertionError: assert False
..\lib\site-packages\six.py:702: FailedAssumption
虽然达到目的了,也指出了报错的位置以及语句,很有pytest风范,但是更想知道 Fail 时具体是什么值,这样更利于分析问题不是。
不够理想,于是又到处去翻了,谷歌、Stack Overflow、GitHub、pytest官网等。
功夫不负有心,总算找到了另外1个,也是个人比较满意的pytest-check
,传送门
官宣已有详尽使用说明,依据上面的操作,进行对比,先看看使用
import pytest_check as check
check.equal(resp.status_code, 201)
check.greater_equal(len(resp.json()['data']), 11)
再来看看它对于Fail的报错提示情况
FAILURE:
assert 200 == 201
+200
-201
test_demo.py:20 in check_it() -> resp = func(*args, **kwargs)
test_demo.py:11 in check_code() -> check.equal(resp.status_code, 201)
FAILURE:
assert 7 >= 10
test_demo.py:22 in check_it() -> check.greater_equal(len(resp.json()['data']), 10)
------------------------------------------------------------
Failed Checks: 2
Bingo!想要的都有了,这样在html报告里就可以查看了,当然可以加上自己的报错信息啥的就更完美了。
网友评论