Ecco il mio codice:python - come posso reindirizzare l'output di unittest? soluzione più ovvia non funziona
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)
Quando eseguo questo, il contenuto di demo_test.stdout.log
è solo:
test one
test two
sullo schermo Vedo ancora l'output di 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)
Voglio che non ci sia uscita sullo schermo e tutto da registrare. (Sto eseguendo il test come cron job, quindi qualsiasi output su stdout o stderr causa l'invio di una e-mail, quindi voglio essere in grado di specificare esattamente quando ciò accade, il che significa che devo essere in grado di controllare l'unittest in questo Per quanto riguarda)
anche l'assegnazione di 'sys .__ stdout__' e' SYS. __stderr__' fallisce qui - Penso che sia impossibile reindirizzare l'output all'interno di Python stesso. – Eric