python - wie kann ich die Umleitung der Ausgabe von unittest? Naheliegende Lösung funktioniert nicht
Hier ist mein code:
import unittest
import sys
import os
class DemoTest(unittest.TestCase):
def test_one(self):
print "test one"
self.assertTrue(True)
def test_two(self):
print "test two"
self.assertTrue(False)
if __name__ == '__main__':
dirpath = os.path.dirname(os.path.abspath(__file__))
sys.stdout = open(dirpath+'/test_logs/demo_test.stdout.log', 'w')
sys.stderr = open(dirpath+'/test_logs/demo_test.stderr.log', 'w')
test_program = unittest.main(verbosity=0, exit=False)
Wenn ich diese ausführe, wird der Inhalt der demo_test.stdout.log
ist nur:
test one
test two
auf dem Bildschirm sehe ich noch die Ausgabe von unittest:
======================================================================
FAIL: test_two (__main__.DemoTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "demotest.py", line 12, in test_two
self.assertTrue(False)
AssertionError: False is not true
----------------------------------------------------------------------
Ran 2 tests in 0.000s
FAILED (failures=1)
Ich will es zu sein, keine Ausgabe auf dem Bildschirm und alles, was protokolliert werden. (Ich bin mit den test als cron-job, so dass jede Ausgabe auf stdout oder stderr bewirkt, dass eine E-Mail gesendet werden, also ich möchte in der Lage sein anzugeben, Wann genau das passiert, was bedeutet, dass ich in der Lage sein müssen zu kontrollieren, unittest in dieser Hinsicht.)
- Auch die Zuordnung
sys.__stdout__
undsys.__stderr__
hier ausfällt - ich denke, es ist unmöglich, umleiten der Ausgabe in python selbst.
Du musst angemeldet sein, um einen Kommentar abzugeben.
redirect stderr, z.B.:
unittest
läuft Ihr test-code in einer sandbox umschließt, die std-streams. Sie werden Umleitung der Ausgabe Ihres test-code, aberunittest
ist das egal, dennunittest
in der Regel nur erfasst Ihre Ausgabe, als im Grunde, dass der Kind-Prozess dann regurgitates es der Kontext, der es aufgerufen. Die Ausgabe, die Sie sehen, vonunittest
selbst, völlig unabhängig von dem, was Sie tun, in den test-code.Lösen es in deinem testcode, könnten Sie auch Folgendes tun:
TextTestRunner(stream=sys.stdout)
ist genau das, was mir fehlte. Danke!