1. ホーム
  2. python

[解決済み] pytestテスト内のロギング

2022-04-26 17:28:05

質問

私は、いくつかの状態変数を調べるために、テスト関数内にいくつかのロギング文を置きたいと思います。

次のようなコードがあります。

import pytest,os
import logging

logging.basicConfig(level=logging.DEBUG)
mylogger = logging.getLogger()

#############################################################################

def setup_module(module):
    ''' Setup for the entire module '''
    mylogger.info('Inside Setup')
    # Do the actual setup stuff here
    pass

def setup_function(func):
    ''' Setup for test functions '''
    if func == test_one:
        mylogger.info(' Hurray !!')

def test_one():
    ''' Test One '''
    mylogger.info('Inside Test 1')
    #assert 0 == 1
    pass

def test_two():
    ''' Test Two '''
    mylogger.info('Inside Test 2')
    pass

if __name__ == '__main__':
    mylogger.info(' About to start the tests ')
    pytest.main(args=[os.path.abspath(__file__)])
    mylogger.info(' Done executing the tests ')

次のような出力が得られます。

[bmaryada-mbp:/Users/bmaryada/dev/platform/main/proto/tests/tpch $]python minitest.py
INFO:root: About to start the tests 
======================================================== test session starts =========================================================
platform darwin -- Python 2.6.2 -- pytest-2.0.0
collected 2 items 

minitest.py ..

====================================================== 2 passed in 0.01 seconds ======================================================
INFO:root: Done executing the tests 

からのロギングメッセージだけが '__name__ == __main__' ブロックはコンソールに転送されます。

を強制する方法はありますか? pytest は、テストメソッドからもコンソールにログを出力するのでしょうか?

解決方法は?

私の場合、以下のような出力が得られました。[snip -> 例が不正確でした]。

編集:どうやら -s オプションを指定すると、標準出力をキャプチャしないようになります。ここでは(py.testがインストールされていない)、以下のオプションで十分でした。 python pytest.py -s pyt.py .

あなたのコードに必要なのは -sargs から main :

 pytest.main(args=['-s', os.path.abspath(__file__)])

については、py.testのドキュメントを参照してください。 出力のキャプチャ .