Pytest 日志记录忽略 pytest.ini 中的选项

2023-12-07

我正在运行一个测试:

pytest --capture=no --verbose --rootdir=testing/ testing/tests/docker_test.py

from /home/user/development/。该测试检查某些容器是否正在运行,并使用 Python 3.6 的默认日志记录框架。测试文件内的记录器配置如下:

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logging.basicConfig(level=logging.INFO, stream=sys.stdout, format="%(asctime)s %(levelname)s %(message)s")

在测试中我使用记录器如下:

logger.info(f"TEST SUCCESSFUL: container {container_name} is running")
logger.info(f"TEST SUCCESSFUL: all required containers are running")

Inside testing(根目录)我有一个文件pytest.ini:

[pytest]
log_level = INFO
log_cli_level = INFO
log_format = %(asctime)s %(levelname)s %(message)s
log_cli_format = %(asctime)s %(levelname)s %(message)s
log_date_format = %H:%M:%S
log_cli_date_format = %H:%M:%S

基本上我不希望任何日期出现在时间戳中,并且我希望 pytest 在运行测试时实时记录到命令行。

一方面我想知道什么asctime代表。它看起来像“ascii 时间”。我不需要标准化的时间戳,而是我在pytest.ini。这就是为什么我也尝试使用date, datetime and timestamp, 代替asctime,都会导致错误。所以我猜asctime是获取时间戳的唯一方法。

然而,pytest似乎忽略了我在我的文件中设置的所有选项pytest.ini文件,尽管它表明它在我运行测试时找到了该文件:

cachedir: testing/.pytest_cache
rootdir: /home/user/development/testing, inifile: pytest.ini

如何更改 pytest 日志记录中的时间戳?


我想你缺少的是log_cli = 1 (or true/yes/等)在你的pytest.ini。除此之外,通过您提供的配置,日志记录将以您指定的格式打印log_cli_format。您甚至可以减少pytest.ini to:

[pytest]
log_cli = 1
log_cli_level = INFO
log_cli_format = %(asctime)s %(levelname)s %(message)s
log_cli_date_format = %H:%M:%S

此外,上述配置将处理测试会话中的根记录器配置,因此您不需要在测试中配置记录器以进行实时记录。只需在测试中调用记录器即可:

import logging

def test_spam():
    logger = logging.getLogger(__name__)
    logger.info('spam')
    logger.warning('eggs')
    logger.error('bacon')

这将打印:

$ pytest
============================== test session starts ================================
platform linux -- Python 3.6.5, pytest-3.4.1, py-1.5.3, pluggy-0.6.0 -- /data/gentoo64/usr/bin/python3.6
cachedir: .pytest_cache
rootdir: /data/gentoo64/home/u0_a82/projects/stackoverflow/so-50677656, inifile: pytest.ini
plugins: mock-1.6.3, cov-2.5.1, flaky-3.4.0
collected 1 item

testing/tests/test_docker.py::test_logs
---------------------------------- live log call ----------------------------------
16:29:12 INFO spam
16:29:13 WARNING eggs
16:29:13 ERROR bacon
PASSED                                                                       [100%]
============================ 1 passed in 1.08 seconds =============================

我想知道 asctime 代表什么

The 记录文档对此有点简洁:

创建 LogRecord 时的人类可读时间。默认情况下,其格式为“2003-07-08 16:49:45,896”(逗号后面的数字是时间的毫秒部分)。

然而,asctime并不意味着记录将始终使用以下格式设置time.asctime- 这只是当您不将自己的日期时间格式传递给logging.Formatter (格式化程序构造函数中的第二个参数).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytest 日志记录忽略 pytest.ini 中的选项 的相关文章

