RobotFramework 从不在 python 中发布全局 class 库
RobotFramework never release global class libraries in python
我在 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')
对我来说看起来像个错误,对吧?有人有在程序结束时释放此库的解决方法吗?
看来您的真正问题不在于 __del__
,而是您需要 运行 在套件 运行 完成后编写一些代码。虽然看起来 __del__
是正确的解决方案,但不一定如此。
Python 不保证 __del__
在所有情况下都是 运行 所以把代码放在那里 必须 是不明智的 运行。
注意:这不是机器人框架的错误,这只是 python 的工作方式。机器人很可能会适当地删除库对象,但如果垃圾收集器在机器人退出之前没有机会 运行,__del__
就不会 运行。
来自 __del__
上的 python 文档:
It is not guaranteed that __del__()
methods are called for objects
that still exist when the interpreter exits.
运行 测试套件末尾的库代码
如果你想在所有套件完成 运行ning 时将代码 运行,并且你是 运行ning 机器人版本 2.8.5 或更高版本,你可以让库执行作为响应 "close" 消息的侦听器。
例如:
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。
我在 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')
对我来说看起来像个错误,对吧?有人有在程序结束时释放此库的解决方法吗?
看来您的真正问题不在于 __del__
,而是您需要 运行 在套件 运行 完成后编写一些代码。虽然看起来 __del__
是正确的解决方案,但不一定如此。
Python 不保证 __del__
在所有情况下都是 运行 所以把代码放在那里 必须 是不明智的 运行。
注意:这不是机器人框架的错误,这只是 python 的工作方式。机器人很可能会适当地删除库对象,但如果垃圾收集器在机器人退出之前没有机会 运行,__del__
就不会 运行。
来自 __del__
上的 python 文档:
It is not guaranteed that
__del__()
methods are called for objects that still exist when the interpreter exits.
运行 测试套件末尾的库代码
如果你想在所有套件完成 运行ning 时将代码 运行,并且你是 运行ning 机器人版本 2.8.5 或更高版本,你可以让库执行作为响应 "close" 消息的侦听器。
例如:
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。