【pytest学习总结2.2 】- 如何在测试中编写断言?

news2024/9/27 23:31:49

目录

2.2 如何在测试中编写断言

2.2.1 assert 断言

2.2.2 断言预期的异常

2.2.3 断言预期警告 【后续内容更新】

2.2.4 断言上下文

2.2.5 为失败的断言定义您自己的解释

2.2.6 断言的详细内容

🎁更多干货

完整版文档下载方式:


2.2 如何在测试中编写断言

2.2.1 assert 断言

Pytest允许您使用标准的Python断言来验证Python测试中的期望和值。例如,您可以编写以下内容:

def f():
    return 3

def test_function():
    assert f() == 4

C:\Users\Desktop\python>pytest test_assert1.py
========================================================================================================== test session starts ===========================================================================================================
platform win32 -- Python 3.8.0, pytest-6.2.5, py-1.11.0, pluggy-1.0.0
rootdir: C:\Users\X21201\Desktop\python
collected 1 item                                                                                                                                                                                                                          

test_assert1.py F                                                                                                                                                                                                                   [100%]

================================================================================================================ FAILURES ================================================================================================================
_____________________________________________________________________________________________________________ test_function ______________________________________________________________________________________________________________

    def test_function():
>       assert f() == 4
E       assert 3 == 4
E        +  where 3 = f()

test_assert1.py:5: AssertionError
======================================================================================================== short test summary info =========================================================================================================
FAILED test_assert1.py::test_function - assert 3 == 4
=========================================================================================================== 1 failed in 0.06s ============================================================================================================

2.2.2 断言预期的异常

为了编写关于引发异常的断言,可以使用pytest.raises()作为上下文管理器,对于测试自己的代码故意提高的异常的情况, pytest.raises()可能会更好:

import pytest


def test_zero_division():
    with pytest.raises(ZeroDivisionError):
        1 / 0

如果你需要访问实际的异常信息,你可以使用:

import pytest
def test_recursion_depth():
    with pytest.raises(RuntimeError) as excinfo:
        def f():
            f()
        f()
    print(excinfo.value)
    print(excinfo.type)
    # print(excinfo.traceback)
    assert "maximum recursion" in str(excinfo.value)

您可以将匹配关键字参数传递给上下文管理器,以测试正则表达式在异常的字符串表示形式上是否匹配:

import pytest
def myfunc():
    raise ValueError("Exception 123 raised")
def test_match():
    with pytest.raises(ValueError, match=r".* 123 .*"):
        myfunc()

有一个最小的另一种形式pytest.raises() ,其中您传递一个函数,该函数将与给定的*args**kwargs一起执行,并断言引发了给定的异常: pytest.raises(ExpectedException, func, *args, **kwargs) 也可以为pytest.mark.xfail指定一个“raises”参数,它检查测试是否以更具体的方式失败,而不是仅仅引发任何异常,将@pytest.mark.xfail与检查函数 一起使用可能对记录未固定的bug(测试描述了“应该”发生什么)会更好:

import pytest
@pytest.mark.xfail(raises=IndexError)
def test_f():
    f()

2.2.3 断言预期警告 【后续内容更新】

2.2.4 断言上下文

Pytest在遇到比较时,非常支持提供对上下文内容的断言。例如:

def test_set_comparison():
    set1 = set("1308")
    set2 = set("8035")
    assert set1 == set2

C:\Users\Desktop\python>pytest test_assert2.py
========================================================================================================== test session starts ===========================================================================================================
platform win32 -- Python 3.8.0, pytest-6.2.5, py-1.11.0, pluggy-1.0.0
rootdir: C:\Users\X21201\Desktop\python
collected 1 item                                                                                                                                                                                                                          

test_assert2.py F                                                                                                                                                                                                                   [100%]

================================================================================================================ FAILURES ================================================================================================================
__________________________________________________________________________________________________________ test_set_comparison ___________________________________________________________________________________________________________

    def test_set_comparison():
        set1 = set("1308")
        set2 = set("8035")
>       assert set1 == set2
E       AssertionError: assert {'0', '1', '3', '8'} == {'0', '3', '5', '8'}
E         Extra items in the left set:
E         '1'
E         Extra items in the right set:
E         '5'
E         Use -v to get the full diff

