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()