Python Unittest可以返回单个测试的结果代码吗?

时间:2013-12-06 20:49:56

标签: python-unittest

我正在尝试使用unittest来自动化测试用例。但是,当测试通过或失败时,它会将结果写入控制台。有什么方法可以让unittest返回一些测试结果状态代码?这是因为我想在我的测试脚本中添加另一个函数来将测试结果记录到我们的数据库中。以编程方式评估测试通过或失败的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

这取决于您需要多少关于测试结果的信息。如果您只是想知道测试是否通过unittest.main传递/失败:

  

“默认情况下,主调用sys.exit(),退出代码表示成功   或测试失败“

因此,检查测试脚本的返回值(0 =已通过,非0 =失败)足以获得通过/失败的答案。

如果您需要有关测试的更多详细信息,可以跳过unittest.main()调用并直接调用TestRunner.run方法,该方法返回描述结果的TestResult对象。一个例子:

import unittest
from unittest import TextTestRunner

class TestExample(unittest.TestCase):

    def test_pass(self):
        self.assertEqual(1, 1, 'Expected 1 to equal 1')

    def test_fail(self):
        self.assertEqual(1, 2, 'uh-oh')

if __name__ == '__main__':
    test_suite = unittest.TestLoader().loadTestsFromTestCase(TestExample)
    test_result = TestRunner().run(test_suite)

...现在您可以检查test_result变量以获取有关测试运行的更多详细信息:

>>> test_result.testsRun
2
>>> test_result.failures
[(<test_example.TestExample testMethod=test_fail>, 'Traceback (most recent call last):\n  File "test_example.py", line 9, in test_fail\n    self.assertEqual(1, 2, \'uh-oh\')\nAssertionError: uh-oh\n')]
>>> len(test_result.failures)
1

TestResult的属性记录为here,示例&amp; here解释了运行测试运行器的选项。