Как я могу видеть сообщения журнала при модульном тестировании в PyCharm?

Я уверен, что это простое исправление, но я хочу просматривать сообщения журнала в консоли PyCharm при запуске unit test. Модули, которые я тестирую, имеют свои собственные регистраторы, и обычно я устанавливал корневой регистратор, чтобы поймать отладочные сообщения на определенном уровне и передавать другие журналы в файл. Но я не могу понять, как это работает с модульными тестами.

Я использую модуль unittest2 и используя автоматическое обнаружение теста PyCharm (которое, вероятно, основано на носе, но я не знаю).

Я пробовал обманывать конфигурацию запуска, но, похоже, нет простого способа сделать это.

Документация PyCharm не особенно полезна здесь, если кто-то из вас работает там.


В редакции: появляется, что консоль ловит сообщения журнала критического уровня. Я хочу знать, есть ли способ настроить это, чтобы поймать сообщения уровня отладки.


Эта статья (Pycharm unit test интерактивная командная строка отладки не работает) предлагает добавить параметр -s к конфигурации сборки, которая не создает желаемый результат.

Ответы

Ответ 1

Единственное решение, которое я нашел, - это выполнить обычную настройку ведения журнала в верхней части файла с помощью тестов в ней (при условии, что вы просто запускаете один тестовый или тестовый класс): logging.basicConfig(level=logging.DEBUG). Удостоверьтесь, что вы поместили это перед большинством операторов импорта или по умолчанию для тех модулей, которые были установлены по умолчанию для этих модулей (это было сложно определить!).

Ответ 2

Мне также нужно добавить параметр --nologcapture в nosetests как параметр в pycharm 2016.3.2

Запустить > Изменить значения координат > По умолчанию > Тесты Python > Носители: активируйте опцию check for Prams и добавьте --nologcapture

Ответ 3

В редактировании конфигураций:

  • удалить старые конфигурации
  • перейти к настройкам по умолчанию/тестам Python/NoseTests
  • добавить --nologcapture к "дополнительным аргументам"

работал как "очарование" для меня в pyCharm 2017.2.3

спасибо бот

Ответ 4

Моя проблема была похожей, я только видел сообщения с уровнем ПРЕДУПРЕЖДЕНИЕ или выше при выполнении тестов в PyCharm. Коллега предложил настроить регистратор в __init__.py, который находится в каталоге моих тестов.

# in tests/__init__.py
import logging
import sys

# Reconfiguring the logger here will also affect test running in the PyCharm IDE
log_format = '%(asctime)s %(levelname)s %(filename)s:%(lineno)d %(message)s'
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG, format=log_format)

Тогда я могу просто войти в тестовый код, например:

import logging
logging.info('whatever')

Ответ 5

Добавьте обработчик потока, указывающий на sys.stdout, если запущен doctest или pytest:

    import logging
    import sys
    logger = logging.getLogger()

    def setup_doctest_logger(log_level:int=logging.DEBUG):
        """

        :param log_level:
        :return:

        >>> logger.info('test')     # there is no output in pycharm by default
        >>> setup_doctest_logger()
        >>> logger.info('test')     # now we have the output we want
        test

        """
        if is_pycharm_running():
            logger_add_streamhandler_to_sys_stdout()
        logger.setLevel(log_level)

    def is_pycharm_running()->bool:
        if ('docrunner.py' in sys.argv[0]) or ('pytest_runner.py' in sys.argv[0]):
            return True
        else:
            return False

    def logger_add_streamhandler_to_sys_stdout():
        stream_handler=logging.StreamHandler(stream=sys.stdout)
        logger.addHandler(stream_handler)