pytest 通过装饰器获取测试case的断言失败结果

news2024/10/5 14:31:00

 test11.py

import logging
from functools import wraps

def log_exceptions(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        # 创建日志记录器
        logger = logging.getLogger(func.__name__)
        logger.setLevel(logging.ERROR)

        # 创建文件处理器
        file_handler = logging.FileHandler('error.log')
        file_handler.setLevel(logging.ERROR)

        # 创建日志格式器
        formatter = logging.Formatter('%(asctime)s | %(filename)s | line:%(lineno)d | %(levelname)s | %(message)s')
        file_handler.setFormatter(formatter)

        # 将文件处理器添加到日志记录器
        logger.addHandler(file_handler)

        try:
            return func(*args, **kwargs)
        except Exception as e:
            # 捕获异常并记录日志
            logger.error('An error occurred: %s', str(e))
            raise  # 重新抛出异常,保持异常的传递性

    return wrapper

这段代码定义了一个装饰器函数log_exceptions,用于捕获函数执行过程中的异常并记录到日志文件中。

代码的解析如下:

  1. 导入了logging模块和wraps函数。
  2. 定义了log_exceptions装饰器函数,接受一个函数作为参数。
  3. 在装饰器函数内部定义了一个内部函数wrapper,用于包装原始函数。
  4. wrapper函数内部创建了一个日志记录器对象,并设置日志级别为ERROR
  5. 创建了一个文件处理器对象,用于将日志写入到名为error.log的文件中,并设置日志级别为ERROR
  6. 创建了一个日志格式器对象,定义了日志的格式,包括时间、文件名、行号、日志级别和消息内容。
  7. 将文件处理器添加到日志记录器中。
  8. 使用try-except块包裹原始函数的执行过程。
  9. 如果原始函数执行过程中发生异常,捕获异常并记录到日志中。
  10. 重新抛出异常,保持异常的传递性。
  11. 返回包装后的函数wrapper

通过使用log_exceptions装饰器,可以将其应用于需要捕获异常并记录到日志的函数上,以便在出现异常时进行日志记录和异常处理。

test22.py

import pytest
from test11 import log_exceptions

@log_exceptions
def test_divide():
    assert 1 == 2

@log_exceptions
def test_divide2():
    assert 1 == '14'


def test_divide3():
    assert 1 == 1



if __name__ == '__main__':
   pytest.main(["-s", "test22.py"])

这段代码使用了之前定义的装饰器函数log_exceptions来装饰测试函数,并使用pytest库运行测试脚本。

代码的主要部分包括三个测试函数:test_divide()test_divide2()test_divide3()

test_divide()函数断言1等于2,这是一个错误的断言,会引发AssertionError异常。由于该函数被log_exceptions装饰器装饰,当异常发生时,装饰器会捕获异常并记录到日志文件中。

test_divide2()函数断言1等于字符串'14',这也是一个错误的断言,会引发AssertionError异常。同样地,由于该函数被log_exceptions装饰器装饰,异常会被捕获并记录到日志文件中。

test_divide3()函数断言1等于1,这是一个正确的断言,不会引发异常。

最后,通过pytest.main(["-s", "test22.py"])运行了测试脚本,并使用-s参数来显示打印信息。

通过使用log_exceptions装饰器,可以捕获测试函数执行过程中的异常,并将异常信息记录到日志文件中,以便后续查看和分析。

 

 

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

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

相关文章

MySQL(五)缓存策略

MySQL系列文章 MySQL(一)基本架构、SQL语句操作、试图 MySQL(二)索引原理以及优化 MySQL(三)SQL优化、Buffer pool、Change buffer MySQL(四)事务原理及分析 MySQL(五&a…

利用pgloader工具将MySQL数据迁移至PostgreSQL数据库

一、简介 pgloader是一款开源软件,可以将各种来源的数据加载到PostgreSQL数据库中,支持动态读取数据,使用 COPY 流式传输协议将数据加载到 PostgreSQL 数据库中,并使用单独的线程读取和写入数据,由于能够直接从源数据库加载数据。…

1771_Windows下格式化Linux硬盘

全部学习汇总: GreyZhang/little_bits_of_linux: My notes on the trip of learning linux. (github.com) 我自己使用Linux系统多年,但是对于很多操作系统相关的知识我其实并不是很了解。我当初之所以使用Linux一是因为这个系统能够提供给我所有想要的工…

Unity游戏源码分享-Unity手游射击横版游戏

Unity游戏源码分享-Unity手游射击横版游戏 战斗场景 项目地址: https://download.csdn.net/download/Highning0007/88050256

Deployment:让应用永不宕机

“Deployment”,顾名思义,它是专门用来部署应用程序的,能够让应用永不宕机,多用来发布无状态的应用,是 Kubernetes 里最常用也是最有用的一个对象。 Deployment 的关键字段:先看 replicas 字段。它的含义比…

在Vitis IDE中使用第三方库 libtiff 保存 tiff 文件

目的和思路 一个Vitis IDE 裸机项目,需要将视频帧无损地保存下来 由于每帧的像素数据是 16bit 1通道的 bayer 格式,满足这一需求的图像格式似乎只有 tiff 格式 开源的tiff 库是 libtiff,而在 Vitis IDE 裸机项目中要使用的话就需要交叉编译…

AD22软件系统参数的一些基本设置

AD22软件系统参数设置 SystemData managementSchematicPCB Editor System Data management Schematic PCB Editor

集群基础5——keepalived对apache高可用

文章目录 一、基本了解二、配置文件参数释义2.1 默认配置文件2.2 定制配置文件2.2.1 vrrp_instance段配置参数2.2.2 vrrp_script段配置参数2.2.3 real_server段配置参数2.2.4 tcp_check段配置参数 三、keepalived对apache高可用3.1 环境说明3.2 安装服务3.3 配置主服务器3.4 配…

前端编码规范

prettier 配置 1. vscode 安装prettier 的 插件 2. 新建 .prettierrc 文件 {"semi": false, // 不尾随分号"singleQuote": true, // 使用单引号"trailingComma": "none" // 多行逗号分隔的语法,最后一行不加逗号 }eslin…

orbslam3 生成标定板rosrun kalibr kalibr_create_target_pdf --type

rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.08 --tspace 0.3小师妹要做相机视觉标定,需要制作棋盘格,无奈其电脑有些卡,对此毫无经验的博主从头开始安装(此前博主已经安装了ROS环境&#x…

精品个人或团队引导页网站HTML源码_好看大气

2023全新宽屏大气好看团队个人指导页网站HTML源码,带音乐视频mv,源码比较小,只有七兆,就因为一个MV占了十几兆。源码也很漂亮,但是有个缺点就是没有手机适配,只能PC浏览器正常显示,手机不能完全…

“探索图像处理的奥秘:使用Python和OpenCV进行图像和视频处理“

1、上传图片移除背景后下载。在线抠图软件_图片去除背景 | remove.bg – remove.bg 2、对下载的图片放大2倍。ClipDrop - Image upscaler 3、对放大后的下载照片进行编辑。 4、使用deepfacelive进行换脸。 1)将第三步的照片复制到指定文件夹。C:\myApp\deepfakeliv…

Java 设计模式——模板方法模式

目录 1.概述2.结构3.案例实现3.1.抽象类3.2.具体子类3.3.测试 4.优缺点5.使用场景6.JDK 源码解析6.1.InputStream6.2.AbstractQueuedSynchronizer 1.概述 (1)在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知…

【代码随想录 | Leetcode | 第三天】数组 | 滑动窗口 | 209

前言 欢迎来到小K的Leetcode|代码随想录|专题化专栏,今天将为大家带来滑动窗口的分享✨ 目录 前言209. 长度最小的子数组总结 209. 长度最小的子数组 ✨题目链接点这里 给定一个含有 n 个正整数的数组和一个正整数target。找出该数组中满足其和 ≥ target 的长度…

docker在arm64架构ubuntu系统的安装

卸载可能存在的旧版本 sudo apt remove docker docker-engine docker-ce docker-io安装依赖使apt可通过HTTPS下载包 sudo apt update && apt install -y apt-tranport-https ca-certificates curl software-properties-commonapt-transport-https用于支持通过HTTPS协…

如何设计光场2.0(聚焦型光场相机)系统参数

1. 系统参数设计 目前的硬件系统的现状:主透镜50mm,MLA:15*15,d0.5mm,f15mm,s4.8um 开普勒型光场系统: 首先我们需要确定系统的M,M参数表示单个位置的点能被多少个小微透镜成像&am…

C++【哈希表的完善及封装】

✨个人主页: 北 海 🎉所属专栏: C修行之路 🎃操作环境: Visual Studio 2019 版本 16.11.17 文章目录 🌇前言🏙️正文1、哈希表的完善1.1、拷贝与赋值1.2、优化:哈希函数1.3、优化&am…

带你快速了解字符(串)函数

​ ⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 💖 持续更文,谢谢大家支持 💖 文章目录 本文重点1. strlen函数1.1 模拟实现 2. strcpy函数2.1 模拟实现 3. strcat函数3.1 模拟实现 4. strcmp函…

基于linux下的高并发服务器开发(第一章)- 目录遍历函数

10 / 目录遍历函数 // 打开一个目录 #include <sys/types.h> #include <dirent.h>DIR *opendir(const char *name); 参数&#xff1a; - name: 需要打开的目录的名称 返回值&#xff1a; DIR * 类型&#xff0c;理解为目录流 错误…

Hcip第五次作业----BGP联邦综合实验

配置IP地址 r1 [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 12.0.0.1 24 [r1-GigabitEthernet0/0/0]int lo0 [r1-LoopBack0]ip add 192.168.1.1 24 [r1-LoopBack0]int lo1 [r1-LoopBack1]ip add 10.0.0.1 24 r2 [r2]int g0/0/0 [r2-GigabitEthernet0/0/0]ip add 12.0.0.2…