pytest学习和使用19-pytest断言失败后,怎样保持后续的断言继续执行?(pytest-assume)

简介: pytest学习和使用19-pytest断言失败后,怎样保持后续的断言继续执行?(pytest-assume)

1 引入

  • pytest使用assert进行断言,如果有多个断言,第一个失败了,那么后续的断言将不会执行;
  • 那么如果第一个断言失败了,还想继续保持执行后边的断言,那如何做?
  • 我们可以使用pytest-assume来解决这个问题,即使用多重断言插件。

2 pytest-assume安装

pip3 install pytest-assume
C:\Users\Administrator>pip3 install pytest-assume
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting pytest-assume
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/e8/5d/ecd54af3d3dc3f69e9cf527449a51bd5ca39cd47aaeab9a74e55603a9ce1/pytest_assume-2.4.3-py3-none-any.whl (6.0 kB)
Requirement already satisfied: pytest>=2.7 in d:\python37\lib\site-packages (from pytest-assume) (6.2.4)
Requirement already satisfied: six in d:\python37\lib\site-packages (from pytest-assume) (1.15.0)
Requirement already satisfied: importlib-metadata>=0.12 in d:\python37\lib\site-packages (from pytest>=2.7->pytest-assume) (2.1.1)
Requirement already satisfied: atomicwrites>=1.0 in d:\python37\lib\site-packages (from pytest>=2.7->pytest-assume) (1.4.0)
Requirement already satisfied: toml in d:\python37\lib\site-packages (from pytest>=2.7->pytest-assume) (0.10.2)
Requirement already satisfied: pluggy<1.0.0a1,>=0.12 in d:\python37\lib\site-packages (from pytest>=2.7->pytest-assume) (0.13.1)
Requirement already satisfied: py>=1.8.2 in d:\python37\lib\site-packages (from pytest>=2.7->pytest-assume) (1.10.0)
Requirement already satisfied: colorama in d:\python37\lib\site-packages (from pytest>=2.7->pytest-assume) (0.4.4)
Requirement already satisfied: iniconfig in d:\python37\lib\site-packages (from pytest>=2.7->pytest-assume) (1.1.1)
Requirement already satisfied: packaging in d:\python37\lib\site-packages (from pytest>=2.7->pytest-assume) (20.8)
Requirement already satisfied: attrs>=19.2.0 in d:\python37\lib\site-packages (from pytest>=2.7->pytest-assume) (20.3.0)
Requirement already satisfied: zipp>=0.5 in d:\python37\lib\site-packages (from importlib-metadata>=0.12->pytest>=2.7->pytest-assume) (1.2.0)
Requirement already satisfied: pyparsing>=2.0.2 in d:\python37\lib\site-packages (from packaging->pytest>=2.7->pytest-assume) (2.4.7)
Installing collected packages: pytest-assume
Successfully installed pytest-assume-2.4.3

3 assert断言

  • 先看pytest自带的assert断言效果:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/3/16 
# 文件名称:test_assume.py
# 作用:pytest-assume插件的使用
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import pytest

def test_case():
    a = 100
    b = 200
    assert a + b < 100
    assert a - b > 0
    assert a * b == 20000
    assert a / b == 200
    assert (b - a) / a == 1


if __name__ == '__main__':
    pytest.main(["-s", "test_assume.py"])
  • 运行结果如下,可以看到第一个断言失败后,后边的断言是无法进行的:
collecting ... collected 1 item

test_assume.py::test_case FAILED                                         [100%]
test_case\test_j\test_assume.py:8 (test_case)
def test_case():
        a = 100
        b = 200
>       assert a + b < 100
E       assert (100 + 200) < 100

test_assume.py:12: AssertionError

断言失败

断言失败


================================== FAILURES ===================================
__________________________________ test_case __________________________________

    def test_case():
        a = 100
        b = 200
>       assert a + b < 100
E       assert (100 + 200) < 100

test_assume.py:12: AssertionError
=========================== short test summary info ===========================
FAILED test_assume.py::test_case - assert (100 + 200) < 100
============================== 1 failed in 0.15s ==============================

4 pytest-assume断言

  • 代码如下:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/3/16 
# 文件名称:test_assume.py
# 作用:pytest-assume插件的使用
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import pytest


# def test_case():
#     a = 100
#     b = 200
#     assert a + b < 100
#     assert a - b > 0
#     assert a * b == 20000
#     assert a / b == 200
#     assert (b - a) / a == 1


def test_case01():
    a = 100
    b = 200
    pytest.assume(a + b < 100)
    pytest.assume(a - b > 0)
    pytest.assume(a * b == 20000)
    pytest.assume(a / b == 200)
    pytest.assume((b - a) / a == 1)
    print("执行到这了~~~~~~~~~~")


