Đây là mã của tôi:python - làm thế nào tôi có thể chuyển hướng đầu ra của unittest? giải pháp rõ ràng không hoạt động
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)
Khi tôi chạy này, nội dung của demo_test.stdout.log
duy nhất là:
test one
test two
trên màn hình tôi vẫn nhìn thấy đầu ra từ 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)
Tôi muốn không có đầu ra trên màn hình và mọi thứ được ghi lại. (Tôi đang chạy thử nghiệm như một công việc cron, vì vậy bất kỳ đầu ra stdout hoặc stderr nào cũng sẽ gửi email, vì vậy tôi muốn có thể xác định chính xác khi nào điều này xảy ra, có nghĩa là tôi cần có khả năng kiểm soát unittest trong về)
Thậm chí gán 'stdout__' sys .__ và' sys. __stderr__' thất bại ở đây - Tôi nghĩ rằng nó không thể chuyển hướng đầu ra từ bên trong chính python. – Eric