2024-05-01 21:44:46 发布
网友
我想创建一个python库,其中包含我的自定义Robot框架关键字可以调用的0参数函数。它需要知道定义关键字的文件的绝对路径,以及关键字的名称。我知道如何使用robot.libraries.BuiltIn库和${SUITE_SOURCE}和${TEST NAME}变量对测试用例做类似的事情,但是我找不到任何类似的自定义关键字。我不在乎答案有多复杂,也许我必须挖掘Robot框架内部类的内部,以某种方式访问这些数据。有办法吗?在
robot.libraries.BuiltIn
${SUITE_SOURCE}
${TEST NAME}
我比较快速地查看了源代码,似乎执行上下文确实引用了当前正在执行的关键字。所以,我唯一能想到的解决办法是:
robot.libraries.BuiltIn.EXECUTION_CONTEXT._kw_store.resources
我没有做POC,所以我不确定这是否真的可行,但这是我目前想到的解决方案。在
多亏了珍妮,我才找到了解决办法。在
from robot.running.context import EXECUTION_CONTEXTS def resource_locator(): name = EXECUTION_CONTEXTS.current.keywords[-1].name libname = EXECUTION_CONTEXTS.current.get_handler(name).libname resources = EXECUTION_CONTEXTS.current.namespace._kw_store.resources path = "" for key in resources._keys: if resources[key].name == libname: path = key break return {'name': name, 'path': path}
EXECUTION_CONTEXTS.current.keywords是被调用的关键字的堆栈,最早的第一个和最近的最后一个,因此EXECUTION_CONTEXTS.current.keywords[-1]得到最后一个关键字,即调用此函数的关键字。在
EXECUTION_CONTEXTS.current.keywords
EXECUTION_CONTEXTS.current.keywords[-1]
EXECUTION_CONTEXTS.current.get_handler(name).libname获取定义关键字name的库的名称。对于用户定义的关键字,它是文件名(不是完整路径)减去扩展名。在
EXECUTION_CONTEXTS.current.get_handler(name).libname
name
EXECUTION_CONTEXTS.current.namespace._kw_store.resources是包含所有资源的字典,其中的键是绝对路径。因为文件路径是键,所以我必须搜索该键,使值的名称是定义关键字的资源的名称(libname)
EXECUTION_CONTEXTS.current.namespace._kw_store.resources
libname
我比较快速地查看了源代码,似乎执行上下文确实引用了当前正在执行的关键字。所以,我唯一能想到的解决办法是:
robot.libraries.BuiltIn.EXECUTION_CONTEXT._kw_store.resources
以找出哪个资源文件包含当前正在执行的关键字。在我没有做POC,所以我不确定这是否真的可行,但这是我目前想到的解决方案。在
多亏了珍妮,我才找到了解决办法。在
EXECUTION_CONTEXTS.current.keywords
是被调用的关键字的堆栈,最早的第一个和最近的最后一个,因此EXECUTION_CONTEXTS.current.keywords[-1]
得到最后一个关键字,即调用此函数的关键字。在EXECUTION_CONTEXTS.current.get_handler(name).libname
获取定义关键字name
的库的名称。对于用户定义的关键字,它是文件名(不是完整路径)减去扩展名。在EXECUTION_CONTEXTS.current.namespace._kw_store.resources
是包含所有资源的字典,其中的键是绝对路径。因为文件路径是键,所以我必须搜索该键,使值的名称是定义关键字的资源的名称(libname
)相关问题 更多 >
编程相关推荐