2011-08-09 19 views
5

Necesito hacer una gran suite de python con otras maletas y testcase que ya he hecho para ejecutar juntos.TestSuite con testsuites y testcases

¿Cómo puedo hacer esto?

Por ejemplo, aquí hay un suitecase (suiteFilter.py), que quiero añadir:

import testFilter1 
import testFilter2 
import unittest 
import sys 

def suite(): 
    return unittest.TestSuite((\ 
     unittest.makeSuite(testFilter1.TestFilter1), 
     unittest.makeSuite(testFilter2.TestFilter2), 
     )) 


if __name__ == "__main__": 
    result = unittest.TextTestRunner(verbosity=2).run(suite()) 
    sys.exit(not result.wasSuccessful()) 

y una estructura caso_prueba (Invoice.py):

from selenium import selenium 
import unittest, time, re 
from setup_tests import filename, fileForNrTest, username, password, server_url 
fileW=open(filename,'a') 


class TestInvoice(unittest.TestCase): 

    def setUp(self): 
     self.verificationErrors = [] 
     self.selenium = selenium("localhost", 4444, "*firefox", server_url) 
     self.selenium.start() 

    def test_invoice(self): 
     sel = self.selenium 
     [...] 

    def tearDown(self): 
     self.selenium.stop() 
     self.assertEqual([], self.verificationErrors) 


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

Gracias!

Respuesta

12

Puede proporcionar información adicional, como la estructura de su programa/casos de prueba y suites. La forma en que lo hago es definir un conjunto() para cada módulo. Así que he decir para el módulo UserServiceTest:

def suite(): 
    """ 
     Gather all the tests from this module in a test suite. 
    """ 
    test_suite = unittest.TestSuite() 
    test_suite.addTest(unittest.makeSuite(UserServiceTest)) 
    return test_suite 

if __name__ == "__main__": 
    #So you can run tests from this module individually. 
    unittest.main() 

entonces tengo una prueba principal para cada paquete:

def suite(): 
""" 
    Gather all the tests from this package in a test suite. 
""" 
    test_suite = unittest.TestSuite() 
    test_suite.addTest(file_tests_main.suite()) 
    test_suite.addTest(userservice_test.suite()) 
    return test_suite 


if __name__ == "__main__": 
    #So you can run tests from this package individually. 
    TEST_RUNNER = unittest.TextTestRunner() 
    TEST_SUITE = suite() 
    TEST_RUNNER.run(TEST_SUITE) 

Usted puede hacer esto de la recursevly hasta la raíz de su proyecto. Por lo tanto, la prueba principal del paquete A recopilará todos los módulos del paquete A + prueba principal de los subpaquetes del paquete A, y así sucesivamente. Asumí que estaba usando unittest ya que no proporcionó ningún detalle adicional, pero creo que esta estructura también se puede aplicar a otros marcos de prueba de Python.


Editar: Bueno, yo no estoy muy seguro de entender completamente su problema, pero por lo que puedo entender que desea añadir tanto la suite se define en suiteFilter.py y el caso de prueba se define en Invoice.py en el misma suite? Si es así ¿por qué no hacer en una mainTest.py por ejemplo:

import unittest 
import suiteFilter 
import Invoice 


def suite() 
    test_suite = unittest.TestSuite() 
    test_suite.addTest(suiteFilter.suite()) 
    test_suite.addTest(unittest.makeSuite(Invoice)) 


if __name__ == "__main__": 
    result = unittest.TextTestRunner(verbosity=2).run(suite()) 
    sys.exit(not result.wasSuccessful()) 

puedes añadir pruebas y suites todos iguales a un test_suite.

+0

Gracias, he dado más información adicional –

+0

Editado mi andswer. – Bogdan

+0

¡Muchas gracias! ¡Has resuelto mi problema! Tal vez pueda ayudarme con otra cosa: quiero terminar la gran suitecase si uno de los maletines o testcase adentro falla. En este momento, si uno de ellos falla, la gran suite continuará con la siguiente maleta/caja de prueba. –

Cuestiones relacionadas