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 ...
随机推荐
- Codeforces Global Round 23 D.Paths on the Tree(记忆化搜索)
https://codeforces.ml/contest/1746/problem/D 题目大意:一棵n节点有根树,根节点为1,分别有两个数组 s[i] 顶点 i 的魅力值 c[i] 覆盖顶点 i ...
- Java安全之反序列化(1)
序列化与反序列化 概述 Java序列化是指把Java对象转换为字节序列的过程:这串字符可能被储存/发送到任何需要的位置,在适当的时候,再将它转回原本的 Java 对象,而Java反序列化是指把字节序列 ...
- Java安全之CC3
前言 上一篇文章学习了Java中加载字节码的⼀些⽅法,其中介绍了TemplatesImpl,TemplatesImpl 是⼀个可以加载字节码的类,通过调⽤其newTransformer()⽅法,即可执 ...
- 嵌入式-C语言基础:二级指针
二级指针:可以理解为指向指针的指针,存放的是指针变量的地址. 下面用一级指针来保存一个指针变量的地址: #include<stdio.h> int main() { int *p1; in ...
- 【OpenStack云平台】SecureCRT 连接 CentOS虚拟机
1.安装SecureCRT SecureCRT是一款支持SSH等协议的终端仿真软件,可以在windows下登录Linux服务器,这样大大方便了开发工作.安装SecureCRT可以通过网上的各种教程安装 ...
- i春秋登录
打开是个普普通通的表单提交网页 查看源码,没什么东西 抓包试试再 没找到什么有用的信息 尝试注入 用户名admin' or '1'='1 密码随便输 弹出密码错误 再试试admin' or '1'=' ...
- .NET MAUI 安卓应用开发初体验
一..NET MAUI开发环境搭建&安卓SDK和安卓模拟器安装提示网络连接失败问题解决 引言 本节目标是帮助第一次搭建.NET MAUI开发环境,在下载安卓SDK和安卓模拟器过程中一直提示网络 ...
- 图神经网络之预训练大模型结合:ERNIESage在链接预测任务应用
1.ERNIESage运行实例介绍(1.8x版本) 本项目原链接:https://aistudio.baidu.com/aistudio/projectdetail/5097085?contribut ...
- USB口3A限流保护芯片。带短路保护
一般说明 PW1503是超低RDS(ON)开关,具有可编程的电流限制,以保护电源源于过电流和短路情况.它具有超温保护以及反向闭锁功能. PW1503采用薄型(1毫米)5针薄型SOT封装,提供可调版本. ...
- java中对象存在形式
本文主要讲述jvm中对象的存储形式: class Cat{ String name; int age; String color; // 行为 } 依据Cat类创建对象 public class Ob ...