首页 > 其他分享 >Pytest插件pytest-assume多重断言

Pytest插件pytest-assume多重断言

时间:2022-12-26 10:35:06浏览次数:72  
标签:__ 插件 assume py assert pytest main

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
    

标签:__,插件,assume,py,assert,pytest,main
From: https://www.cnblogs.com/wuxianfeng023/p/17005150.html

相关文章

  • 插件丨PR/AE/FCPX视频磨皮神器Beauty Box超强一键磨皮
    DigitalAnarchy比较出众的一款视频磨皮美白降噪插件支持系统:windows、Mac软件版本:PR/AE:CS6—2023DavinciResolve达芬奇11以上FCPX10.1.2或者更高版本插件语言:WIN汉......
  • 移动端动画播放插件 lottie-player
    Lottie是一个适用于Web和iOS的移动库,它可以解析使用Bodymovin导出为JSON文本格式的AdobeAfterEffects动画,并在移动设备上以本机方式进行渲染。因此设计人员可以在任......
  • geoserver的GSR插件使用介绍
    背景    GeoServer是一款很好用的开源GIS服务软件,而ArcGISJSAPI是一款不错的webgis框架,通常ArcGISJSAPI要搭配ArcGISServer来使用,而ArcGISServer售价往往过高。......
  • 14款web前端常用的富文本编辑器插件
    富文本编辑器是一种可内嵌于浏览器,所见即所得的文本编辑器。它提供类似于OfficeWord的编辑功能,方便那些不太懂html用户使用,富文本编辑器的应用非常广泛,它的历史与图文网页......
  • 【接口自动化测试实战】【一】Pytest 框架用例规范与运行
    一、生成随机时间importtimeprint(time.time())#floatprint(int(time.time()))print('test_%s'%int(time.time()))print('test_{}'.format(int(time.time())))print(......
  • neovim 插件管理
    起因是使用了很久vscode的插件,但是在前几天看到了一个neovim(以下简称nvim)的视频。就看自己的vscode不是很顺眼,感觉界面不够简洁,所以尝试使用nvim。这期间尝试了别人的配......
  • Python - pytest:
    快速入门 pytest是Python的单元测试框架,同自带的unittest框架类似,但pytest框架使用起来更简洁,效率更高。pytest特点入门简单易上手,文档支持较好。支持单元测试和功能测试。......
  • pytest用例管理框架
    先安装pipinstallpytestpytest用例管理框架默认规则:1.py文件必须以test_开头或者_test结尾2.类名必须以test开头3.测试用例必须以test_开头 get请求通过params......
  • 面试官:你说说 Vue 中的组件和插件有什么区别?
    大家好,我是CoderBin前言面试官:“你说说Vue中的组件和插件有什么区别?”紧张的萌新:“vue组件是封装可复用的UI结构,插件好像是用vue.use()...”面试官:“...”······......
  • VS插件
    LiveServer——浏览器自动刷新安装以下插件安装后,右击插件名,点击扩展设置在输入框中输入custom找到CustomBrowser,设置打开默认浏览器为chrome在html页面中右......