【selenium】python+selenium+unittest,關於每次執行完一個測試用例都關閉瀏覽器等時間較長的問題之解決方案·續·裝飾器


   看上一篇的評論知道unittest裝飾器(也叫修飾器)也能解決類似的問題,陽陽就特地學習了一下關於@classmethod裝飾器的用法,並簡單介紹一下unittest本身的裝飾器;

  感謝“上海-悠悠”的博客,Selenium2+python自動化55-unittest之裝飾器(@classmethod)

  根據陽陽虛心學習的結果,重新設計代碼如下:

 1     @classmethod
 2     def setUpClass(cls):
 3         cls.driver = webdriver.Firefox()
 4         cls.driver.implicitly_wait(30)
 5         cls.base_url = "http://xxx.xxxx.com"
 6         cls.verificationErrors = []
 7         cls.accept_next_alert = True
 8 
 9     def test_1_login(self):
10         driver = self.driver
11         driver.get(self.base_url )
12         ...
13         #登錄段操作
14         ...
15 
16     def test_2_update(self):
17         driver = self.driver
18         ...
19         #修改個人信息段操作
20         ...
21         
22     @classmethod
23     def tearDownClass(cls):
24         cls.driver.quit()

    上訴代碼運行的順序就是從上至下,而不再是每次執行完成一個testcase之后,執行一次teardownClass再進行下一個testcase;

  這樣一來退出瀏覽器僅僅執行一次即可,這樣有一個不好的地方就是,teardownClass這個函數不能再進行每個測試用例的終結操作,比如:修改個人信息后恢復到登錄成功后的狀態,對當前測試用例的異常處理等

  陽陽嘗試tearDownClass后增加如下代碼:

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

  然后果然每次測試用完成都會刷新當前頁面,這樣一來,每一個testcase的用例都能被終結函數tearDown結束,最后再執行tearDownClass關閉測試瀏覽器;

 

  需要說明的是:@classmethod是python本身的裝飾器,所以他不要使用隸屬於unit test框架下斷言assertEqual;  

  unittest本身也帶有裝飾器unittest.skip(),專門用於跳過testcase的裝飾器,其用法如下:

      @unittest.skip(reason), skip裝飾器:直接跳過裝飾下的testcase,reason用來說明原因,下同。

      @unittest.skipIf(condition,reason), skipIf裝飾器:condition條件為True時,跳過裝飾下的testcase,計入skip的testcase執行次數。

      @unittest.skipUnless(condition,reason),skipUnless裝飾器:condition條件為False時,跳過裝飾下的testcase,計入skip的testcase執行次數。

      @unittest.expectedFailure(), expectedFailure裝飾器:執行裝飾下的testcase,執行失敗則跳過該testcase,計入expected下成敗的testcase次數。

  陽陽認為使用@unittest.skipIf或者@unittest.skipUnless應該也能實現@classmethod裝飾器的效果, 想來只是實現起來相對來說較為麻煩;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM