Pytest插件pytest-assume多重断言

背景

import pytest

def test_assume1():
assert 1 == 2
print('hello')
assert 2 == 3 if __name__ == '__main__':
pytest.main(['-sv', __file__])
  • 这样的代码运行的时候并不会打印hello
  • 同样后面的assert 2==3也不会去操作
  • 而实际测试的时候我们经常性的会遇到要去多重断言的情况

安装

pip install pytest-assume

pip install git+https://github.com/astraw38/pytest-assume.git

介绍

https://pypi.org/project/pytest-assume/ 不要看,啥都没有

https://github.com/astraw38/pytest-assume github上也就讲了几句

  • A pytest plugin that allows multiple failures per test

用法一、assume

import pytest

def test_assume2():
pytest.assume( 1 == 2 )
print('hello')
pytest.assume( 2 == 3) if __name__ == '__main__':
pytest.main(['-sv', __file__])
  • 输出
demo_assume.py::test_assume2 hello
FAILED
... E demo_assume.py:16: AssumptionFailure
E >> pytest.assume( 1 == 2 )
E AssertionError: assert False
E
E demo_assume.py:18: AssumptionFailure
E >> pytest.assume( 2 == 3)
E AssertionError: assert False
  • 可以看到

    • hello 也输出了
    • assume也断言了第二种

用法二、上下文管理器(推荐)

  • 在用法一种隐含了一个小的瑕疵

    import pytest
    
    def test_assume3():
    a = 1
    b = 2
    pytest.assume( a == b ) if __name__ == '__main__':
    pytest.main(['-sv', __file__])
  • 它的输出是

    E               demo_assume.py:18: AssumptionFailure
    E >> pytest.assume( a == b )
    E AssertionError: assert False
  • 你可以看到,变量的真正的值并没有看到,当然你有很多其他的方法来处理,但能看到显然是更利于你便捷的去定位的

  • 这个时候可以用另外一种做法:上下文管理器

    import pytest
    
    def test_assume4():
    a = 1
    b = 2
    with pytest.assume: assert a==b if __name__ == '__main__':
    pytest.main(['-sv', __file__])
  • 输出

    E       demo_assume.py:18: AssumptionFailure
    E >> with pytest.assume: assert a==b
    E AssertionError: assert 1 == 2
    • 你可以清晰的看到变量的值了
  • 注意,在这种写法中,你要写assert,而第一种写法中你不需要用到assert的


  • 在with的写法中,你可以在一个块中assert多个断言内容,但这样是不推荐的

    import pytest
    
    def test_assume5():
    a = 1
    b = 2
    with pytest.assume:
    assert a==b
    assert 1==2
    assert 3==3 if __name__ == '__main__':
    pytest.main(['-sv', __file__])
  • 输出:最终你就看到了第二个错误的信息,a==b的断言被你忽略掉了

    E           demo_assume.py:21: AssumptionFailure
    E >> assert 3==3
    E AssertionError: assert 1 == 2
  • 你应该这样写

    import pytest
    
    def test_assume6():
    a = 1
    b = 2
    with pytest.assume: assert a == b
    with pytest.assume: assert 1 == 2
    with pytest.assume: assert 3 == 3 if __name__ == '__main__':
    pytest.main(['-sv', __file__])
  • 输出

           with pytest.assume:     assert a == b
    > with pytest.assume: assert 1 == 2
    E pytest_assume.plugin.FailedAssumption:
    E 2 Failed Assumptions:
    E
    E demo_assume.py:18: AssumptionFailure
    E >> with pytest.assume: assert a == b
    E AssertionError: assert 1 == 2
    E
    E demo_assume.py:19: AssumptionFailure
    E >> with pytest.assume: assert 1 == 2
    E AssertionError: assert 1 == 2

