我正在使用python的机器人框架。我正在实现一个全局库,以便与所有测试共享。为此,我正在使用ROBOT_LIBRARY_SCOPE = 'GLOBAL'
。我的问题是,即使在程序结束时,这个库也永远不会发布......
from robot.api import logger
class TestLibrary:
ROBOT_LIBRARY_SCOPE = 'GLOBAL'
def __init__ (self):
logger.info ('Create library')
def __del__ (self):
logger.info ('Destroy library')
对我来说看起来像个错误,对吗?有人有解决方法在程序结束时发布此库吗?
答案 0 :(得分:1)
似乎您的真正问题不在于__del__
,而是在套件完成运行时需要运行一些代码。虽然__del__
似乎是正确的解决方案,但并非如此。
Python并不保证__del__
将在所有情况下运行,因此将代码放在那里必须运行是不明智的。
注意:这不是机器人框架的错误,它只是python如何工作。机器人可能正在适当地删除库对象,但如果垃圾收集器在机器人退出之前没有机会运行,则__del__
将无法运行。
来自__del__
上的python文档:
无法保证为对象调用
__del__()
方法 解释器退出时仍然存在。
如果您希望代码在所有套件运行完毕后运行,并且您运行的是机器人版本2.8.5或更高版本,则可以让库充当侦听器,以响应"关闭"信息。
例如:
from robot.api import logger
class TestLibrary(object):
ROBOT_LIBRARY_SCOPE = 'GLOBAL'
ROBOT_LISTENER_API_VERSION = 2
def __init__(self, *args, **kwargs):
self.ROBOT_LIBRARY_LISTENER = self
logger.warn("Create library")
def _close(self):
logger.warn("Destroy library")
这指示机器人在所有测试用例运行后调用_close
方法。在此功能中,您可以执行任何需要执行的清理或额外处理。
有关更多信息,请参阅机器人框架用户指南中的Test Libraries as Listeners。