【问题标题】:How to get failed, succes, error test cases names from the unittest. runner.TextTestResult?如何从单元测试中获取失败、成功、错误的测试用例名称。 runner.TextTestResult?
【发布时间】:2021-11-30 13:23:54
【问题描述】:

从下面的代码中,如何从结果变量中获取失败、成功、错误的测试用例名称?许多失败的、总的测试运行和所有都可能来自单元测试。 runner.TextTestResult。但我也想知道失败的测试用例名称,即 Test_Sample1.test_2

import unittest

class Test_Sample1(unittest.TestCase):

    def test_1(self):
        pass

    def test_2(self):
        self.assertEqual(1,2)
    
    def test_3(self):
        pass


class Test_Sample2(unittest.TestCase):

    def test_1(self):
        pass

    def test_2(self):
        self.assertEqual(1,2)
    
    def test_3(self):
        pass

def main():
    unitt = unittest.main (verbosity = 2, exit=False)
    result = unitt.result

    print(f'wasSuccessful {result.wasSuccessful()}')
    print(f'errors {len(result.errors)}')
    print(f'failures {len(result.failures)}')
    print(f'testsRun {result.testsRun}')


if __name__ == '__main__':
    main()

【问题讨论】:

    标签: python-unittest


    【解决方案1】:

    您可以使用自定义TestRunner + TestResult 并根据需要进行配置。只是一个例子:

    import unittest
    from unittest.runner import TextTestResult, TextTestRunner
    
    
    class Test1(unittest.TestCase):
        def test_1(self):
            pass
    
        def test_2(self):
            self.assertEqual(1, 2)
    
    
    class Test2(unittest.TestCase):
        def test_1(self):
            self.assertEqual(1, 2)
    
        @unittest.skip('skip example')
        def test_2(self):
            pass
    
    
    def main():
        class CustomResult(TextTestResult):
            def __init__(self, *args, **kwargs):
                super(CustomResult, self).__init__(*args, **kwargs)
                self.success = []
    
            def addSuccess(self, test):
                super(CustomResult, self).addSuccess(test)
                self.success.append(test)
    
        unit = unittest.main(verbosity=2, exit=False, testRunner=TextTestRunner(resultclass=CustomResult))
        result = unit.result  # type: CustomResult
        # just do here all what you need...
        print('success:')
        for test in result.success:
            print(test)
        print('*' * 20 + '\n')
    
        print('skipped:')
        for test, reason in result.skipped:
            print('{}. reason: {}'.format(test, reason))
        print('*' * 20 + '\n')
    
        print('failures:')
        for test, trace in result.failures:
            print(test)
            # print(trace) ...if you need
        print('*' * 20 + '\n')
    
        for error in result.errors:
            # blablabla
            continue
    

    结果:

    success:
    test_1 (__main__.Test1)
    ********************
    
    skipped:
    test_2 (__main__.Test2). reason: skip example
    ********************
    
    failures:
    test_2 (__main__.Test1)
    test_1 (__main__.Test2)
    ********************
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 2015-11-19
      • 2020-08-07
      • 2012-03-28
      • 1970-01-01
      相关资源
      最近更新 更多