test_assert2.py:5: AssertionError
======================================================================================================== short test summary info =========================================================================================================
FAILED test_assert2.py::test_set_comparison - AssertionError: assert {'0', '1', '3', '8'} == {'0', '3', '5', '8'}
=========================================================================================================== 1 failed in 0.07s ============================================================================================================

2.2.5 为失败的断言定义您自己的解释

通过实现pytest_assertrepr_compare钩子,可以添加您自己的详细解释:

# content of test_foocompare.py
class Foo:
    def __init__(self, val):
        self.val = val
    def __eq__(self, other):
        return self.val == other.val


def test_compare():
    f1 = Foo(1)
    f2 = Foo(2)
    assert f1 == f2

# # content of conftest.py
from test_foocompare import Foo


def pytest_assertrepr_compare(op, left, right):
    if isinstance(left, Foo) and isinstance(right, Foo) and op == "==":
        return ["Comparing Foo instances:", f" vals: {left.val} != {right.val}", ]

2.2.6 断言的详细内容

要报告关于失败的断言的详细信息,可以通过在运行它们之前重写断言语句来实现。重写的断言语句将内省信息放到断言失败消息中,Pytest只重写由其测试收集过程直接发现的测试模块 因此,支持模块中断言本身的测试模块不会被重写。
(1)断言重写磁盘上的缓存文件 Pytest将把重写后的模块写回磁盘以进行缓存。您可以通过将其添加到conftest.py文件的顶部来禁用此行为(例如,以避免在大量移动文件的项目中留下陈旧的.pyc文件):

# content of conftest.py
import sys

sys.dont_write_bytecode = True

(2)禁用断言重写 pytest通过使用导入钩子来编写新的pyc文件来重写导入时的测试模块。大多数情况下,这是透明的。但是,如果您自己使用进口机器,进口钩可能会干扰 禁用所有模块的重写:--assert=plain 通过将字符串添加到其文档字符串中,来禁用对特定模块的重写: PYTEST_DONT_REWRITE

🎁更多干货


完整版文档下载方式:

这些资料,对于从事【软件测试】等相关工作的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享。

在评论区和我互动交流或者私❤我【软件测试学习】领取即可,拿走不谢。


如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “👍点赞” “✍️评论” “💙收藏” 一键三连哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/688415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ 哈希思想 unordered_set unordered_map

文章目录 哈希思想常用的哈希函数哈希冲突解决方案哈希代码实现(C 源码)unordered_set & unordered_map 容器**unordered_set & unordered_map模拟实现**(C 源码) 哈希思想 抽象感受哈希的优点 如果我现在抛出一个问题&a…

Python+OpenCV 实现图像位平面分层进行图像信息隐藏

引言 闲言:这篇博客回归了传统图像处理领域,主要是在研究生的数字图像处理课程上接触到了新的知识–图像位平面,觉得还挺有意思的,可以用来做信息隐藏,索性记录一下。因为拖延的缘故,到学期末才赶出来一篇&…

计算机毕业论文内容参考|基于Android的旅游攻略APP的设计与实现

文章目录 导文摘要:前言:绪论:1. 课题背景:2. 国内外现状与趋势:3. 课题内容:相关技术与方法介绍:系统分析:系统设计:系统实现系统测试总结与展望本文总结后续工作展望导文 计算机毕业论文内容参考|基于Android的旅游攻略APP的设计与实现 摘要: 本文基于Android平台…

python单元测试框架Unittest详解

前言 我们今天来聊聊Python中的单元测试框架unittest,大家都知道在Python中比较热门的测试框架除了pytest就是unittest,我之前有讲过pytest所以今天想讲unittest。喜欢的可以点点关注哟。 Unittest详解 Unittest是Python内部自带的一个单元测试的模块&…

mysql——初步认识

数据库是什么? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库 说人话 就是 数据库是一个电子仓库,里面存了一些数据 我们要学习的mysql就是数据库中的一种,并且是一种关系型数据库,当然有…

ASEMI快恢复二极管MUR20100DCR的性能与应用

编辑-Z 本文主要介绍了MUR20100DCR二极管的性能与应用。我们将对MUR20100DCR二极管的基本性能、不同领域的应用和优势与不足进行分析。 1、MUR20100DCR二极管的基本性能 MUR20100DCR二极管是一种高性能的超快速二极管,具有高电压、高电流和低漏电流等特点。它采用…

基于Python所写的企业编码生成系统

