【问题标题】:continue test after assertion fail using xmlrunner and unittest in python在 python 中使用 xmlrunner 和 unittest 断言失败后继续测试
【发布时间】:2015-04-29 13:56:03
【问题描述】:

我正在 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 个断言失败,我怎样才能让脚本继续断言其余的测试用例?

【问题讨论】:

    标签: python xml unit-testing jenkins


    【解决方案1】:

    您以错误的方式构建测试。测试运行者将此视为单个测试。当它捕捉到一个断言时,测试失败。

    如果您想与您的代码保持密切联系,您必须自己捕获断言,并在最后重新抛出一个。这显然是臭代码,因为它使失败的来源变得不透明。

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

    查看the fine documentation 了解如何操作。

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

    【讨论】:

    • 不确定我是否理解,这是我第一次这样做,您能否给我更多详细信息或提示如何操作?谢谢
    • 假设我想测试从 1 到 1000 的数字,并测试每一个数字(如果是偶数)。在我刚刚使用条件对其进行测试之前,如果条件返回错误,则将错误附加到数组中。但是现在我需要做同样的事情,但是在 XML 测试报告文件中将所有奇数列为错误。
    • 我需要正确的 JUnit XML 输出,因为这个测试应该在 JIRA 中自动运行(当然不完全是这个测试,但我遇到的问题是一样的)
    • 您需要参数化测试(查看链接),例如用于许多相似测试的生成器
    猜你喜欢
    • 2015-12-18
    • 2011-06-11
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 2011-10-13
    • 2020-04-08
    • 1970-01-01
    相关资源
    最近更新 更多