Записать вывод Unittest в текстовый файл - PullRequest
15 голосов
/ 26 апреля 2010

Я пытаюсь записать вывод тестов в текстовый файл. Я использую модуль 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 Ответ

27 голосов
/ 26 апреля 2010

Вы можете передать бегунка текста в основной метод. Текстовый бегун должен быть настроен на запись в файл, а не в 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)
...