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. 抠网页标题栏logo(图标)

    1.打开自己需要抠的网页,例如百度页面 2.在这个网页链接后面+" /favicon.ico " 就可以提取ico图片 3.回车进去,右键鼠标,选择另存为图片就可以成功保存网页中的 ...

  2. 基于 Sealos 的镜像构建能力,快速部署自定义 k8s 集群

    Sealos 是一个快速构建高可用 k8s 集群的命令行工具,该工具部署时会在第一个 k8s master 节点部署 registry 服务(sealos.hub),该域名通过 hosts 解析到第一 ...

  3. RabbitMQ 常见问题

    RabbitMQ 常见问题 昔我往矣,杨柳依依.今我来思,雨雪霏霏. 1.什么是RabbitMQ?  RabbitMQ是一款开源的.Erlang编写的消息中间件:最大的特点就是消费并不需要确保提供方存 ...

  4. 配置MSTP功能示例

    组网需求 在一个复杂的网络中,网络规划者由于冗余备份的需要,一般都倾向于在设备之间部署多条物理链路,其中一条作主用链路,其他链路作备份.这样就难免会形成环形网络,若网络中存在环路,可能会引起广播风暴和 ...

  5. javaSE--核心之一:IO流

    Java IO流框架结构: IO的主要内容包括输入.输出两种IO流,这两种流中又分为字节流和字符流,字节流是以字节为单位来处理输入.输出流,而字符流是以字符为单位来处理输入.输出流. InputStr ...

  6. 【消息队列面试】11-14:kafka高可靠、高吞吐量、消息丢失、消费模式

    十一.kafka消息高可靠的解决方案 1.高可靠=避免消息丢失 解决消息丢失的问题 2.如何解决 (1)保证消息发送是可靠的(发成功了/落到partition) a.ack参数 发送端,采用ack机制 ...

  7. USB口3A限流保护芯片。带短路保护

    一般说明 PW1503是超低RDS(ON)开关,具有可编程的电流限制,以保护电源源于过电流和短路情况.它具有超温保护以及反向闭锁功能. PW1503采用薄型(1毫米)5针薄型SOT封装,提供可调版本. ...

  8. Backbone 网络-ResNet v2 详解

    目录 目录 目录 前言 摘要 1.介绍 2.深度残差网络的分析 3.On the Importance of Identity Skip Connection 4.On the Usage of Ac ...

  9. 介绍一款高性能分布式MQTT Broker(带web)

    SMQTTX介绍 SMQTTX是基于SMQTT的一次重大技术升级,基于Java开发的分布式MQTT集群,是一款高性能,高吞吐量,并且可以完成二次开发的优秀的开源MQTT broker,主要采用技术栈: ...

  10. RocketMQ 在网易云音乐的实践

    本文作者:蒋星韬,网易云音乐服务端开发工程师. 云音乐线上场景众多,比如直播.评论.广告,各个业务线都会有消息场景比如发奖券,也会有延迟消息和事务消息场景,以及大数据做埋点数据.数据清洗.离线处理等. ...