我正在使用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个断言失败,如何让脚本继续断言其余的测试用例?
答案 0 :(得分:2)
您正在以错误的方式构建测试。测试运行员将此视为单个测试。当它收到断言时,测试就会失败。
如果你想要接近你的代码,你必须自己捕获断言,并最终重新抛出一个。这显然是有臭味的代码,因为它使得失败的起源不透明。
理想情况下,您必须重新设计测试。 如果你有相互独立的断言(即你对下一个断言感兴趣,即使之前失败了),你也有独立的测试用例。 Testrunner负责迭代测试,它将捕获每个断言并输出它。
请看the fine documentation如何做到这一点。
如果您正在寻找参数化测试用例,here on SO是一个想法,您可以从中开始。