こんにちは。
野中やすおです。
caplogの使い方
今回の記事では、pytestのfixture(フィクスチャ)であるcaplogの使い方について扱いたいと思います。
caplogの公式ドキュメントは以下からアクセスできます。こちらも参照ください。
またfixtureとは、テストの前処理を行ってくれるpytestの機能の1つです。こちらの説明も公式ドキュメントを参照ください。
それでは論より証拠ということで、caplogを使ってみましょう!コードサンプルは以下のような形になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span style="font-family: Lato;"><code>from logging import LogCaptureFixture, INFO logger = getLogger(__name__) def sample(): logger.info('info') def test_sample_log(caplog: LogCaptureFixture): # 型アノテーションとしてLogCaptureFixtureを設定する caplog.set_level(INFO) # set_levelメソッドでログレベルを設定する sample() assert 'info' in caplog.text # 想定のログ内容が返ってきているかテスト</code></span> |
まずmypyを使って型アノテーションチェックを行っている方は、型アノテーションとしてcaplogにLogCaptureFixtureを設定しましょう。caplogは、LogCaptureFixtureインスタンスを返します。
次にset_levelメソッドでログレベルを設定します。今回は本体コードにlogger.infoを使っているためINFOを設定しました。またat_levelメソッドというのも存在します。
1 2 |
<span style="font-family: Lato;"><code>with caplog.at_level(INFO): sample()</code></span> |
at_levelは、上記のように一部にログレベルを設定したい場合に使うことができます。withステートメントが終了後、ログレベルは元に戻ります。
そしてテストを実施したい関数を呼び出し、想定のログ内容が返ってきているかチェックします。
caplogにはいくつかのプロパティ/メソッドが用意されていますが、今回の例では一番シンプルに「フォーマットされたログ出力を含む文字列が入っているかどうかを確かめる」caplog.textを使用しました。これで’info’という文字列がログとして出力されていることが確認され、テストがpassするはずです。