问题1:我们在运行测试用例的时候如何记录测试的log,如何使用?

问题2:我写的函数,为了方便log记录,但是在pytest运行时,会兼容pytest且不会重复记录,怎么解决?

1、pytest有内置的log功能,我们只需要配置使用即可。

配置方法:在项目根目录下配置pytest.ini日志内容

[pytest]
log_cli = true
log_cli_level = INFO
log_cli_format = %(asctime)s [%(levelname)8s] %(name)s:%(filename)s:%(lineno)d - %(message)s
log_cli_date_format = %Y-%m-%d %H:%M:%S
log_file = logs/pytest.log
log_file_level = DEBUG
log_file_format = %(asctime)s [%(levelname)8s] %(name)s:%(filename)s:%(lineno)d - %(message)s
log_file_date_format = %Y-%m-%d %H:%M:%S

有了上诉配置,pytest运行时,就会将配置参数传给log模块,在代码中直接使用即可。

2、在测试用例中如何使用?

在测试用例中,将日志模块传进去:caplog

class TestDemo:def test_log_capture(self,caplog):logging.debug("Debug message")res = add(1, 2)assert res == 3

然后直接调用logging相关的日志方法即可:示例

3、在非pytest环境运行时,如何使用log?

因为pytest有内置的log以及我们配置了相关参数,如果非pytest方式运行,我们就需要手动封装一个log功能,且兼容log不会重复记录。

代码:

# -*- coding: utf-8 -*-
# @Time    : 2025/7/19 22:39
# @Author  : 夏槐
# @Motto   : 遥遥领先,领先不止一点点
# @File    : log_util.py
# @ide     : PyCharm
# log_util.py
import logging
import sys
import os
from logging.handlers import RotatingFileHandler  # 添加日志轮转处理器def setup_logger(name=None):"""配置并返回一个日志记录器参数:name (str): 记录器名称,通常使用 __name__返回:logging.Logger: 配置好的日志记录器"""logger = logging.getLogger(name)# 检查是否在 pytest 环境中运行if "pytest" in sys.modules:# pytest 会自动配置日志,无需额外设置logger.debug(f"在 pytest 环境中运行,使用 pytest 的日志配置")return logger# 如果不是在 pytest 环境中,配置基础日志if not logger.handlers:# 创建格式化器formatter = logging.Formatter('%(asctime)s [%(levelname)8s] %(name)s %(filename)s:%(lineno)d - %(message)s',datefmt='%Y-%m-%d %H:%M:%S'
)# 创建控制台处理器console_handler = logging.StreamHandler(sys.stdout)console_handler.setFormatter(formatter)# 创建日志目录(如果不存在)log_dir = r"..\logs"os.makedirs(log_dir, exist_ok=True)# 创建文件处理器(添加日志文件支持)log_file = os.path.join(log_dir, "单独调试.log")file_handler = RotatingFileHandler(log_file,maxBytes=10 * 1024 * 1024,  # 10MBbackupCount=5,encoding='utf-8')file_handler.setFormatter(formatter)# 设置日志级别logger.setLevel(logging.DEBUG)console_handler.setLevel(logging.DEBUG)file_handler.setLevel(logging.INFO)  # 文件日志级别设为INFO# 添加到记录器logger.addHandler(console_handler)logger.addHandler(file_handler)  # 添加文件处理器# 防止日志传播到根记录器logger.propagate = Falselogger.debug(f"初始化独立日志记录器: {name}")logger.info(f"日志文件保存在: {os.path.abspath(log_file)}")return logger

4、怎么使用?

一般测试case下面,还会封装一些功能,这些功能基本就没办法使用log,我们上诉3中封装了log之后,会检测当前的运行环境,如果是pytest,就用pytest.ini的配置,否则就使用自定义的log配置,且log兼容pytest,下面给出示例:

这里的log就会单独记录在一个调试文件内。pytest运行这个add时,log就会保存在pytest.ini的文件路径中。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在安卓源码中添加自定义jar包给源码中某些模块使用

一、具体步骤 1. 准备目录与 Jar 包 在vendor下 创建新的模块目录,放入demo.jar 包: demojar/ # 模块目录 ├── Android.bp # 编译配置文件 └── demo.jar 2. 编写 Android.bp 配置 Android.bp 示例配置: java_import {…

buntu 22.04 上离线安装Docker 25.0.5(二)

以下有免费的4090云主机提供ubuntu22.04系统的其他入门实践操作 地址:星宇科技 | GPU服务器 高性能云主机 云服务器-登录 相关兑换码星宇社区---4090算力卡免费体验、共享开发社区-CSDN博客 兑换码要是过期了,可以私信我获取最新兑换码!&a…

初探 Web 环境下的 LLM 安全:攻击原理与风险边界

文章目录前言1 什么是大型语言模型(LLM)?1.1 LLM的核心特征1.2 LLM在Web场景中的典型应用2 LLM攻击的核心手段:提示注入与权限滥用3 LLM与API集成的安全隐患:工作流中的漏洞节点3.1 LLM-API集成的典型工作流3.2 工作流…

【新手向】PyTorch常用Tensor shape变换方法

【新手向】PyTorch常用Tensor shape变换方法 前言 B站UP主科研水神大队长的视频中介绍了“缝合模块”大法,其中专门强调了“深度学习 玩的就是shape”。受此启发,专门整理能够调整tensor形状的几个内置函数,方便以后更好地调整PyTorch代码中的…

React 18 vs Vue3:状态管理方案深度对比

