gpt4 book ai didi

python-3.x - 在 Pytest fixture 中使用时,Python 日志记录不会记录

转载 作者:行者123 更新时间:2023-12-04 16:45:21 26 4
gpt4 key购买 nike

我有一个 Pytest + Selenium 项目,我想使用日志记录模块。

但是,当我像这样在 conftest.py 中设置登录时

@pytest.fixture(params=["chrome"], scope="class")
def init_driver(request):
start = datetime.now()
logging.basicConfig(filename='.\\test.log', level=logging.INFO)
if request.param == "chrome":
options = ChromeOptions()
options.add_argument("--start-maximized")
web_driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
if request.param == "firefox":
web_driver = webdriver.Firefox(GeckoDriverManager().install())
request.cls.driver = web_driver
yield
end = datetime.now()
logging.info(f"{end}: --- DURATION: {end - start}")
web_driver.close()

看起来 test.log 根本没有创建,也没有错误消息或其他指示出了问题。

我怎样才能让它工作?

最佳答案

首先有两个事实:

  1. logging.basicConfig() 只有在调用它之前没有进行日志记录配置时才有效(目标记录器没有注册处理程序)。

  2. pytest 将自定义处理程序注册到根记录器,以便能够捕获代码中发出的日志记录,因此您可以测试您的程序记录行为是否正确。

这意味着在 fixture 中调用 logging.basicConfig(filename='.\\test.log', level=logging.INFO) 不会执行任何操作,因为测试运行已经开始并且根记录器具有由 pytest 附加的处理程序。因此,您有两个选择:

  1. 完全禁用内置的 logging 插件。这将停止日志记录捕获 - 如果您在分析发出的日志时进行测试(例如使用 caplog 固定装置),这些将停止工作。调用:

    $ pytest -p no:logging ...

    您可以将标志保存在 pyproject.toml 中,以便自动应用:

    [tool.pytest.ini_options]
    addopts = "-p no:logging"

    或者在pytest.ini中:

    [pytest]
    addopts = -p no:logging
  2. 配置和使用live logging . pyproject.toml 中的配置,相当于您的 logging.basicConfig() 调用:

    [tool.pytest.ini_options]
    log_file = "test.log"
    log_file_level = "INFO"

    pytest.ini 中:

    [pytest]
    log_file = test.log
    log_file_level = INFO

    当然,在这种情况下,logging.basicConfig() 行可以从 init_driver fixture 中删除。

关于python-3.x - 在 Pytest fixture 中使用时,Python 日志记录不会记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66490058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com