addCleanup的用例這裏不介紹了,能夠看個人另外一編文章: python unittest框架中addCleanup函數詳解html
但若是有下面這種場景,仍是會遺留大批理資源python
在setUpClass注入各類先導資源,好比:app
一、注入a框架
二、注入b函數
三、注入cspa
而後在teardownclass中清理code
一、清理chtm
二、清理bblog
三、清理a資源
假設在注入b時出錯了,那麼在teardownclass中第一步就會出錯
解決方法:
咱們仿照addCleanup寫一個這樣的函數,以下
一、先在setupclass中定義一個列表
二、寫SetupCleanup這樣一個函數及doSetupCleanup函數,將列表倒序
三、將doSetupCleanup加入在tearDownClass中
代碼以下:
@classmethod def setUpClass(cls): .... cls.setup_cleanup_list = [] ....
@classmethod def SetupCleanup(cls, func, *args, **kwargs): cls.setup_cleanup_list.append((func, args, kwargs)) @classmethod def doSetupcleanup(cls): try: for item in reversed(cls.setup_cleanup_list): function, args, kwargs = item for _ in range(3): try: function(*args, **kwargs) break except Exception as e: log.exception(e) finally: cls.setup_cleanup_list = []
@classmethod def tearDownClass(cls): cls.doSetupcleanup()