🔥 背景: React有Redux、Zustand、Jotai等方案 Vue有Pinia、Vuex 4.x 如何选择适合项目的方案? 🔍 核心对比: 维度 React (Redux Toolkit) Vue3 (Pinia) 类型安全 ✅ 需手动配置TS ✅ 自动类型推导 代码量 较多(需写action) 较少(类似Vuex 5) 响应式原理 不可变数据…

UE5网络联机函数

Find Sessions Create Session Join Session Destroy Session Steam是p2p直接联机 一、steam提供的测试用AppId AppId是steam为每一款游戏所设定的独有标识,每一款要上架steam的游戏都会拥有独一无二的AppId。不过为了方便开发者测试,steam提供了游…

Spring Boot 监控:AOP vs Filter vs Java Agent

01前言 在 高并发 微服务 中, 传统 手动埋点(System.currentTimeMillis())就像用体温计量火箭速度——代码侵入、重复劳动、维护爆炸。 下文是无侵入、高精度、全链路 监控 API 耗时,全程不碰业务代码的方案! 02实战&…

基于Android的电子记账本系统

博主介绍:java高级开发,从事互联网行业多年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言&#xff0…

7月17日日记

结束了数学建模之后的这两天一直在紧张的复习,但是说实话效率有点低,因为可能觉得自己找到了两个小时速成课,觉得无所谓了,所以有点放松了。在宿舍杰哥和林雨城却一直在复习,感觉他们的微积分和线性代数复习的都比我好…

Linux下SPI设备驱动开发

一.SPI协议介绍1.硬件连接介绍引脚含义:DO(MOSI):Master Output, Slave Input,SPI主控用来发出数据,SPI从设备用来接收数据。DI(MISO):Master Input, Slave Output,SPI主控用来发出数据,SPI从设…

用Dify构建气象智能体:从0到1搭建AI工作流实战指南

作为一名Agent产品经理,我最近在负责气象智能体的建设项目。传统气象服务面临三大痛点:数据孤岛严重(气象局API、卫星云图、地面观测站等多源数据格式不一)、响应链路长(从数据采集到预警发布需人工介入多个环节)、交互体验单一(用户只能被动接收标准化预警,无法个性化…

Android NDK ffmpeg 音视频开发实战

文章目录接入FFmpeg1.下载FFmpeg 源码2.编译FFmpeg.so库异常处理3.自定义FFmpeg交互so库创建4.配置CMakeLists.txt5.CMakeLists.txt 环境配置6.Native与Java层调用解码器准备接入FFmpeg 1.下载FFmpeg 源码 FFmpeg官网地址 2.编译FFmpeg.so库 移动 FFmpeg 源码文件夹至 Andr…

使用 go-redis-entraid 实现 Entra ID 无密钥认证

1、依赖与安装 步骤命令说明安装(或升级) go-redis v9.9go get github.com/redis/go-redis/v9latestentraid 必须 ≥ 9.9.0安装 go-redis-entraidgo get github.com/redis/go-redis-entraid自动拉取 transit 依赖 2、认证方式一览 方式说明创建 Stream…

window上docker安装RabbitMQ

1、要进http://localhost:15672管理页面需要安装management版本2、搜索镜像并pull3、启动镜像时将端口映射出来4、启动成功,点击可查看日志详情,浏览器访问5、直接使用guest/guest登录会报错User can only log in via localhost解决办法有两个&#xff1…

异世界历险之数据结构世界(排序(插入,希尔,堆排))

前言 介绍 插入排序 基本知识: 直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 直接插入…

oracle 数据库中,将几张表的数据按指定日期范围实时同步至同一个数据库的备份表中。

以下是一个Oracle数据库中实现表数据按指定日期范围实时同步至备份表的解决方案。这个方案使用存储过程和触发器组合实现: 1. 创建备份表结构 首先需要为每张需要备份的表创建对应的备份表,结构与原表相同: -- 为原表创建备份表(示…

电脑网络连接正常,微信、QQ能正常使用,但无法访问网页?DNS问题的解决方案和背后原理。

文章目录1. 问题背景2. 解决方案2.1 手动刷新DNS2.1.1 Windows版本2.1.2 Mac版本2.2 手动设置DNS服务器2.2.1 Windows版2.2.2 Mac版2.3 其他解决方案3. DNS是什么?3.1 详细解释DNS3.1.1 A distributed, hierarchical database(一个分布式和分层数据库结构…

【HTML】图片比例和外部div比例不一致,最大程度占满

图片比例和外部div比例不一致&#xff0c;最大程度占满&#xff0c;并且图片比例不变 其中1.jpg,2.jpg,1.html在同一目录 |-----|- 1.jpg|- 2.jpg|- 1.html1.jpg2.jpg<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /&g…

如何使用python网络爬虫批量获取公共资源数据技术

如何快速批量地获取海量公共资源数据决定了科研的效率。Python网络爬虫是快速批量获取网络数据的重要手段&#xff0c;它按照发送请求、获得页面、解析页面、下载内容、储存内容等流程&#xff1f; 一&#xff1a;Python软件的安装及入门1 Python软件安装及入门1)Anaconda软件安…

Kiro vs Cursor: AI IDE 终极对比指南

概述 随着生成式 AI 革命性地改变了我们编写代码的方式&#xff0c;新一代 AI 驱动的集成开发环境 (IDE) 正在崛起。Kiro 和 Cursor 代表了这一运动的前沿&#xff0c;但它们采用了截然不同的方法。 核心理念对比 特性AWS KiroCursor核心理念结构化开发流程 (Spec-driven)对…