pytest文档81 - 如何管理Captured logging日志

2024-01-14 02:50

本文主要是介绍pytest文档81 - 如何管理Captured logging日志,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

pytest 自动捕获级别为 WARNING 或以上的日志消息,并以与捕获的 stdout 和 stderr 相同的方式在每个失败测试的各自部分中显示它们。

日志显示

当输入pytest命令,不带任何参数时

pytest

如果运行的用例没有报错,那么打印的内容很简洁

以下示例,当用例中有报错的时候

# content of test_sample.py
import pytest
import logging
log = logging.getLogger(__name__)@pytest.fixture
def first():print('set up :first to do ...')def inc(x):log.warning('function inc--------')return x + 1def test_answer(first):assert inc(3) == 6

运行后日志

collected 1 item                                                                                           case\test_sample.py F                                                                                [100%]================================================ FAILURES =================================================
_______________________________________________ test_answer _______________________________________________first = Nonedef test_answer(first):
>       assert inc(3) == 6
E       assert 4 == 6
E        +  where 4 = inc(3)case\test_sample.py:18: AssertionError
------------------------------------------ Captured stdout setup ------------------------------------------
set up :first to do ...
-------------------------------------------- Captured log call --------------------------------------------
WARNING  case.test_sample:test_sample.py:13 function inc--------
========================================= short test summary info =========================================
FAILED case/test_sample.py::test_answer - assert 4 == 6
============================================ 1 failed in 0.24s ============================================

默认情况下,每个捕获的日志消息都显示模块、行号、日志级别和消息。
如果需要,可以通过传递特定的格式选项将日志和日期格式指定给日志模块支持的任何内容:

pytest --log-format="%(asctime)s %(levelname)s %(message)s" --log-date-format="%Y-%m-%d %H:%M:%S"

加上log的格式后显示效果

--------------------------- Captured stdout setup ----------------------------
set up :first to do ...
----------------------------- Captured log call ------------------------------
2022-11-16 11:30:17 WARNING function inc--------
========================== short test summary info ===========================
FAILED case/test_sample.py::test_answer - assert 4 == 6

--log-format--log-date-format 也可以加到pytest.ini的配置文件

[pytest]
log_format = %(asctime)s %(levelname)s %(message)s
log_date_format = %Y-%m-%d %H:%M:%S

禁用捕获内容(stdout、stderr和log)

可以完全禁用对失败测试的捕获内容(stdout、stderr和log)的报告:

pytest --show-capture=no

禁用后就不再显示stdout、stderr和log

caplog 内置 fixture

在测试中,可以更改捕获的日志消息的日志级别。这由caplog fixture支撑:

def test_foo(caplog):caplog.set_level(logging.INFO)

默认情况下,级别在根记录器上设置,但为了方便起见,也可以设置任何记录器的日志级别

def test_foo(caplog):caplog.set_level(logging.CRITICAL, logger="root.baz")

测试结束时,将自动恢复设置的日志级别。

还可以使用上下文管理器临时更改with块内的日志级别:

def test_bar(caplog):with caplog.at_level(logging.INFO):pass

同样,默认情况下,根记录器的级别会受到影响,但任何记录器的级别都可以改为:

def test_bar(caplog):with caplog.at_level(logging.CRITICAL, logger="root.baz"):pass

最后,测试运行期间发送给记录器的所有日志都以两种日志的形式在设备上可用。LogRecord实例和最终日志文本。当您想断言消息内容时,这很有用:

def test_baz(caplog):func_under_test()for record in caplog.records:assert record.levelname != "CRITICAL"assert "wally" not in caplog.text

有关日志记录的所有可用属性,请参阅日志记录。LogRecord类。
如果您只想确保某些消息以给定的记录器名称记录,并具有给定的严重性和消息,您还可以使用record_tuples:

def test_foo(caplog):logging.getLogger().info("boo %s", "arg")assert caplog.record_tuples == [("root", logging.INFO, "boo arg")]

您可以调用caplog.clear()重置测试中捕获的日志记录:

def test_something_with_clearing_records(caplog):some_method_that_creates_log_records()caplog.clear()your_test_method()assert ["Foo"] == [rec.message for rec in caplog.records]

caplog.records 属性只包含当前阶段的记录,因此在setup阶段中,它只包含设置日志,与callteardown 阶段相同。

