从XMLRunner运行时,不会创建测试报告

时间:2017-11-29 12:18:24

标签: python python-2.7 report python-unittest

我正在使用XMLTestRunner从Python运行Unit TestCases。

这是我的主要文件:

#LoggingService.py
class LoggerWriter:
    # used to redirect console msgs to the log
    def write(self, message):
        log_event('warning', 'Console', message)

def direct_console_to_log():
    global console_redirected
    # This function can be called several times. Avoid redirecting more than once
    if not console_redirected:
        console_output = LoggerWriter()
        sys.stderr = console_output
        sys.stdout = console_output
        console_redirected = True

def log_event(level, _id, event_details):
    # log the event
    pass

这是我的测试文件之一:

#LoggingServiceTest.py
import unittest
import LoggingService
from LoggingService import direct_console_to_log
class Test(unittest.TestCase):
    @patch('LoggingService.log_event')
    def test_log_writer(self,log_mock):
        direct_console_to_log()
        print ('console msg')
        self.assertTrue(log_mock.called)

if __name__ == "__main__":
    unittest.main()

我曾经从XMLRunner.py运行所有测试文件:

#XMLRunner.py
from xmlrunner import XMLTestRunner
import unittest

test_modules = [file1.Test, file2.Test, LoggingServiceTest.py, .... file25.Test]
suite = unittest.TestSuite()

for test_module in test_modules:
    tests = unittest.TestLoader().loadTestsFromTestCase(test_module)
    suite.addTests(tests)

if __name__ == '__main__':
    # import xmlrunner
    # unittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
    XMLTestRunner(output='test-reports').run(suite)

当我尝试从“XMLRunner.py”运行LoggingServiceTest.py文件时,测试报告不生成。但是当我尝试没有“LoggingServiceTest.py”时,报告生成成功。

我不确定,测试用例函数发生了什么 运行LoggingServiceTest.py 中的(test_log_writer(self,log_mock))。 任何人都可以清除我

我使用以下命令运行测试用例:

Python2.7.14\python.exe -m coverage run -p --branch --source=. --omit=Unit_Tests/*.py Unit_Tests/Testing.py

1 个答案:

答案 0 :(得分:0)

最后,我在调试更多后得到了解决方案。

从XMLRunner启动测试用例时,它正在创建一些文件对象以写入stderr和stdout,并在sys.stderr, sys.stdout变量中定义

我的测试用例会覆盖sys.stderr, sys.stdout变量。

因此,XMLRunner尝试从sys.stderr, sys.stdout获取文件对象,但它不存在,那么它就不会生成报告。