pytest - 从运行测试的 CLI 命令指定日志级别

新手上路,请多包涵

我和我的团队正在使用 Pytest + Jenkins 来自动化我们的产品测试。我们一直在使用 python 的标准日志记录库在测试期间、每次测试之前和之后等获取正确的日志消息。我们有多层日志记录,我们注销 ERROR、WARNING、INFO 和 DEBUG。我们记录器的默认值是 INFO。我们在测试的主要设置中创建记录器对象,并将其传递给创建的每个对象,因此我们所有的日志都进入同一个记录器。

到目前为止,当我们开发新功能或测试时,我们在本地以 DEBUG 模式工作,并在向我们的 SVN 提交新代码时将其更改回 INFO,但我正在尝试添加选项以使用 CLI 更改日志记录级别,但是我还没有发现任何容易实施的东西。我考虑过使用 Fixtures,但据我了解,这些仅用于测试本身,而不用于设置/拆卸阶段,并且创建日志时考虑的测试较少。关于如何向 CLI 命令添加 Pytest 选项以支持更改日志记录级别的任何 hack 或想法?

原文由 Avishay Cohen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 644
2 个回答

Pytest 3.5 引入了一个参数

pytest --log-cli-level=INFO

对于 3.5 之前的版本,您可以结合 pytest 命令行选项命令行示例中的 python 日志级别来执行以下操作:

将以下内容添加到 conftest.py

 import pytest
import logging

def pytest_addoption(parser):
    parser.addoption(
        "--log", action="store", default="WARNING", help="set logging level"
    )

@pytest.fixture
def logger():
    loglevel = pytest.config.getoption("--log")
    logger = logging.getLogger(__name__)

    numeric_level = getattr(
        logging,
        loglevel.upper(),
        None
    )
    if not isinstance(numeric_level, int):
        raise ValueError('Invalid log level: %s' % loglevel)

    logger.setLevel(numeric_level)
    return logger

然后在测试中请求 logger 夹具

def test_bla(logger):
    assert True
    logger.info("True is True")

然后像这样运行pytest

 py.test --log INFO

将日志级别设置为 INFO

原文由 Nils Werner 发布,翻译遵循 CC BY-SA 4.0 许可协议

试试 --log-cli-level=INFO

喜欢:

 pytest -vv -s --log-cli-level=INFO --log-cli-format="%(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)" --log-cli-date-format="%Y-%m-%d %H:%M:%S" ./test_file.py

原文由 EXLsunshine 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题