if __name__ == '__main__':
    pytest.main(["-s", "test_assume.py"])
  • 执行结果如下,可以看到前边有断言失败的,后边的断言是继续进行的:
test_assume.py::test_case01 FAILED                                       [100%]执行到这了~~~~~~~~~~

test_case\test_j\test_assume.py:21 (test_case01)
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               3 Failed Assumptions:
E               
E               test_assume.py:25: AssumptionFailure
E               >>    pytest.assume(a + b < 100)
E               AssertionError: assert False
E               
E               test_assume.py:26: AssumptionFailure
E               >>    pytest.assume(a - b > 0)
E               AssertionError: assert False
E               
E               test_assume.py:28: AssumptionFailure
E               >>    pytest.assume(a / b == 200)
E               AssertionError: assert False

D:\Python37\lib\site-packages\six.py:702: FailedAssumption

断言失败

断言失败


================================== FAILURES ===================================
_________________________________ test_case01 _________________________________

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               3 Failed Assumptions:
E               
E               test_assume.py:25: AssumptionFailure
E               >>    pytest.assume(a + b < 100)
E               AssertionError: assert False
E               
E               test_assume.py:26: AssumptionFailure
E               >>    pytest.assume(a - b > 0)
E               AssertionError: assert False
E               
E               test_assume.py:28: AssumptionFailure
E               >>    pytest.assume(a / b == 200)
E               AssertionError: assert False

D:\Python37\lib\site-packages\six.py:702: FailedAssumption
---------------------------- Captured stdout call -----------------------------
执行到这了~~~~~~~~~~
=========================== short test summary info ===========================
FAILED test_assume.py::test_case01 - pytest_assume.plugin.FailedAssumption: 
============================== 1 failed in 0.17s ==============================
目录
相关文章
|
XML Java Unix
将JAVA打包生成的可运行jar文件注册成windows服务
将JAVA打包生成的可运行jar文件注册成windows服务
639 0
|
12月前
|
存储 缓存 物联网
MNN推理框架将大模型放进移动端设备,并达到SOTA推理性能!
随着移动端(手机/平板等)算力、内存、磁盘空间的不断增长,在移动端部署大模型逐渐成为可能。在端侧运行大模型,可以有一系列好处:去除网络延迟,加快响应速度;降低算力成本,便于大规模应用;不需数据上传,保护用户稳私。
2080 13
MNN推理框架将大模型放进移动端设备,并达到SOTA推理性能!
|
数据采集 前端开发 测试技术
Selenium中定位元素的9种方法
在Selenium中,定位页面元素是自动化测试和网页爬虫的基础。常用的9种元素定位方法包括:ID、Name、Class Name、Tag Name、CSS Selector、XPath、Link Text、Partial Link Text,以及XPath和CSS选择器的组合使用。每种方法各有优劣,建议根据页面的具体情况和元素的属性选择最合适的方法,并使用显式等待确保元素可用。
1777 5
|
测试技术 持续交付 云计算
提升软件质量的关键路径:高效测试策略与实践
在当今数字化时代,软件已成为企业运营和产品服务的核心。随着软件开发周期的不断缩短和市场需求的迅速变化,确保软件质量成为开发过程中的首要任务。本文将探讨如何通过高效的测试策略和实践来提升软件质量,包括自动化测试、持续集成、代码审查等关键技术和方法。通过对这些技术的应用和整合,软件开发团队可以在竞争激烈的市场环境中保持领先地位,为用户提供高质量的产品和服务。
|
存储 JavaScript 前端开发
深入理解 Git submodules
深入理解 Git submodules
837 0
深入理解 Git submodules
|
安全 网络协议 网络安全
【【安全知识】SSH远程登录方法详解】
SSH(Secure Shell)是一种安全的网络协议,用于远程登录和安全数据传输。在本文中,我们将详细介绍如何使用SSH进行远程登录。
2249 0
|
关系型数据库 MySQL 数据库
使用ZIP包安装MySQL及配置教程
使用ZIP包安装MySQL及配置教程
1575 4
|
Oracle Java 关系型数据库
简单记录在Linux上安装JDK环境的步骤,以及解决运行Java程序时出现Error Could not find or load main class XXX问题
本文记录了在Linux系统上安装JDK环境的步骤,并提供了解决运行Java程序时出现的"Error Could not find or load main class XXX"问题的方案,主要是通过重新配置和刷新JDK环境变量来解决。
978 0
|
消息中间件 关系型数据库 MySQL
[flink 实时流基础] 输出算子(Sink)
[flink 实时流基础] 输出算子(Sink)
842 1
|
安全 关系型数据库 MySQL
MySQL权限管理大揭秘:用户、组、权限解析
MySQL权限管理大揭秘:用户、组、权限解析
1162 0