pytest的软断言-断言失败后仍然执行后续代码(插件:pytest-assume)
前言
pytest使用assert来做断言,但是assert断言是一旦遇到断言失败的测试用例后,后面的代码就不会再执行了。
但有的时候我们经常会在用例中写多个断言,并且希望在第一个断言失败后,后面的所有的断言都能继续执行完,这就需要用到 pytest-assume 插件来解决。
背景
使用pytest进行断言判断的时候,为了用例的精准性,经常会多个方面进行断言,比如如下:
断言1:断言响应的http的状态
断言2:断言响应返回的code值
断言3:断言响应返回的json中的data字段是否符合预期。
①如果使用原生python的 assert,就会遇到一个断言失败则全部失败的情况。比如说,断言1结果为Failed,那么断言2和断言3都不会被执行。
②希望断言2和断言3继续执行,这样我们能获取更多的断言结果来判断出接口哪里出了问题,能够更好地进行问题定位,这时候出现了: pytest-assume插件:一个可以允许pytest测试用例中执行多个失败的断言的插件(即上面断言1,断言2,断言3都失败的情况下,三个断言都能被执行)。
说明
该插件源自 pytest-expect ,并且做了一部分小的修改:
- 支持showlocals(即 pytest命令行的 -l 参数, 显示执行过程中的局部变量)。
- 可以全局使用,无需指定fixtrue装饰器。(即任意test_xxx函数中都能用)。
- 对断言输出做了一些格式上的美化。
下载
pip install pytest-assume
原生assert硬断言(第一个断言失败后,后续代码不再执行)
# file_name: test_assume.py import pytest def test_assume_01(): print("\n-----测试用例开始执行-----") assert 1 == 2 assert 2 == 2 print("-----测试用例执行结束了-----") if __name__ == '__main__': pytest.main(['-s', 'test_assume.py'])
运行结果:
从运行结果中可以看到执行到assert 1 == 2 的时候断言失败了,后面的代码就没有执行了。
assume软断言(第一个断言失败后,后续代码会继续运行)
使用 pytest.assume() 断言:
# file_name: test_assume.py import pytest def test_assume_01(): print("\n-----测试用例开始执行-----") pytest.assume(1 == 2) pytest.assume(2 == 2) print("-----测试用例执行结束了-----") if __name__ == '__main__': pytest.main(['-s', 'test_assume.py'])
运行结果:
从运行结果中可以看到,断言在 pytest.assume(1 == 2) 时失败了,但是后面的代码也执行了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!