2015-09-14 101 views
16

我使用nosetests test.py運行單元測試:使鼻子的測試運行記錄顯示,即使測試通過

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',那didn似乎沒有用。 –

相關問題