Pytest插件pytest-assume多重断言的更多相关文章

  1. pytest自动化7:assert断言

    前言:assert断言就是将实际结果和期望结果做对比,符合预期结果就测试pass,不符合预期就测试failed. 实例1:简单断言 实例1优化版--增加异常信息文字描述 异常断言 excinfo 是一 ...

  2. 3、pytest中文文档--编写断言

    目录 编写断言 使用assert编写断言 编写触发期望异常的断言 特殊数据结构比较时的优化 为失败断言添加自定义的说明 关于断言自省的细节 复写缓存文件 去使能断言自省 编写断言 使用assert编写 ...

  3. Pytest学习(二) - 断言的使用

    一.前言 学习pytest总会习惯性的和unittest对比使用,自然就断言pytest和unittest也是有些区别的. 二.断言对比 unittest 断言 assertEqual(a, b) # ...

  4. Pytest(10)assert断言

    前言 断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了.什么是断言呢? 简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试 failed ...

  5. python + pytest基本使用方法(断言)

    #pytest 的基本用法# 安装: pip install pytest#在当前目录下运行 : 输入 pytest# 1.断言#功能:用于计算a与b相加的和def add(a,b): return ...

  6. 二、为什么要选用pytest以及 pytest与unittest比较

    为什么要选择pytest,我看中的如下: 写case,不需要像unittest那样,创建测试类,继承unittest.TestCase pytest中的fixture(类似于setUp.tearDow ...

  7. pytest 用 @pytest.mark.usefixtures("fixtureName")或@pytest.fixture(scope="function", autouse=True)装饰,实现类似setup和TearDown的功能

    conftest.py import pytest @pytest.fixture(scope="class") def class_auto(): print("&qu ...

  8. pytest 用 @pytest.mark.usefixtures("fixtureName")装饰类,可以让执行每个case前,都执行一遍指定的fixture

    conftest.py import pytest import uuid @pytest.fixture() def declass(): print("declass:"+st ...

  9. pytest配置文件pytest.ini

    说明: pytest.ini是pytest的全局配置文件,一般放在项目的根目录下 是一个固定的文件-pytest.ini 可以改变pytest的运行方式,设置配置信息,读取后按照配置的内容去运行 py ...

  10. jmeter(二十八)利用beanshell进行多重断言

    在接口测试中,我们对返回结果的正确性判断一般是基于响应报文的返回内容进行断言.但有些时候,按照正常的业务逻辑来说,一个请求返回的内容是多种不同的. 比如:用户注册功能,注册成功是正常的返回messag ...

随机推荐

  1. CodeTON Round 3 (Div. 1 + Div. 2, Rated, Prizes!) A-D

    比赛链接 A 题解 知识点:贪心. 注意到 \(a[1] \neq 1\) , \(1\) 永远不可能换到前面:\(a[1] = 1\) 可以交换后面任意元素. 时间复杂度 \(O(n)\) 空间复杂 ...

  2. carbon

    https://blog.csdn.net/wtt945482445/article/details/79385234

  3. 【云原生 · Kubernetes】Kubernetes Node的隔离与恢复

    个人名片: 因为云计算成为了监控工程师‍ 个人博客:念舒_C.ying CSDN主页️:念舒_C.ying Kubernetes Node的隔离与恢复 在硬件升级.硬件维护等情况下,我们需要将某些No ...

  4. 【OpenStack云平台】搭建openstack云平台

    1. 系统镜像 安装运行环境系统要求为CentOS7.5,内核版本不低于3.10. CentOS-7.5-x86_64-DVD-1804.iso Chinaskill_Cloud_iaas.iso 2 ...

  5. 基于python的数学建模---机场航线设计

    数据集 拿走: 链接:https://pan.baidu.com/s/1zH5xhpEmx2_u5qO9W4gCkw 提取码:2wl5 数据集来自航空业,有一些关于航线的基本信息.有某段旅程的起始点和 ...

  6. React Server Component: 混合式渲染

    作者:谢奇璇 React 官方对 Server Comopnent 是这样介绍的: zero-bundle-size React Server Components. 这是一种实验性探索,但相信该探索 ...

  7. 漫谈计算机网络: 运输层 ------ 从UDP ->TCP , 从面向通信->面向用户,三次握手/四次挥手?

    面试答不上?计网很枯燥? 听说你学习 计网 每次记了都会忘? 不妨抽时间和我一起多学学它 深入浅出,用你的空闲时间来探索计算机网络的硬核知识! 博主的上篇连载文章<初识图像处理技术> 图像 ...

  8. 这么简单,还不会使用java8 stream流的map()方法吗?

    一.前言 在日常的开发工作中经常碰到要处理list中数据的问题,比如从数据库中查出了很多学生,由于一些原因需要在内存中找出这些学生中的所有姓名,或者把名为"王五"的语文成绩暂时修改 ...

  9. 2020最新Java面试题及答案(带完整目录).pdf

    一.JVM 二.Java集合 三.Java多线程并发 四.Java基础 五.Spring原理 六.微服务 七.Netty与RPC 八.网络 九.日志 十.RabbitMQ 十一.MongoDB 十二. ...

  10. Linux 系统用户文件缺失造成“bash-4.2$”错误的解决办法

    一.问题出现的原因 造成这个现象的原因是因为用户文件夹下的bash_logout.bash_profile和bashrc这三个隐藏文件缺失 二.问题复现 现在删除这三个文件 此时问题出现了 三.问题解 ...