前言

  1. pytest中可以用pythonassert断言,也可以写多个断言,但一个失败,后面的断言将不再执行 这样使用起来不是很方便。<br /> <br /> 例如:
  2. 断言1:断言响应的http的状态<br /> <br /> 断言2:断言响应返回的code
  3. 断言3:断言响应返回的json中的data字段是否符合预期。

如果使用原生python的assert,就会遇到一个断言失败则全部失败的情况。比如说,断言1结果为Failed,那么断言2和断言3都不会被执行。

我们希望断言2和断言3继续执行,这样我们能获取更多的断言结果来判断出接口哪里出了问题,能够更好地进行问题定位,这时候该本文主角出现了:pytest-assume插件

1. 插件安装

安装命令: pip install pytest-assume

检查是否安装成功: pip show pytest-assume
image.png

2. 插件使用

例子 8-1

代码:

# -*- coding:utf-8 -*-
# Author: tang_ren_li
# 2021-1-26 10:45

import pytest
class Test_mul_assume():

      def test_mul_assume(self):

          print("对测试阶段1进行断言!")
          pytest.assume(1>2) # 这里使用方式和 python 自带的 assume 有点区别

          print("对测试阶段2进行断言!")
          pytest.assume(1>3)

          print("对测试阶段3进行断言!")
          pytest.assume(4>3)


执行结果:

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

Test_Mutl_Assume.py::Test_mul_assume::test_mul_assume FAILED 【100%】

对测试阶段1进行断言!
对测试阶段2进行断言!
对测试阶段3进行断言!

Test_Mutl_Assume.py:6 (Test_mul_assume.test_mul_assume)
tp = , value = None, tb = None

def reraise(tp, value, tb=None):<br />        try:<br />            if value is None:<br />                value = tp()<br />            if value.__traceback__ is not tb:<br />>               raise value.with_traceback(tb)<br />E               pytest_assume.plugin.FailedAssumption: <br />E               2 Failed Assumptions:<br />E               <br />E               Test_Mutl_Assume.py:10: AssumptionFailure<br />E               >>    pytest.assume(1>2) # 这里使用方式和 python 自带的 assume 有点区别<br />E               AssertionError: assert False<br />E               <br />E               Test_Mutl_Assume.py:13: AssumptionFailure<br />E               >>    pytest.assume(1>3)<br />E               AssertionError: assert False

说明:

  1. Python assert 和Pytest.assume 断言对比

image.png

  1. 一个可以允许pytest测试用例中执行多个失败的断言的插件(即上面断言1,断言2,断言3都失败的情况下,三个断言都能被执行)。该插件源自pytest-expect,并且做了一部分小的修改, 可以全局直接使用,无需指定fixtrue装饰器。

[

](https://blog.csdn.net/ccgshigao/article/details/113102627)