我想创建一个带有0参数函数的python库,我的自定义Robot Framework关键字可以调用它。它需要知道定义关键字的文件的绝对路径以及关键字的名称。我知道如何使用robot.libraries.BuiltIn
库以及${SUITE_SOURCE}
和${TEST NAME}
变量执行与测试用例类似的操作,但我找不到任何类似的自定义关键字。我不在乎答案有多复杂,也许我必须深入挖掘Robot Framework内部类的内涵并以某种方式访问这些数据。有没有办法做到这一点?
答案 0 :(得分:6)
感谢janne,我找到了解决方案。
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.get_handler(name).libname
获取定义关键字name
的库的名称。对于用户定义的关键字,它是文件名(不是完整路径)减去扩展名。
EXECUTION_CONTEXTS.current.namespace._kw_store.resources
是包含所有包含资源的字典,其中键是绝对路径。因为文件路径是密钥,所以我必须搜索密钥,使得值的名称是定义关键字的资源的名称(libname
)
答案 1 :(得分:1)
我对源代码进行了相对快速的研究,似乎执行上下文确实对当前正在执行的关键字有任何引用。所以,我能想到解决这个问题的唯一方法是:
robot.libraries.BuiltIn.EXECUTION_CONTEXT._kw_store.resources
查找哪个资源文件包含当前正在执行的关键字。我没有做POC,所以我不确定这是否真的可行,这是我目前想到的解决方案。