当前位置: 首页 > news >正文

pytest-log

问题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.dtcms.com/a/288888.html

相关文章:

  • 嵌入式Linux:获取线程ID
  • 数组算法之【合并两个有序数组】
  • 137. Java 泛型 - 泛型与通配符:子类型化关系
  • 【Linux】权限详解 权限本质、权限属性、su、sudo提权、chmod\chown\chgrp、文件类别
  • RxSwift-事件属性
  • Vuex 核心知识详解:Vue2Vue3 状态管理指南
  • Servlet快速入门
  • Docker在NAS部署MoonTV+OrionTV
  • 44.sentinel授权规则
  • tidyverse-数据读入
  • 基于智慧经营系统的学校住宿登记报表分析与应用探究-毕业论文—仙盟创梦IDE
  • 如何防止任务长期处于“等待”状态
  • Python基础和高级【抽取复习】
  • 基于单片机的自动条幅悬挂机
  • Leetcode 06 java
  • SpringBoot的配置文件
  • 【micro:bit】从入门到放弃(四):高级指令:函数、数组、文本、高级LED、引脚配置
  • UE蒙太奇和动画序列有什么区别?
  • 早期SD模型控制生成方法
  • Dev-C++——winAPI贪吃蛇小游戏
  • 智能制造之物料详解
  • 物联网安装调试-温湿度传感器
  • 数学专业转行做大数据容易吗?需要补什么?
  • 高性能熔断限流实现:Spring Cloud Gateway 在电商系统的实战优化
  • 本地部署 Claude 大语言模型的完整实践指南
  • 从磁记录到数据中心:磁盘原理与服务器架构的完整技术链路
  • 【C++基础】面试高频考点解析:extern “C“ 的链接陷阱与真题实战
  • 【原创】微信小程序添加TDesign组件
  • 网络安全初级(前端页面的编写分析)
  • 手写tomcat