Python unittestの中でloggingを使う¶
2016年09月25日
環境¶
Python 3.5.2(Ubuntu 16.04LTS(i386))
in setUp()¶
setUp()の中では通常通りloggerを開く。streamHandlerだと何も出ないので FileHandlerなどで他所へ出力してください。この例ではlog_fileで指定した ファイルへ出力しています。
def setUp(self):
"""Open serial port."""
self.ser = serial.Serial(com_port,
com_boud,
timeout=com_timeout)
self.logger = getLogger(__name__)
formatter = Formatter('%(asctime)s - '
'%(levelname)s - '
'%(filename)s:%(lineno)d - '
'%(funcName)s - '
'%(message)s')
self.sh = FileHandler(log_file, delay=True)
self.sh.setLevel(DEBUG)
self.sh.setFormatter(formatter)
self.logger.setLevel(DEBUG)
self.logger.addHandler(self.sh)
tearDown()で扱えるよう、shとloggerをself.sh、self.loggerとします。
in tearDown()¶
sh.close()して、loggerからshをremoveHandler()します。
sh.close()しないと2つ目以降のtestを実行する時にResouce warnng unclose fileと怒られます(実行はできるが、tail -f で追えない)。
Handlerをremoveしないと、当該suite内でテストを実行するたびに Handlerが追加されてログ出力がダブります。
def tearDown(self):
"""Cosing serial port."""
self.ser.close()
self.sh.close();
self.logger.removeHandler(self.sh)
注意¶
setUp()とtearDown()なので、当然ながら 各テストごとにログのセットとクローズが走ります。