将Unittest输出记录到文本文件

chr*_*ley 16 python logging unit-testing

我试图将测试的输出记录到文本文件中.我正在使用unittest模块,并希望将结果记录到文本文件而不是屏幕.我在这里有一些脚本来解释到目前为止所尝试的内容.这是测试脚本.

import unittest, sys

class TestOne(unittest.TestCase):

    def setUp(self):
        self.var = 'Tuesday'
    def tearDown(self):
        self.var = None 



class BasicTestOne(TestOne):

    def runTest(self):

        TestOne.setUp(self)
        self.assertEqual(self.var, 'Tuesday')



class AbsoluteMoveTestSuite(unittest.TestSuite):

    # Tests to be tested by test suite
    def makeAbsoluteMoveTestSuite():
        suite = unittest.TestSuite()
        suite.addTest(TestOne("BasicTestOne"))

        return suite 

    def suite():
        return unittest.makeSuite(TestOne)


if __name__ == '__main__':
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

我已将此添加到文件中,但它似乎不起作用.

log_file = 'log_file.txt'
sys.stout = sys.sterr = open(log_file, 'w')

return suite >> sys.stout
Run Code Online (Sandbox Code Playgroud)

并且:

log_file = 'log_file.txt'
return suite >> open(log_file, 'w')
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个命令的几个不同版本.

if __name__ == '__main__':
    unittest.main() >> open(log_file, 'w')
Run Code Online (Sandbox Code Playgroud)

我试过这个.我希望在python脚本中存储和创建日志文件.我不想打电话python tests.py >> log_file.txt.

谢谢你的帮助

And*_*Cox 27

您可以将文本运行器传递给main方法.必须将文本运行器设置为写入文件而不是std.err,因为它将流包装在装饰器中.以下在python 2.6中为我工作

if __name__ == '__main__':
   log_file = 'log_file.txt'
   with open(log_file, "w") as f:
       runner = unittest.TextTestRunner(f)
       unittest.main(testRunner=runner)
Run Code Online (Sandbox Code Playgroud)