Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to exit the script in a unittest test case

Here is a sample script that checks for a precondition in the very first test case and my intention is to abort the script if the precondition is not met.

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

However, the sys.exit() only exits from the individual test case of the suite. It doesn't exit the whole script.

I understand that unittest treats each test case individually which is why any exceptions caused by any testcase are handled by the test runner and it proceeds to the next test case.

But I want the script to kill itself. How do I do that?

Here is the output of my script:

./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)

My guess is that I have to mess around with TestRunner and kill the script if a test case returns some signal. But I am not sure how to really achieve it.

like image 977
gixxer Avatar asked Apr 22 '15 00:04

gixxer


People also ask

How do you stop a test execution in Python?

Once you are in a TestCase , the stop() method for the TestResult is not used when iterating through the tests. Somewhat related to your question, if you are using python 2.7, you can use the -f/--failfast flag when calling your test with python -m unittest . This will stop the test at the first failure. Thanks.

How do I run a unittest script in Python?

If you're using the PyCharm IDE, you can run unittest or pytest by following these steps: In the Project tool window, select the tests directory. On the context menu, choose the run command for unittest . For example, choose Run 'Unittests in my Tests…'.

What does unittest main () do?

Internally, unittest. main() is using a few tricks to figure out the name of the module (source file) that contains the call to main() . It then imports this modules, examines it, gets a list of all classes and functions which could be tests (according the configuration) and then creates a test case for each of them.


1 Answers

Here is the answer:

Stop testsuite if a testcase find an error

Here is the change I need to make when calling unittest.main(). The failfast keyword argument stops the script after the first failure.

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

p.s. failfast keyword argument is only available for python 2.7+

p.p.s. you can also use failfast on unittest.TextTestRunner()

like image 92
gixxer Avatar answered Oct 14 '22 14:10

gixxer