En el bucle de prueba de unittest.TestSuite
, no es una condición break
al comienzo:
class TestSuite(BaseTestSuite):
def run(self, result, debug=False):
topLevel = False
if getattr(result, '_testRunEntered', False) is False:
result._testRunEntered = topLevel = True
for test in self:
if result.shouldStop:
break
Así que estoy usando un conjunto de pruebas a medida como esta:
class CustomTestSuite(unittest.TestSuite):
""" This variant registers the test result object with all ScriptedTests,
so that a failed Loign test can abort the test suite by setting result.shouldStop
to True
"""
def run(self, result, debug=False):
for test in self._tests:
test.result = result
return super(CustomTestSuite, self).run(result, debug)
con un resultado de la prueba personalizada clase como esta:
class CustomTestResult(TextTestResult):
def __init__(self, stream, descriptions, verbosity):
super(CustomTestResult, self).__init__(stream, descriptions, verbosity)
self.verbosity = verbosity
self.shouldStop = False
y mis clases de prueba son como:
class ScriptedTest(unittest.TestCase):
def __init__(self, environment, test_cfg, module, test):
super(ScriptedTest, self).__init__()
self.result = None
En determinadas condiciones, a continuación, aborto el conjunto de pruebas; por ejemplo, el conjunto de pruebas comienza con un inicio de sesión, y si eso no funciona, lo que no tiene que probar el resto:
try:
test_case.execute_script(test_command_list)
except AssertionError as e:
if test_case.module == 'session' and test_case.test == 'Login':
test_case.result.shouldStop = True
raise TestFatal('Login failed, aborting test.')
else:
raise sys.exc_info()
Luego uso el conjunto de pruebas de la siguiente manera:
suite = CustomTestSuite()
self.add_tests(suite)
result = unittest.TextTestRunner(verbosity=self.environment.verbosity, stream=UnitTestLoggerStream(self.logger),
resultclass=CustomTestResult).run(suite)
No estoy seguro de si hay una mejor manera de hacerlo, pero se comporta correctamente para mis pruebas.
Utilizo esto para abortar la ejecución de prueba antes de ejecutar cualquier prueba si la aplicación bajo prueba está configurada con ajustes de prod. (en realidad, con cualquier configuración que no sea prueba). –