如果测试用例发现错误,请停止测试

时间:2011-07-25 09:07:15

标签: python unit-testing testcase test-suite

我在Python中有testSuitetestCases

如果testCase失败,testSuite会继续下一个testCase。我希望能够在testSuite失败或能够决定testCase是继续还是停止时停止testSuite

6 个答案:

答案 0 :(得分:15)

自Python 2.7起,unittest支持failfast选项。它可以由命令行指定:

python -m unittest -f test_module

或者在使用脚本时:

>>> from unittest import main
>>> main(module='test_module', failfast=True)

不幸的是,当您使用setuptoolssetup.py时,我还没有找到指定此选项的方式。

答案 1 :(得分:3)

您的问题的这一部分似乎都没有答案:

...能够决定testSuite应该继续还是停止。

您可以在run()类中覆盖TestCase方法,然后调用TestResult.stop()方法以向TestSuite发出信号以停止运行测试。

class MyTestCase(unittest.TestCase):
    def run(self, result=None):
        if stop_test_condition():
            result.stop()
            return
        super().run(result=result)

答案 2 :(得分:1)

你真的在进行单元测试吗?或其他东西的系统测试?如果是后者,您可能会对我的Python based testing framework感兴趣。它的一个特点就是这个。您可以定义测试用例依赖项,套件将跳过具有失败依赖项的测试。它还内置了对selenium和webdriver的支持。但是,设置起来并不容易。目前正在开发但主要是工作。在Linux上运行。

答案 3 :(得分:1)

使用nose运行测试并使用-x标志。结合--failed标志应该可以满足您的所有需求。所以在项目的最高层运行

nosetests -x # with -v for verbose and -s to no capture stdout

或者你可以用

运行
nosetests --failed

这将仅从测试套件中重新运行失败的测试

其他有用的标志:

nosetests --pdb-failure --pdb

在测试失败或出错时

将您置于调试器中

nosetests --with-coverage --cover-package=<your package name> --cover-html

为您提供一个彩色的html页面,显示测试运行中触摸了代码中的哪些行

所有这些的组合通常会给我我想要的东西。

答案 4 :(得分:0)

使用failfast=True会在测试类中有1个失败的情况下停止运行所有测试

示例:

if __name__ == '__main__':
    unittest.main(failfast=True)

答案 5 :(得分:-2)

您可以使用sys.exit()在测试用例中的任何位置关闭python解释器。