Как выйти из script в тестовом примере unittest

Вот пример сценария, который проверяет предварительное условие в самом первом тестовом примере, и я намерен прервать сценарий, если предварительное условие не выполнено.

#!/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)

Я предполагаю, что мне нужно возиться с TestRunner и убивать скрипт, если тестовый случай возвращает какой-то сигнал. Но не уверен, как на самом деле этого добиться.

Ответ 1

Вот ответ:

Остановите тестовый набор, если тестовый набор обнаружил ошибку

Вот изменение, которое мне нужно сделать при вызове unittest.main(). failfast ключевого слова failfast останавливает сценарий после первого сбоя.

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

ps failfast аргумент ключевого слова доступен только для python 2. 7+

pps вы также можете использовать failfast на unittest.TextTestRunner()