2015-09-14 2 views
16

を渡しても、鼻のテストランナーショーのロギングを行います。テストは、私はユニットテストを実行するために<code>nosetests test.py</code>を使用しています

import unittest 
import logging 


class Test(unittest.TestCase): 
    def test_pass(self): 
     logging.getLogger('do_not_want').info('HIDE THIS') 
     logging.getLogger('test').info('TEST PASS') 
     self.assertEqual(True, True) 

    def test_fail(self): 
     logging.getLogger('do_not_want').info('HIDE THIS') 
     logging.getLogger('test').info('TEST FAIL') 
     self.assertEqual(True, False) 

テストが失敗し、それはすべてのログ情報を出力します。私はいくつかのロガーをファイラーする--logging-filterを使用することができます。テストに合格したときに

nosetests test.py --verbosity=2 --logging-filter=test 
test_fail (test.Test) ... FAIL 
test_pass (test.Test) ... ok 

====================================================================== 
FAIL: test_fail (test.Test) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File ".../test.py", line 14, in test_fail 
    self.assertEqual(True, False) 
AssertionError: True != False 
-------------------- >> begin captured logging << -------------------- 
test: INFO: TEST FAIL 
--------------------- >> end captured logging << --------------------- 

---------------------------------------------------------------------- 
Ran 2 tests in 0.001s 

FAILED (failures=1) 

しかし、それは何も表示されません。

テストが合格すると、特定のロガーの出力が表示されます。私は-sを使って、私が必要とするものではないstdout/stderrのテキストをすべて表示できることを発見しました。 --nologcapture--nocapture--logging-filterなどのさまざまな設定で試してみましたが、希望の効果を得ることができませんでした。

+0

logcaptureプラグインは約250行です。あなたはおそらくサブクラス化するか、それをあなたが望むことをするために非常に簡単に適応させることができます。あなたはそれを見つけることができます[ここ](https://github.com/nose-devs/nose/blob/master/nose/plugins/logcapture.py)。 – rkrzr

+0

@Fenikso問題の解決策を見つけましたか? – Stefan

+0

@Stefanいいえ、それはノーズには存在していないようです。私はファイルへの書き込みなど、必要に応じていくつかの醜い回避策を使用しています。 – Fenikso

答えて

14

nosetests --helpこのことは明白ではありませんが、回答は--debugフラグです。このフラグは、メッセージを受信したいロガーの名前を引数としてとります。ここで

はOPのコードを少し変更したバージョンです。この例では

# test.py 
import unittest 
import logging 

class Test(unittest.TestCase): 
    def test_pass(self): 
     logging.getLogger('hide.this').info('HIDE THIS') 
     logging.getLogger('show.this').info('TEST PASS') 
     self.assertEqual(True, True) 

    def test_fail(self): 
     logging.getLogger('hide.this').info('HIDE THIS') 
     logging.getLogger('show.this').info('TEST FAIL') 
     self.assertEqual(True, False) 

nosetests test.py --debug=show.thisはトリックを行う必要があります。

+9

ルートロガーの場合、これはどのように行いますか?(例: 'logging.debug( 'HELP')') - '--debug = root'を試しました。うまくいきません。 –

関連する問題

 関連する問題