2011-01-12 8 views
29

いくつかの状態変数を調べるために、テスト関数内にいくつかのロギングステートメントを入れたいと思います。py.testテストでのログ

は、私は、次のコードスニペットを持っている:

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 ') 

私は次の出力を得る:'__name__ == __main__'ブロックからのみのログメッセージがコンソールに送信します

[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 

お知らせ。

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

+2

py.testの作成者が投稿した[この回答](http://stackoverflow.com/a/11877951/148680)をご覧ください。彼は高度な汎用性を提供するpytestプラグインを提案しています。 – chb

答えて

17

私の作品は、ここで私が手出力です:[中略 - >の例が間違っていた]

編集:あなたがそれが標準出力をキャプチャしませんpy.testする-sオプションを渡すために持っているようだが。ここで(py.testはインストールされていません)、python pytest.py -s pyt.pyを使用すれば十分でした。あなたのコードの場合

は、あなたが必要とするすべてはargsmainにして-sを渡すことです:

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

capturing outputにpy.testのマニュアルを参照してください。

+0

申し訳ありません。私は急いでコードを貼り付けた。 'test_one'関数から 'assert 0 == 1'を削除して、 'problem'を確認してください。何らかの失敗(私が偽のアサートを強制することによって強制された)があるときだけ、py.testはロギング情報を出力するようです。 – superselector

+0

問題はありませんが、私はプログラム方法を探して、コマンドラインで修正する方法を発見しました。 – TryPyPy

+1

デフォルトの暗黙のstderrではなく、ログ出力をいくつかのファイルにリダイレクトすることもできます。 – hpk42

関連する問題