我在Python中有testSuite
个testCases
。
如果testCase
失败,testSuite
会继续下一个testCase
。我希望能够在testSuite
失败或能够决定testCase
是继续还是停止时停止testSuite
。
答案 0 :(得分:15)
自Python 2.7起,unittest
支持failfast
选项。它可以由命令行指定:
python -m unittest -f test_module
或者在使用脚本时:
>>> from unittest import main
>>> main(module='test_module', failfast=True)
不幸的是,当您使用setuptools
和setup.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解释器。