Подтвердить что ты не робот

Управление протоколом py.test

Недавно мы переключились на py.test для тестирования python (что является фантастическим btw). Тем не менее, я пытаюсь выяснить, как управлять выходом журнала (т.е. Встроенным модулем регистрации python). У нас установлен pytest-capturelog, и это работает так, как ожидалось, и когда мы хотим видеть журналы, мы можем передать параметр --nologcapture.

Однако, как вы контролируете уровень ведения журнала (например, info, debug и т.д.), а также фильтруете регистрацию (если вас интересует только конкретный модуль). Существуют ли существующие плагины для py.test для достижения этого или нам нужно катить наши собственные?

Спасибо, Jonny

4b9b3361

Ответ 1

Установка и использование плагина pytest-capturelog может удовлетворить большинство ваших потребностей в pytest/logging. Если что-то не хватает, вы должны легко реализовать его.

Ответ 2

Как сказал Хольгер, вы можете использовать pytest-capturelog:

def test_foo(caplog):
    caplog.setLevel(logging.INFO)
    pass

Если вы не хотите использовать pytest-capturelog, вы можете использовать stdout StreamHandler в вашем протоколе ведения журнала, чтобы pytest захватил вывод журнала. Вот пример basicConfig

logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)

Ответ 3

Немного поздний вклад, но я могу порекомендовать pytest-logging для простого решения для регистрации каротажа. После pip install pytest-logging вы можете контролировать многословие ваших журналов (отображается на экране) с помощью

$ py.test -s -v tests/your_test.py
$ py.test -s -vv tests/your_test.py
$ py.test -s -vvvv tests/your_test.py

и т.д. NB - флаг -s важен, без него py.test будет отфильтровывать всю информацию sys.stderr.

Ответ 4

Немного более поздний вклад: вы можете попробовать pytest-logger. Новинка этого плагина регистрируется в файловой системе: pytest предоставляет nodeid для каждого тестового элемента, который может быть использован для организации каталога журналов тестовых сеансов (с помощью средства pytest tmpdir, а также для запуска и завершения тестовых тестов).

Вы можете настроить несколько обработчиков (с уровнями) для терминалов и файловой системы отдельно и предоставить собственные параметры cmdline для фильтрации журналов/уровней, чтобы они работали для вашей конкретной тестовой среды - например, по умолчанию вы можете записывать все в файловую систему и небольшую часть на терминал, которые могут быть изменены на основе сеанса с помощью опции --log, если это необходимо. Плагин ничего не делает по умолчанию, если пользователь не определяет крючки.

Ответ 5

У Pytest теперь есть встроенная поддержка управления caplog через caplog; нет необходимости для плагинов.

Вы можете указать уровень ведения журнала для определенного регистратора или по умолчанию для корневого регистратора:

import pytest

def test_bar(caplog):
    caplog.set_level(logging.CRITICAL, logger='root.baz')

Pytest также записывает выходные данные журнала в caplog.records чтобы вы могли утверждать зарегистрированные уровни и сообщения. Для получения дополнительной информации смотрите официальную документацию здесь и здесь.