2011-12-02 26 views
6

我的代碼是這樣的:如何在套件的測試類中共享一個webdriver實例?我用Selenium2和Python

class class1(unittest.TestCase): 
    def setUp(self): 
     self.driver = webdriver.Firefox() 

    def testListRolesTitle(self): 
     driver=self.driver 
     driver.get("www.google.com") 

    def tearDown(self): 
     self.driver.quit() 
     self.assertEqual([], self.verificationErrors) 
     asert... 


class class2(unittest.TestCase): 

    def setUp(self): 
     self.driver = webdriver.Firefox() 

    def testListRolesTitle(self): 
     driver=self.driver 
     driver.get("www.google.com") 
     assert... 

    def tearDown(self): 
     self.driver.quit() 
     self.assertEqual([], self.verificationErrors) 

def suite(): 
    s1 = unittest.TestLoader().loadTestsFromTestCase(class1) 
    s2 = unittest.TestLoader().loadTestsFromTestCase(class2) 

    return unittest.TestSuite([s1,s2]) 

if __name__ == "__main__": 

    run(suite()) 

當我跑了兩個套件的測試類的設置methord開始了新的Firefox實例。 我的問題是,如果有可能使兩個測試分類使用相同的Firefox實例? 我不想把它們放在一個班級。

任何想法?

回答

2

您可以使用一個設置功能,該功能適用​​於整個模塊,而不僅僅適用於課程here

在你的情況,這將是這樣的:

def setUpModule(): 
    DRIVER = webdriver.Firefox() 

def tearDownModule(): 
    DRIVER.quit() 

注意DRIVER在這種情況下,一個全局變量,以便它提供給所有的類的對象。

另外,還要注意測試用例排序可能會導致你的模塊設置功能被稱爲多次,如文檔中解釋說:

由單元測試測試裝載機創建測試的默認排序是將所有測試從相同的模塊和類一起。這將導致setUpClass/setUpModule(等)被每個類和模塊調用一次。如果隨機化訂單,以便來自不同模塊和類的測試彼此相鄰,則可以在單次測試中多次調用這些共享夾具功能。

它認爲在執行每個設置方法/功能時,這個例子中應明確:

import unittest 

def setUpModule(): 
    print 'Module setup...' 

def tearDownModule(): 
    print 'Module teardown...' 

class Test(unittest.TestCase): 
    def setUp(self): 
     print 'Class setup...' 

    def tearDown(self): 
     print 'Class teardown...' 

    def test_one(self): 
     print 'One' 

    def test_two(self): 
     print 'Two' 

的輸出是這樣的:

$ python -m unittest my_test.py 

Module setup... 
Class setup... 
One 
Class teardown... 
.Class setup... 
Two 
Class teardown... 
.Module teardown... 

---------------------------------------------------------------------- 
Ran 2 tests in 0.000s 

OK 
+0

謝謝,但我仍然感到困惑。 – user1076879

+0

由於共享設置/拆卸代碼,您應該將這兩個測試用例放在同一個類中。每個測試用例都會執行該類中的設置/拆卸,並且模塊中的設置/拆卸將針對整個模塊執行一次。 – jcollado

+0

嗨,非常感謝。但是,如果我使用setUpModule()和tearDownModule()我必須把兩個測試類放到一個文件中,對嗎? – user1076879

相關問題