Pytest: Как перенаправить журналы в консоль и файл tmp, созданный с помощью фикстуры tmp_path - PullRequest
2 голосов
/ 07 февраля 2020

Я пишу один скрипт, используя pytest Framework, где мне нужно перенаправить журналы на консоль, а также временный файл, созданный с помощью fixture (tmp_path). Я написал ниже код, файл создается, но журналы консоли или журналы в файлах не наблюдаются:

import os
import logging
from datetime import datetime

global LOG_FILENAME

script_name = os.path.splitext(os.path.basename(__file__))[0]
LOG_FILENAME = datetime.now().strftime(script_name + "_%H_%M_%S_%d_%m_%Y.log")

def test_create_file(tmp_path):
    d = tmp_path / "Logs"
    d.mkdir()
    p = d / LOG_FILENAME

    p.write("content")
    logging.info(p.strpath)
    logging.basicConfig(filename=str(p), level=logging.INFO)
    logging.info(str(p))

    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
    console.setFormatter(formatter)
    logging.getLogger("").addHandler(console)

    logging.info("This is log1 message")
    logging.info("This is log2 message")
    assert p.read_text() == "content"

Вывод, который я ожидал, что мои сообщения log1 и log2 должны быть захвачены в файле журнала, который я создал выше, а также видно в консоли. Но ни одно из требований не выполнено. Ниже мой вывод:

nishantsaha@ztphost:~/home/nishantsaha/tests$ python3 -m pytest -v test_tmpdir.py -s
========================================================== test session starts ==========================================================
platform linux -- Python 3.6.9, pytest-5.1.2, py-1.8.0, pluggy-0.13.1 -- /usr/bin/python3
cachedir: .pytest_cache
Test order randomisation NOT enabled. Enable with --random-order or --random-order-bucket=<bucket_type>
metadata: {'Python': '3.6.9', 'Platform': 'Linux-4.15.0-76-generic-x86_64-with-Ubuntu-18.04-bionic', 'Packages': {'pytest': '5.1.2', 'py': '1.8.0', 'pluggy': '0.13.1'}, 'Plugins': {'random-order': '1.0.4', 'json-report': '1.2.0', 'metadata': '1.8.0'}}
rootdir: /home/nishantsaha/tests
plugins: random-order-1.0.4, json-report-1.2.0, metadata-1.8.0
collected 1 item

test_tmpdir.py::test_create_file FAILED

Любые указатели на то, что мне не хватает и как это решить? Если я использую тот же код, но без фикстуры, в этом случае наблюдаются журналы в файл и консоль

1 Ответ

0 голосов
/ 17 февраля 2020

Вам необходимо установить уровень вашего регистратора ("") на INFO или ниже, только уровня обработчика настройки недостаточно.

logging.getLogger("").setLevel('INFO')

По умолчанию уровень регистратора равен WARNING (30). Эффективный уровень - это пересечение уровня вашего регистратора и уровня обработчика, предлагаемого getEffectiveLevel().

...