unittest のログレベルを変更する 質問する

unittest のログレベルを変更する 質問する

unittestはログレベルを次のように設定しているという印象を受けます(ただし、そのドキュメントは見つかりません)。WARNING すべての伐採業者向け。 私はしたいと思います:

  • コマンドライン(テスト実行時)またはテストモジュール自体から、すべてのロガーのログレベルを指定できる
  • unittest がアプリケーションのログレベルをいじらないようにします。テストを実行するときは、アプリケーションを実行するときと同じログ出力 (同じレベル) を取得する必要があります。

どうすればこれを実現できるでしょうか?

ベストアンサー1

定義したクラスをunittest使用しない限り、それ自体はログ記録に何も行わないと思います。この単純なプログラムは以下を示しています。_CapturingHandler

import logging
import unittest

logger = logging.getLogger(__name__)

class MyTestCase(unittest.TestCase):
    def test_something(self):
        logger.debug('logged from test_something')


if __name__ == '__main__':
    # DEBUG for demonstration purposes, but you could set the level from
    # cmdline args to whatever you like
    logging.basicConfig(level=logging.DEBUG, format='%(name)s %(levelname)s %(message)s')
    unittest.main()

実行すると、次のように出力されます

__main__ DEBUG logged from test_something
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

予想どおり、レベルでイベントがログに記録されていることを示していますDEBUG。したがって、問題は、テスト対象のコード、またはログ記録構成を変更したり、 をリダイレクトしたりする他のテスト ランナーなど、他の何かに関連している可能性がありsys.stdoutますsys.stderr。テスト環境に関する詳細情報を提供する必要がある可能性があります。または、問題を示す最小限のプログラムを提供するとさらに良いでしょう (上記の例では、unittestそれ自体では説明している問題を引き起こさないことが示されています)。

おすすめ記事