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

pytest日志显示

pytest 中,可以通过 钩子函数配置文件 pytest.ini 配置日志的显示方式,实现对日志的灵活控制。以下是常用实现方式及配置说明。


方式一:使用 conftest.py 钩子函数自定义日志显示

通过 conftest.py 文件中的钩子函数,实现日志记录并自定义显示。

实现步骤
import pytest
import logging

# 配置日志格式和输出
def pytest_configure(config):
    log_format = "%(asctime)s - %(levelname)s - %(message)s"
    logging.basicConfig(
        level=logging.INFO,  # 设置日志级别
        format=log_format,
        filename="test.log",  # 日志文件保存路径
        filemode="w"  # 每次运行时重写日志文件
    )
    console = logging.StreamHandler()  # 控制台输出
    console.setLevel(logging.INFO)  # 控制台日志级别
    console.setFormatter(logging.Formatter(log_format))
    logging.getLogger("").addHandler(console)
    logging.info("Logging setup complete.")

# 钩子函数:记录每个测试的开始和结束
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_protocol(item, nextitem):
    logging.info(f"Test started: {item.name}")
    outcome = yield
    result = "PASSED" if outcome.get_result().passed else "FAILED"
    logging.info(f"Test finished: {item.name} - {result}")
运行效果

运行测试时,日志会记录在 test.log 文件中,同时在控制台实时输出。


方式二:通过 pytest.ini 配置文件管理日志显示

使用 pytest.ini 文件设置全局日志配置,省去手动编写 logging 的代码。

配置示例

创建或编辑项目中的 pytest.ini 文件:

[pytest]
log_cli = true  # 启用控制台日志输出
log_cli_level = INFO  # 设置日志级别
log_cli_format = %(asctime)s - %(levelname)s - %(message)s  # 日志格式
log_cli_date_format = %Y-%m-%d %H:%M:%S  # 日期格式

log_file = test.log  # 日志文件保存路径
log_file_level = INFO  # 文件日志级别
log_file_format = %(asctime)s - %(levelname)s - %(message)s  # 文件日志格式
log_file_date_format = %Y-%m-%d %H:%M:%S  # 文件日期格式
运行效果
  • 控制台输出的日志格式与级别按照配置显示。
  • 所有日志信息保存到 test.log 文件。

方式三:在测试代码中使用 caplog 捕获日志

使用 pytest 提供的内置 caplog 功能捕获日志,适用于验证日志输出的测试场景。

测试用例示例
import logging

def test_logging_example(caplog):
    logging.info("This is an info log.")
    logging.error("This is an error log.")
    assert "info log" in caplog.text  # 验证日志内容
    assert "error log" in caplog.text
运行效果
  • caplog 捕获到的日志信息可以用于断言和分析。

常见日志配置说明

配置项描述示例值
log_cli启用控制台日志输出。true
log_cli_level设置控制台日志输出的级别。INFO, DEBUG, ERROR
log_cli_format控制台日志的格式。%(asctime)s - %(message)s
log_cli_date_format控制台日志的日期格式。%Y-%m-%d %H:%M:%S
log_file指定日志文件的路径。test.log
log_file_level设置日志文件的输出级别。INFO, WARNING
log_file_format文件日志的格式。%(levelname)s - %(message)s
log_file_date_format文件日志的日期格式。%Y-%m-%d %H:%M:%S

推荐组合方式

  1. 全局日志管理:

    • 使用 pytest.ini 配置,统一管理日志级别、格式和输出路径。
    • 适用于简单、稳定的项目日志需求。
  2. 细粒度控制:

    • conftest.py 中结合钩子函数,针对用例或阶段添加特定的日志逻辑。
    • 适用于复杂场景的动态日志需求。
  3. 日志验证:

    • 使用 caplog 在特定测试用例中捕获日志内容,便于断言和调试。

通过以上方式,可以灵活、高效地在 pytest 项目中实现日志管理与显示。


http://www.kler.cn/a/470901.html

相关文章:

  • HTML 迷宫游戏
  • 30天开发操作系统 第 12 天 -- 定时器
  • UDP_TCP
  • 计算机网络 (29)网络地址转换NAT
  • 概率论与数理统计--期末
  • 【cuda学习日记】2.cuda编程模型
  • gesp(C++一级)(18)洛谷:B4063:[GESP202412 一级] 奇数和偶数
  • 某制造集团灯塔工厂解决方案(36页PPT)
  • 安装vue脚手架出现的一系列问题
  • 计算机网络——网络层—路由算法和路由协议
  • 感知器的那些事
  • springboot适配mybatis+guassdb与Mysql兼容性问题处理
  • 升级 Spring Boot 3 配置讲解 —— Spring Boot 3 核心源码专讲
  • 如何在 Ubuntu 22.04 上安装 Nagios 服务器教程
  • Flutter:打包apk,安卓版本更新(二)
  • 使用Python构建远程医疗平台:从零开始的实现指南
  • 【错误记录】HarmonyOS 编译报错 ( DevEco Studio 开发环境 与 API 版本 与 HarmonyOS 版本 的配套关系 )
  • 君正T41交叉编译ffmpeg、opencv并做h264软解,利用君正SDK做h264硬件编码
  • Angular由一个bug说起之十三:Cross Origin
  • C++二十三种设计模式之外观模式
  • Nginx不使用域名如何配置证书
  • 谷歌浏览器的高级开发者工具使用指南
  • Ubuntu下安装Android Sdk
  • HarmonyOS NEXT 应用开发练习:AI智能语音播报
  • 云开发 Copilot:AI 赋能的低代码革命
  • leetcode(hot100)8、9