将单元测试输出记录到文本文件

19 投票
1 回答
21373 浏览
提问于 2025-04-15 22:01

我想把测试的输出记录到一个文本文件里。我正在使用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()

我把这个加到了文件里,但似乎不太管用。

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

return suite >> sys.stout

还有:

log_file = 'log_file.txt'
return suite >> open(log_file, 'w')

我尝试过这个命令的几个不同版本。

if __name__ == '__main__':
    unittest.main() >> open(log_file, 'w')

我试过这个。我希望日志文件能在Python脚本内部创建和保存。我不想每次都要输入python tests.py >> log_file.txt

谢谢大家的帮助

1 个回答

30

你可以把文本运行器传递给主方法。这个文本运行器需要设置成写入文件,而不是写入标准错误输出,因为它会把这个流包裹在一个装饰器里。以下代码在我使用的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)

撰写回答