我有一个用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标志似乎没有效率。
答案 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