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__ und sys.__stderr__ hier ausfällt - ich denke, es ist unmöglich, umleiten der Ausgabe in python selbst.
InformationsquelleAutor jononomo | 2013-01-09
Schreibe einen Kommentar