如何在 unittest 测试用例中退出脚本

How to exit the script in a unittest test case

这是一个示例脚本,用于检查第一个测试用例中的先决条件,我的意图是如果不满足先决条件则中止脚本。

#!/usr/bin/python
import unittest
import sys

class TestMyScript(unittest.TestCase):
    def test_000_prerequisite(self):
        a = 0
        if not a:
            sys.exit()
        return

    def test_001_test1(self):
        print "Inside test 1"
        return

    def test_002_test2(self):
        print "Inside test 2"
        return

if __name__ == "__main__":
    unittest.main()

但是,sys.exit() 仅从套件的单个测试用例中退出。它不会退出整个脚本。

我知道 unittest 单独处理每个测试用例,这就是为什么由任何测试用例引起的任何异常都由测试运行器处理并继续下一个测试用例的原因。

但我希望脚本自行终止。我该怎么做?

这是我的脚本的输出:

./temp.py
EInside test 1
.Inside test 2
.
======================================================================
ERROR: test_000_prerequisite (__main__.TestMyScript)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "./temp.py", line 9, in test_000_prerequisite
    sys.exit()
SystemExit

----------------------------------------------------------------------
Ran 3 tests in 0.000s

FAILED (errors=1)

我的猜测是,如果测试用例 returns 有一些信号,我必须弄乱 TestRunner 并终止脚本。但我不确定如何真正实现它。

答案如下:

Stop testsuite if a testcase find an error

这是调用 unittest.main() 时我需要做的更改。 failfast 关键字参数在第一次失败后停止脚本。

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

p.s。 failfast 关键字参数仅适用于 python 2.7+

p.p.s。您还可以在 unittest.TextTestRunner()

上使用 failfast