2015-09-14 7 views
16

passiere ich nosetests test.py bin mit Unit-Tests auszuführen:Machen Nase Test Runner show logging auch wenn Tests

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) 

Wenn der Test fehlschlägt, druckt er die Protokollierung Info aus. Ich kann --logging-filter verwenden nur einige Logger Filer aus:

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) 

Allerdings ist es nicht etwas zeigen, wenn Tests bestehen.

Ich möchte die Ausgabe eines bestimmten Loggers sehen, wenn Tests bestanden werden. Ich habe gefunden, dass ich -s verwenden kann, um allen stdout/stderr Text zu zeigen, der nicht genau ist, was ich brauche - es druckt alles. Ich habe versucht, mit verschiedenen Einstellungen wie --nologcapture, --nocapture oder --logging-filter zu spielen, aber ich konnte den gewünschten Effekt nicht erzielen.

+0

Das Logcapture-Plugin ist nur ~ 250 Zeilen. Sie können es wahrscheinlich leicht unterklassieren oder anpassen, um das zu tun, was Sie wollen. Sie finden es [hier] (https://github.com/nose-devs/nose/blob/master/nose/plugins/logcapture.py). – rkrzr

+0

@Fenikso Haben Sie eine Lösung für das Problem gefunden? – Stefan

+0

@Stefan Nein, es scheint nicht in Nase zu existieren. Ich benutze ein paar hässliche Workarounds, wenn nötig, zum Beispiel das Schreiben in eine Datei. – Fenikso

Antwort

14

nosetests --help macht dies nicht offensichtlich, aber die Antwort ist die --debug Flagge. Dieses Flag übernimmt als Argument den Namen des Loggers, von dem Sie Nachrichten erhalten möchten.

Hier ist eine leicht modifizierte Version des Codes des 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) 

Für dieses Beispiel nosetests test.py --debug=show.this sollte es tun.

+9

Wie würden Sie das für den Root-Logger tun (zB 'logging.debug ('HELP')') - Ich habe versucht --debug = root' und das didn Es scheint nicht zu funktionieren. –

Verwandte Themen