2011-08-09 9 views
5

Muszę zrobić duży kombinezon Pythona składał się z innych walizek i testcase, które już wykonałem do wykonania razem.TestSuite z testsuites i testcases

Jak to zrobić?

Na przykład tutaj jest suitecase (suiteFilter.py), który chcę dodać:

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()) 

i strukturę testcase (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() 

Dziękujemy!

Odpowiedz

12

Można podać dodatkowe informacje, takie jak struktura programu/przypadków testowych i pakietów. Sposób, w jaki to zrobię, to zdefiniowanie pakietu() dla każdego modułu. Więc mam powiedzieć modułu 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() 

Wtedy mam główny test dla każdego pakietu:

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) 

Można tego recursevly do głównego katalogu projektu zrobienia. Zatem główny test z paczki A zbierze cały moduł w pakiecie A + główny test z podpakietów paczki A i tak dalej. Zakładam, że używasz unittest, ponieważ nie podałeś żadnych dodatkowych szczegółów, ale myślę, że ta struktura może być zastosowana do innych frameworków testowania Pythona.


Edit: Dobrze, że nie jestem pewien, w pełni rozumiem problemu, ale z tego co rozumiem chcesz dodać zarówno pakietu zdefiniowanego w suiteFilter.py i testcase zdefiniowany w Invoice.py w ten sam apartament? Jeśli tak, to dlaczego nie po prostu zrobić w mainTest.py na przykład:

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()) 

Możesz dodać testy i apartamentów wszystko jedno do test_suite.

+0

Dziękuję, dałem więcej dodatkowych informacji –

+0

Edytowałem mój i mój. – Bogdan

+0

Wielkie dzięki! Rozwiązałeś mój problem! Może możesz mi pomóc z inną rzeczą: chcę skończyć wielką kombinację, jeśli jedna z walizek lub walizki testowej nie powiedzie się. W tej chwili, jeśli jeden z nich się nie powiedzie, wielka kombinacja będzie kontynuowana z następną walizką/testówką. –

Powiązane problemy