点击以下链接获取源码资源: https://download.csdn.net/download/qq_64505944/87950401?spm1001.2014.3001.5503 在PyCharm中运行《企业编码生成系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时&…

那些曾经考过的turtle绘图题(11~15)

【编程实现绘图 -11】 利用random库和turtle库,在屏幕上绘制4个小雪花,雪花半径随机,坐标由列表points给出,雪花颜色为红色,效果如图所示 points = [[0,0], [50, 40], [70, 80], [-40, 30]] # 样例代码 from turtle import * # 导入turtle库 import random pensize(4) …

【深入探讨】区块链的历史与现状

发表时间:2023年5月18日 最近,BSV比特币协会在德克萨斯州奥斯汀举办了首届Unbound Perspectives Live Summit活动。本次活动采取非公开形式,大约有100人受邀参会。 与会者包括了Unbounded Capital公司的有限合伙人、知名风险投资和对冲基金经…

跳跃表详解

跳跃表[SkipList]是一种基于有序链表的扩展,简称跳表,其就是使用关键节点作为索引的一种数据结构 怎样能更快查找到一个【有序链表】的某一节点呢? 可以利用类似【索引】的思想,提取出【链表】中的【部分关键节点】 比如&#…

bean的实例化和初始化

Instantiation:表示实例化,对象还未生成 Initialization:表示初始化,对象已经生成 InstantiationAwareBeanPostProcessor继承自BeanPostProcessor,它内部提供了3个方法,再加上BeanPostProcessor接口内部的2个方法,所…

VS Code 安装

前端开发工具 VSCodeHBuildersublimeWebStorm VS Code 一、介绍 Visual Studio Code(简称 VS Code )是 Microsoft 于2015年4月发布的一款代码编辑器。VS Code 对前端代码有非常强大的支持,同时也其他编程语言(例如&#xff1a…

20年运维老兵,SRE领域大咖张观石揭秘FinOps体系实践方法

当前,降本增效成为各大互联网公司的重要方向,IT成本则占据了互联网成本的大头。随着IT资源成本花费越来越高,很多公司意识到掌握管控成本和优化成本的重要性。 如何有效的降本?如何做好成本的洞察管控?如何掌握资源成…

ECDH 算法

一、简介 ECDH全称是椭圆曲线迪菲-赫尔曼秘钥交换(Elliptic Curve Diffie–Hellman key Exchange),主要是用来在一个不安全的通道中建立起安全的共有加密资料,一般来说交换的都是私钥,这个密钥一般作为“对称加密”的…

STM32速成笔记—IWDG

文章目录 一、IWDG简介二、STM32的IWDG2.1 STM32的IWDG简介2.2 喂狗2.3 IWDG框图 三、IWDG配置步骤四、IWDG配置程序4.1 IWDG初始化程序4.2 喂狗 五、应用实例 一、IWDG简介 独立看门狗(Independent Watchdog, IWDG),什么是看门狗&#xff1…

【二叉树part06】| 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

目录 🎈LeetCode654.最大二叉树 🎈LeetCode617.合并二叉树 🎈LeetCode700. 二叉搜索树中的搜索 🎈LeetCode98. 验证二叉搜索树 🎈LeetCode654.最大二叉树 链接:654.最大二叉树 给定一个不重复的整数数…

林客本地生活商城小程序开发

本地生活商城小程序的市场前景非常广阔。近年来,随着移动互联网技术的普及和人们消费观念的变化,越来越多的消费者开始通过手机进行线上购物。本地生活商城小程序恰好满足了用户对于便捷、快速、个性化购物体验的需求,具有以下优势&#xff1…

1752_使用Perl实现目录遍历

全部学习汇总: GreyZhang/speed_emacs: Try to make a new emacs configuration which is fast even on windows! (github.com) 关于Perl和Python的优劣我不去做什么分析,也不去发表什么深入的见解。我个人的学习过程是先Perl后Python再回到Perl。因为工…

【2023.6.26】记达梦数据库基于信创服务器麒麟OS报错与优化

一、场景描述 OS:银河麒麟V10(GUI)CPU:鲲鹏920达梦数据库:V8 (基于平台信创:麒麟V10、鲲鹏架构)金蝶中间件:V9 二、达梦数据库报错记录 报错1:(SWT:18564&…

基于Java削面快餐店点餐服务系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…