在python中使用xmlrunner和unittest断言失败后继续测试

时间:2015-04-29 13:56:03

标签: python xml unit-testing jenkins

我正在使用Python中的XMLrunner和unittest编写一个简单的测试。使用断言时,测试失败并且不继续。我希望测试继续到最后然后失败。可能吗?我将附上一个非常简单的代码,说明我需要做什么。

import xmlrunner
import unittest

class TestExp(unittest.TestCase):

    def setUp(self):
        self.list = range(1,10)

    def test_example(self):
        for i in self.list:
            self.assertTrue(i == 3, str(i) + "message")


if __name__ == '__main__':
    unittest.main(
        testRunner=xmlrunner.XMLTestRunner(output='test-reports'),
        failfast=False, buffer=False, catchbreak=False)

作为输出生成XML,但是只包含第一个失败的断言,我需要运行其余的断言并从它们生成测试报告,当使用try / except时我无法看到XML中的测试用例失败文件。

<?xml version="1.0" ?>
<testsuite errors="1" failures="0" name="TestExp-20150429152621" tests="1" time="0.000">
    <testcase classname="TestExp" name="test_example" time="0.000">
        <error message="1message" type="AssertionError">
<![CDATA[Traceback (most recent call last):
  File "xmlrunsample.py", line 14, in test_example
    self.assertTrue(i == 3, str(i) + "message")
AssertionError: 1message
]]>     </error>
    </testcase>
    <system-out>
<![CDATA[]]>    </system-out>
    <system-err>
<![CDATA[]]>    </system-err>
</testsuite>

这是我得到的测试报告输出,只包含1个断言失败,如何让脚本继续断言其余的测试用例?

1 个答案:

答案 0 :(得分:2)

您正在以错误的方式构建测试。测试运行员将此视为单个测试。当它收到断言时,测试就会失败。

如果你想要接近你的代码,你必须自己捕获断言,并最终重新抛出一个。这显然是有臭味的代码,因为它使得失败的起源不透明。

理想情况下,您必须重新设计测试。 如果你有相互独立的断言(即你对下一个断言感兴趣,即使之前失败了),你也有独立的测试用例。 Testrunner负责迭代测试,它将捕获每个断言并输出它。

请看the fine documentation如何做到这一点。

如果您正在寻找参数化测试用例,here on SO是一个想法,您可以从中开始。