2011-08-09 5 views
5

私はすでに一緒に実行するために作った他のスーツケースとテストケースで構成された大きなpythonスーツケースを作る必要があります。testuitとtestcasesを使ったTestSuite

どうすればよいですか?例えば

は、ここで私は追加したいsuitecase(suiteFilter.py)があります:

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

そして、テストケースの構造(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() 

ありがとうございました!

答えて

12

プログラム/テストケースとスイートの構造のような追加情報を与えることができます。私がやる方法は、各モジュールのsuite()を定義することです。だから私はUserServiceTestモジュールのために言っている:

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) 

あなたはこのプロジェクトのルートまでrecursevly行うことができます。

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

は、その後、私は、各パッケージのメインのテストを持っています。したがって、パッケージAのメインテストは、パッケージAのサブパッケージからのメインテストのパッケージA内のすべてのモジュールを収集します。私はあなたには unittestを使用していると仮定していました。追加の詳細はわかりませんでしたが、この構造は他のPythonテストフレームワークにも適用できると思います。


編集:まあ、私は、私は完全にあなたの問題を理解し、非常にわからないんだけど、私が理解することができたものから、あなたがsuiteFilter.pyで定義されたスイートとでInvoice.pyで定義されたテストケースの両方を追加します同じスイート?もしそうなら、mainTest.pyの中でどうしていいのでしょうか?

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

test_suiteにすべて同じテストとスイートを追加できます。

+0

ありがとうございました、私はさらに多くの追加情報を与えました –

+0

私とandswerを編集しました。 – Bogdan

+0

ありがとう!あなたは私の問題を解決しました!たぶんあなたは別のもので私を助けることができます:私はスーツケースまたはテストケースのいずれかが失敗した場合、大きなスーツケースを終了したい。現時点では、それらの1つが失敗した場合、大きなスーツケースは次のスーツケース/テストケースで続行されます。 –

関連する問題