如何在指定的测试失败后强制测试停止运行测试套件?

时间:2015-04-06 00:38:41

标签: python unit-testing selenium selenium-webdriver python-unittest

我有一个用Selenium Webdriver / Python 2.7编写的测试套件,由几个测试用例组成。一些测试用例非常关键,如果它们失败,整个测试都会失败,之后就不需要运行测试用例了。

class TestSuite1(unittest.TestCase)
     def setUp(self):
         pass

     def test1(self):
         return True

     def test2(self):
         return false

     def test3(self):
         return True

     # This is a critical test
     def test4(self):
         return false

     def test5(self):
         return True

     def tearDown(self):
         pass

所以,我想在test4失败时停止整个测试运行(当test2失败时测试运行应该继续),因为它很关键。我知道我们可以使用装饰器,但我正在寻找一种更有效的方法,因为我在测试运行中有大约20个关键测试,并且对所有测试用例使用20标志似乎没有效率。

1 个答案:

答案 0 :(得分:1)

如下:

import unittest

class CustomResult(unittest.TestResult):
    def addFailure(self, test, err):
        critical = ['test4', 'test7']
        if test._testMethodName in critical:
            print("Critical Failure!")
            self.stop()
        unittest.TestResult.addFailure(self, test, err)


class TestSuite1(unittest.TestCase):
    def setUp(self):
        pass

    def test1(self):
        return True

    def test2(self):
        return False

    def test3(self):
        return True

    # This is a critical test
    def test4(self):
        self.fail()
        pass

    def test5(self):
        print("test5")
        return True

    def tearDown(self):
        pass


if __name__ == '__main__':
    runner = unittest.runner.TextTestRunner(resultclass=CustomResult)
    unittest.main(testRunner=runner)

您可能需要根据调用测试的方式进行调整。

如果注释掉self.fail()(在test4中),则会测试5种方法。但如果没有注释掉,那么测试就会打印出“严重失败!”#34;并停止。就我而言,只进行了4次测试。

命名这些方法也可能是明智之举,因此当按字典顺序排序时,它们首先出现,如果发生严重故障,就不会浪费时间测试其他方法。

输出(self.fail()):

Critical Failure!
Ran 4 tests in 0.001s

FAILED (failures=1)

输出(不含self.fail()):

test5
Ran 5 tests in 0.001s

OK