python的unittest框架中如何刪除測試數據,清理環境,可以通過addCleanup函數


 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

 
        


免責聲明!

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



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