Сделайте регистрацию показаний бегущего носа, даже если тесты пройдут

Я использую 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 должен выполнить трюк.