Сделайте регистрацию показаний бегущего носа, даже если тесты пройдут
Я использую nosetests test.py
для запуска модульных тестов:
import unittest
import logging
class Test(unittest.TestCase):
def test_pass(self):
logging.getLogger('do_not_want').info('HIDE THIS')
logging.getLogger('test').info('TEST PASS')
self.assertEqual(True, True)
def test_fail(self):
logging.getLogger('do_not_want').info('HIDE THIS')
logging.getLogger('test').info('TEST FAIL')
self.assertEqual(True, False)
Когда тест завершается с ошибкой, он распечатывает всю информацию о регистрации. Я могу использовать --logging-filter
для фильтрации только некоторых регистраторов:
nosetests test.py --verbosity=2 --logging-filter=test
test_fail (test.Test) ... FAIL
test_pass (test.Test) ... ok
======================================================================
FAIL: test_fail (test.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File ".../test.py", line 14, in test_fail
self.assertEqual(True, False)
AssertionError: True != False
-------------------- >> begin captured logging << --------------------
test: INFO: TEST FAIL
--------------------- >> end captured logging << ---------------------
----------------------------------------------------------------------
Ran 2 tests in 0.001s
FAILED (failures=1)
Однако при тестировании ничего не отображается.
Я хотел бы видеть вывод одного конкретного регистратора при прохождении тестов. Я обнаружил, что я могу использовать -s
, чтобы показать весь текст stdout/stderr, который не совсем то, что мне нужно - он печатает все. Я пытался играть с различными настройками, такими как --nologcapture
, --nocapture
или --logging-filter
, но я не смог получить желаемый эффект.
Ответы
Ответ 1
nosetests --help
не делает это очевидным AT ALL, но ответ - это флаг --debug
. Этот флаг принимает в качестве аргумента имя регистратора, из которого вы хотите получать сообщения.
Здесь немного измененная версия кода OP:
# test.py
import unittest
import logging
class Test(unittest.TestCase):
def test_pass(self):
logging.getLogger('hide.this').info('HIDE THIS')
logging.getLogger('show.this').info('TEST PASS')
self.assertEqual(True, True)
def test_fail(self):
logging.getLogger('hide.this').info('HIDE THIS')
logging.getLogger('show.this').info('TEST FAIL')
self.assertEqual(True, False)
В этом примере nosetests test.py --debug=show.this
должен выполнить трюк.