def addCleanup(self, function, *args, **kwargs): """Add a function, with arguments, to be called when the test is completed. Functions added are called on a LIFO basis and are called after tearDown on test failure or success. Cleanup items are called even if setUp fails (unlike tearDown).""" self._cleanups.append((function, args, kwargs))
添加針對每個測試用例執行完tearDown()方法之后的清理方法,添加進去的函數按照LIFO的順序,通過參數添加進去
如果setUp()執行失敗,就不會執行tearDown(),自然也不會執行addCleanup()里添加的函數。
使用場景:正常的測試用例,創建資源后,需要清理環境再在用例中刪除資源,或者tearDown()后進行資源清理,不方便,如果用了addCleanup()后,直接在用例中寫入函數,在tearDown()用例后,會再次調用addCleanup來刪除資源,減少代碼量以及遺漏刪除。
# _*_ encoding:utf-8 _*_ from selenium import webdriver from selenium.webdriver.common.by import By import unittest import time class Baidu(unittest.TestCase): def abc(self,a): print(a) def setUp(self): self.driver = webdriver.Firefox() self.driver.implicitly_wait(10) self.base_url = 'http://www.baidu.com' print ("This is setUp") def test_baidu_search(self): driver = self.driver driver.get(self.base_url) driver.find_element_by_id("kw").send_keys("HTMLTestRunner") driver.find_element_by_id("su").click() cleanups = ('abcdefg',) self.addCleanup(self.abc, cleanups[0]) def tearDown(self): self.driver.quit() print ("This is tearDown") if __name__ == '__main__': unittest.main() # testsuit = unittest.TestSuite() # testsuit.addTest(Baidu("test_baidu_search"))
執行結果如下,可以看到會在用例結束之后,執行addCleanup里的函數,因此可以用來進行,測試環境數據清理工作。
This is setUp
.
----------------------------------------------------------------------
Ran 1 test in 16.072s
OK
This is tearDown
abcdefg