随机推荐

  • UITableview ,动态部分和行

    想要动态创建一个 uitableview 其中一个部分有 2 行 我编写了这段代码 但我遇到了所有部分中仅重复前 2 行的问题 现在我有这行 0 1 gt 第 0 节 第 0 1 行 gt 第 1 节 第 0 1 行 gt 第 2 节 想要
  • Magento 购物车/magento 外部的会话数据

    这可能会有点令人困惑 因为我已经尝试了一切来使这项工作成功 我想要的只是我的品牌网站 domain com 中的一个链接 该链接显示我的 magento 1 5 1 购物车 domain com shop 中的数量我很容易提取产品数据和导航
  • Velocity 模板 - 正则表达式

    我刚刚开始在新工作中使用速度 但我真的不喜欢我已经发现的东西 在这一点上 我实际上更喜欢 freemarker X 不管怎样 我正在尝试做一个正则表达式 我看到了这点 搜索 正则表达式 但这并不完全是我正在做的实现 我没有任何对java的访
  • 我想在 ping 主机后获取 ping 执行时间和结果字符串

    我想在 ping 主机后获取 ping 执行时间和结果字符串 我该怎么做 long currentTime System currentTimeMillis boolean isPinged InetAddress getByName se
  • Defer 块未执行

    我在操场上执行以下快速代码 func A print Hello guard 1 2 else return defer print World A 我期待看到 Hello World 相反 只有Hello被打印 为什么是这样 我缺少什么
  • Matlab中两点之间的距离

    我有 2 个向量 一个的尺寸为 200 2 另一个的尺寸为 3 2 它们都是笛卡尔坐标系中的点 我想计算前 200 个点和其他 3 个点之间的距离并将它们存储在向量中 我正在使用这样的函数 for i 1 cur for j 1 200 L
  • 带有 SpriteKit 的 iOS 通用设备应用程序,如何缩放所有视图的节点?

    我想做一个景观 app to be 普遍的 以便精灵节点根据运行应用程序的任何视图大小按比例缩放 我想要一个完全程序化解决方案 因为我不喜欢IB 我的游戏非常简单 我不需要任何类型的滚动或缩放 因此整个游戏将始终存在并占据整个视图 我正在寻
  • java将数组刷新到jList中

    好的 我有一个 JList 内容是通过数组提供的 我知道如何向数组添加元素 但我想知道如何刷新 JList 或者甚至可能吗 我试过谷歌 import java applet Applet import java awt import jav
  • 如何满足迭代器特征界限才能在这里使用 Rayon?

    我正在尝试使用 Rayon 的并行化 Ramer Douglas Peucker 线简化算法par iter代替iter extern crate num traits use num traits Float ToPrimitive ex
  • 属性访问器[重复]

    这个问题在这里已经有答案了 之间有什么根本区别吗 public string Name get return name set name value and public string Name get set 您可以访问内部字段 在第二种
  • 使用循环创建菱形图案

    我正在尝试编写一个程序 该程序读取整数并使用星号显示给定边长的实心菱形 例如 如果边长是4 程序应该显示 这就是我正在尝试做的事情 它正在执行 但我似乎无法为程序提供正确的空间来正确显示菱形形状 userInput int input Pl
  • 如果 json 字段具有特殊字符(如点),则访问 json 字段值

    如果我有一个 json 文件 其中的字段具有特殊字符 在我的例子中是点 我如何访问空手道中的字段值 例如有一个名为 example json 的 json 文件 field1 field2 value2 field 3 value3 如果我
  • 根 ViewController 内的 UIViewController 不旋转

    我有一个 UIViewController 我想将其作为独立层添加到整个应用程序的顶部 所以我尝试在应用程序委托中使用 self window addSubview viewController view 将其添加到 UIWindow 中
  • 将 9 位值作为字节写入 C 中的文件

    我有一个整数值从 0 511 最多 9 位 的数组 我正在尝试将其写入文件fwrite 例如 对于数组 257 258 259 Which is 100000001 100000010 100000011 I am trying to wr
  • 设置配置文件的过期时间

    是否可以设置配置文件的到期日期 我正在公司内部进行试用 我想设定expiration审判结束的日期 而不是仅仅一年之后creation日期 是否有可能 或者总是需要一年的时间creation date 另外 如果无法设置expiration
  • 无法从 json 对象访问数据

    我已将 json 数据结构存储在具有单列的数据框中 名为json 数据在R中 所以我的 json 文本以这种格式存储 row 1 results formatted address Sahibzada Ajit Singh Nagar Pu
  • 使用 Dumper 不会触发故障

    当运行这样的代码时 use strict print Dumper something 编译和运行时没有打印任何内容 也没有发生错误 为什么会出现这种情况 为什么不strict阻止此代码运行 尽管 Dumper 未知 但为什么运行时没有错误
  • 在docker容器内运行maven集成测试

    在运行集成测试之前 我使用 dockerfile maven 插件将我的 jar 文件移动到 docker 容器内 但是 mvn verify 命令构建图像并运行集成测试 结果测试失败 有人可以帮我在运行集成测试之前运行 docker 镜像
  • Python 中的节拍器脚本中的计时问题(使用 Pygame)[重复]

    这个问题在这里已经有答案了 我正在尝试编写一个节拍器脚本 它可以为我提供音频反馈并将 MIDI 消息发送到合成器 我用Python 2 7 5 and Pygame 1 9 1 release在 Linux Mint 16 上 我对 MID
  • Pytest 日志记录忽略 pytest.ini 中的选项

    我正在运行一个测试 pytest capture no verbose rootdir testing testing tests docker test py from home user development 该测试检查某些容器是否正