美文网首页
Pytest 折腾-断言篇

Pytest 折腾-断言篇

作者: skynothing | 来源:发表于2020-04-02 11:15 被阅读0次

众所周知,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报告里就可以查看了,当然可以加上自己的报错信息啥的就更完美了。

相关文章

网友评论

      本文标题:Pytest 折腾-断言篇

      本文链接:https://www.haomeiwen.com/subject/dbgtphtx.html