pytestでcaplogが動かない

システム開発Tips

問題点

loggingのdictConfigを多重で噛ましていると、caplogの設定が飛んじゃうみたいですね。
pytestでUTコードを書いててうーんってなりました。

問題のコード

mainからTestAを実行するようなコードを書いてて、
TestAのみの試験を行ったらcaplogにログがキャプチャされていなかった。
propagateはFalseで設定

# module A
from logging import config, getLogger
config.dictConfig({"dict settings..."}) # ★
class TestA
    def test():
        getLogger().info("TestA")
# module main
from logging import config, getLogger
config.dictConfig({"dict settings..."})

from module_a import TestA
class Test
    def test():
        getLogger().info("Test")
        TestA().test()
# pytest code
import logging
from module_a import TestA
def test_test_a_log(self, caplog):
    caplog.set_level(logging.INFO)
    # caplog.record_tuples is length 0.
    assert len(caplog.record_tuples) == 1

※ちな、ソースコードは動作確認していない適当なものです。雰囲気だけ残しておく。

★の箇所をコメントアウトにすると動作する。

考えてみたらそうかな?とも思ったけれど、なんだか動きが腑に落ちないなぁ。。。

フォローお願いします!

コメント

タイトルとURLをコピーしました