要从其他阶段访问日志,请使用caplog.get_records(when)方法。
例如,如果您希望确保使用某个固定装置的测试不会记录任何警告,您可以在拆卸过程中检查设置和调用阶段的记录,如下所示:

@pytest.fixture
def window(caplog):window = create_window()yield windowfor when in ("setup", "call"):messages = [x.message for x in caplog.get_records(when) if x.levelno == logging.WARNING]if messages:pytest.fail(f"warning messages encountered during testing: {messages}")

完整的 API 参考 pytest.LogCaptureFixture https://docs.pytest.org/en/stable/reference/reference.html#pytest.LogCaptureFixture

实时日志

通过将log_cli配置选项设置为true,pytest将在日志记录直接发送到控制台时输出日志记录。

您可以通过传递--log-cli-level来指定日志记录的级别,对于该级别,具有相同或更高级别的日志记录将打印到控制台。
此设置接受日志记录文档中显示的日志记录级别名称或数值。此外,您还可以指定--log-cli-format--log-cli-date-format,如果没有提供,
这些格式将镜像并默认为--log-format--log-date-format,但仅应用于控制台日志处理程序。

还可以在配置INI文件中设置所有CLI日志选项。选项名称为:

log_cli_levellog_cli_formatlog_cli_date_format

如果您需要记录对文件的整个测试套件日志调用,可以传递--log-file=/path/to/log/file
此日志文件以写模式打开,这意味着它将在每次运行测试会话时被覆盖。请注意,日志文件位置的相对路径(无论是在CLI上传递的还是在配置文件中声明的)始终相对于当前工作目录进行解析。

您还可以通过传递--logfile-level来指定日志文件的日志记录级别。此设置接受日志记录文档中显示的日志记录级别名称或数值。

此外,您还可以指定--log-file-format--log-file-date-format,它们等于--log-format--log-date-format ,但应用于日志文件日志处理程序。
也可以在配置INI文件中设置所有日志文件选项。选项名称为:

log_filelog_file_levellog_file_formatlog_file_date_format

您可以调用set_log_path() t动态自定义log_file路径。该功能被认为是实验性的。

自定义颜色

如果启用彩色终端输出,则日志级别为彩色。通过add_color_level()支持更改默认颜色或在自定义日志级别上添加颜色。例子:

@pytest.hookimpl
def pytest_configure(config):logging_plugin = config.pluginmanager.get_plugin("logging-plugin")# Change color on existing log levellogging_plugin.log_cli_handler.formatter.add_color_level(logging.INFO, "cyan")# Add color to a custom log level (a custom log level `SPAM` is already set up)logging_plugin.log_cli_handler.formatter.add_color_level(logging.SPAM, "blue")

Warning
This feature and its API are considered experimental and might change between releases without a deprecation notice.
警告
此特性及其API被认为是实验性的,可能会在不同版本之间进行更改,而不会发出弃用通知。

说明

这个特性是作为pytest-catchlog插件的替代品引入的,它们相互冲突。引入此功能时,与pytest-capturelog的向后兼容性API已被删除,因此如果出于此原因您仍然需要pytest-catchlog,您可以通过在pytest.ini中添加以下内容来禁用内部功能:

[pytest]addopts=-p no:logging

pytest 3.4中的不兼容更改

该功能在3.3中引入,在社区反馈后,在3.4中进行了一些不兼容的更改:

  • 除非Log_level配置或--log-level命令行选项明确请求,否则不再更改日志级别。这允许用户自己配置记录器对象。设置log_level将设置全局捕获的级别,因此如果特定测试需要的级别低于此级别,请使用caplog.set_level()功能,否则该测试将容易失败。
  • 实时日志现在在默认情况下被禁用,并且可以通过将log_cli 配置选项设置为true来启用。启用后,详细信息会增加,因此每个测试的日志记录都是可见的。
  • 实时日志现在被发送到sys.stdout ,不再需要-s命令行选项。

如果要部分恢复3.3版的日志记录行为,可以将以下选项添加到ini文件中:

[pytest]
log_cli=true
log_level=NOTSET

以上知识点来自官方文档https://docs.pytest.org/en/stable/how-to/logging.html

这篇关于pytest文档81 - 如何管理Captured logging日志的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/603690

相关文章

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点。本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP