web-dev-qa-db-ja.com

テストに合格した場合でも、鼻のテストランナーにログを表示させる

単体テストを実行するために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など、さまざまな設定で遊んでみましたが、思い通りの効果が得られませんでした。

25
Fenikso

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トリックを行う必要があります。

23
BrianTheLion