最近、pythonテストのためにpy.testに切り替えました(これは素晴らしいことです)。ただし、ログ出力(つまり、組み込みpythonロギングモジュール)を制御する方法を理解しようとしています。 pytest-capturelogがインストールされていて、これは期待どおりに動作し、ログを表示したい場合は--nologcaptureオプションを渡します。
ただし、ロギングレベル(たとえば、情報、デバッグなど)をどのように制御し、ロギングをフィルタリングしますか(特定のモジュールのみに関心がある場合)。これを達成するためのpy.testの既存のプラグインはありますか、それとも独自に作成する必要がありますか?
ありがとう、ジョニー
pytest-capturelogプラグイン をインストールして使用すると、pytest/loggingのニーズのほとんどを満たすことができます。何かが足りない場合、比較的簡単に実装できるはずです。
Holgerが言ったように pytest-capturelog を使用できます:
def test_foo(caplog):
caplog.setLevel(logging.INFO)
pass
Pytest-capturelogを使用したくない場合は、ロギング構成でstdout StreamHandler を使用して、pytestがログ出力をキャプチャできるようにします。次に例を示します basicConfig
logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)
少し遅い投稿ですが、簡単なドロップインロギングキャプチャソリューションとして pytest-logging をお勧めします。 pip install pytest-logging
の後で、(画面に表示される)ログの詳細度を制御できます。
$ py.test -s -v tests/your_test.py
$ py.test -s -vv tests/your_test.py
$ py.test -s -vvvv tests/your_test.py
etc ... NB--s
フラグは重要です。フラグがない場合、py.test
はすべてのsys.stderr
情報を除外します。
さらに後の貢献の少し: pytest-logger を試すことができます。このプラグインの目新しさはファイルシステムへのロギングです:pytestは各テスト項目のノードIDを提供し、これを使用してテストセッションログディレクトリを整理できます(pytest tmpdir機能とそのテストケース開始/終了フックを使用)。
端末とファイルシステムの複数のハンドラー(レベル付き)を個別に構成し、ロガー/レベルをフィルター処理するための独自のコマンドラインオプションを提供して、特定のテスト環境で機能させることができます。デフォルトでは、すべてをファイルシステムに記録し、一部を端末に記録できます。必要に応じて、--log
オプションを使用してセッションごとに変更できます。ユーザーがフックを定義していない場合、プラグインはデフォルトでは何もしません。