Как я могу видеть сообщения журнала при модульном тестировании в 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)