¿Cómo ejecutar varias clases en Single Test Suite en Python Unit testing?

Cómo ejecutar varias clases en Single Test Suite en Python Unit testing …..

Si desea ejecutar todas las pruebas de una lista específica de clases de prueba, en lugar de todas las pruebas de todas las clases de prueba en un módulo, puede usar el método loadTestsFromTestCase para obtener un TestSuite de pruebas para cada clase, y luego cree un único TestSuite combinado de una lista que contenga todas esas suites que puede usar con la run :

 import unittest # Some tests class TestClassA(unittest.TestCase): def testOne(self): # test code pass class TestClassB(unittest.TestCase): def testOne(self): # test code pass class TestClassC(unittest.TestCase): def testOne(self): # test code pass if __name__ == '__main__': # Run only the tests in the specified classes test_classes_to_run = [TestClassA, TestClassC] loader = unittest.TestLoader() suites_list = [] for test_class in test_classes_to_run: suite = loader.loadTestsFromTestCase(test_class) suites_list.append(suite) big_suite = unittest.TestSuite(suites_list) runner = unittest.TextTestRunner() results = runner.run(big_suite) # ... 

No estoy seguro de lo que estás preguntando aquí, pero si quieres saber cómo probar varias clases en la misma suite, por lo general solo creas varias clases de prueba en el mismo archivo de Python y las ejecutas juntas:

 import unittest class TestSomeClass(unittest.TestCase): def testStuff(self): # your testcode here pass class TestSomeOtherClass(unittest.TestCase): def testOtherStuff(self): # testcode of second class here pass if __name__ == '__main__': unittest.main() 

Y corre con por ejemplo:

 python mytestsuite.py 

Se pueden encontrar mejores ejemplos en la documentación oficial .

Si, por otro lado, desea ejecutar varios archivos de prueba, como se detalla en “¿Cómo organizar la prueba de python de forma que pueda ejecutar todas las pruebas en un solo comando?” , entonces la otra respuesta es probablemente mejor.

El método unittest.TestLoader.loadTestsFromModule () descubrirá y cargará todas las clases en el módulo especificado. Así que puedes hacer esto:

 import unittest import sys class T1(unittest.TestCase): def test_A(self): pass def test_B(self): pass class T2(unittest.TestCase): def test_A(self): pass def test_B(self): pass if __name__ == "__main__": suite = unittest.TestLoader().loadTestsFromModule( sys.modules[__name__] ) unittest.TextTestRunner(verbosity=3).run( suite ) 

He encontrado que la nariz es una buena herramienta para esto. Descubre todas las pruebas unitarias en una estructura de directorios y las ejecuta.

Normalmente lo haría de la siguiente manera (que agrega solo una clase por suite):

 # Add tests. alltests = unittest.TestSuite() alltests.addTest(unittest.makeSuite(Test1)) alltests.addTest(unittest.makeSuite(Test2)) 

Si desea tener varias clases por suite, puede agregar estas pruebas de la siguiente manera:

 for name in testnames: suite.addTest(tc_class(name, cargs=args)) 

Este es el mismo ejemplo para ejecutar todas las clases por paquete separado, puede definir su propio método make_suite :

 # Credits: http://codereview.stackexchange.com/a/88662/15346 def make_suite(tc_class): testloader = unittest.TestLoader() testnames = testloader.getTestCaseNames(tc_class) suite = unittest.TestSuite() for name in testnames: suite.addTest(tc_class(name, cargs=args)) return suite # Add all tests. alltests = unittest.TestSuite() for name, obj in inspect.getmembers(sys.modules[__name__]): if inspect.isclass(obj) and name.startswith("FooTest"): alltests.addTest(make_suite(obj)) result = unittest.TextTestRunner(verbosity=2).run(alltests) 

Si lo anterior no encaja, puede convertir el ejemplo anterior en un método que podría aceptar varias clases.