Pytest插件pytest-assume多重断言
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://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多重断言的更多相关文章
- pytest自动化7:assert断言
前言:assert断言就是将实际结果和期望结果做对比,符合预期结果就测试pass,不符合预期就测试failed. 实例1:简单断言 实例1优化版--增加异常信息文字描述 异常断言 excinfo 是一 ...
- 3、pytest中文文档--编写断言
目录 编写断言 使用assert编写断言 编写触发期望异常的断言 特殊数据结构比较时的优化 为失败断言添加自定义的说明 关于断言自省的细节 复写缓存文件 去使能断言自省 编写断言 使用assert编写 ...
- Pytest学习(二) - 断言的使用
一.前言 学习pytest总会习惯性的和unittest对比使用,自然就断言pytest和unittest也是有些区别的. 二.断言对比 unittest 断言 assertEqual(a, b) # ...
- Pytest(10)assert断言
前言 断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了.什么是断言呢? 简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试 failed ...
- python + pytest基本使用方法(断言)
#pytest 的基本用法# 安装: pip install pytest#在当前目录下运行 : 输入 pytest# 1.断言#功能:用于计算a与b相加的和def add(a,b): return ...
- 二、为什么要选用pytest以及 pytest与unittest比较
为什么要选择pytest,我看中的如下: 写case,不需要像unittest那样,创建测试类,继承unittest.TestCase pytest中的fixture(类似于setUp.tearDow ...
- 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 ...
- pytest 用 @pytest.mark.usefixtures("fixtureName")装饰类,可以让执行每个case前,都执行一遍指定的fixture
conftest.py import pytest import uuid @pytest.fixture() def declass(): print("declass:"+st ...
- pytest配置文件pytest.ini
说明: pytest.ini是pytest的全局配置文件,一般放在项目的根目录下 是一个固定的文件-pytest.ini 可以改变pytest的运行方式,设置配置信息,读取后按照配置的内容去运行 py ...
- jmeter(二十八)利用beanshell进行多重断言
在接口测试中,我们对返回结果的正确性判断一般是基于响应报文的返回内容进行断言.但有些时候,按照正常的业务逻辑来说,一个请求返回的内容是多种不同的. 比如:用户注册功能,注册成功是正常的返回messag ...
随机推荐
- 硬核剖析Java锁底层AQS源码,深入理解底层架构设计
我们常见的并发锁ReentrantLock.CountDownLatch.Semaphore.CyclicBarrier都是基于AQS实现的,所以说不懂AQS实现原理的,就不能说了解Java锁. 上篇 ...
- 嵌入式-C语言基础:通过结构体指针访问结构体数组
#include<stdio.h> #include<string.h> struct Student { char name[32]; int age; int height ...
- 嵌入式-C语言基础:字符串strlen和sizeof的区别
strlen表示的实际的字符串长度,不会把字符串结束符'\0'计算进去,而sizeof则不是实际的字符串长度,它会把字符串的结束标识符'\0'也包含进去. #include<stdio.h> ...
- Go语言核心36讲37
你好,我是郝林,今天我们继续来分享并发安全字典sync.Map的内容. 我们在上一篇文章中谈到了,由于并发安全字典提供的方法涉及的键和值的类型都是interface{},所以我们在调用这些方法的时候, ...
- cookies和session总结
1.作为基础知识,但是也是容易被我们忽略的知识. 2.从我的一次面试中,面试官问到,session是什么?和cookies有什么关系,当时我以为很简单,便顺口回答到,session是为了解决http无 ...
- 你认识的C# foreach语法糖,真的是全部吗?
本文的知识点其实由golang知名的for循环陷阱发散而来, 对应到我的主力语言C#, 其实牵涉到闭包.foreach.为了便于理解,我重新组织了语言,以倒叙结构行文. 先给大家提炼出一个C#题:观察 ...
- 【大数据-课程】高途-天翼云侯圣文-Day2:离线数仓搭建分解
一.内容介绍 昨日福利:大数据反杀熟 今日:数据看板 离线分析及DW数据仓库 明日:实时计算框架及全流程 一.数仓定义及演进史 1.概念 生活中解答 2.数据仓库的理解 对比商品仓库 3.数仓分层内容 ...
- [奶奶看了都会]ChatGPT保姆级注册教程
大家好,我是小卷 最近几天OpenAI发布的ChatGPT聊天机器人火出天际了,连着上了各个平台的热搜榜.这个聊天机器人最大的特点是模仿人类说话风格同时回答大量问题. 有人说ChatGPT是真正的人工 ...
- 从Spring中学到的【2】--容器类
容器类 我们在实际编码中,常常会遇到各种容器类,他们有时叫做POJO,有时又叫做DTO,VO, DO等,这些类只具有容器的作用,具有完全的get,set方法,作为信息载体,作数据传输用. 其实,很多地 ...
- [深度学习] Pytorch模型转换为onnx模型笔记
本文主要介绍将pytorch模型准确导出为可用的onnx模型.以方便OpenCV Dnn,NCNN,MNN,TensorRT等框架调用.所有代码见:Python-Study-Notes 文章目录 1 ...