我想使用自定义Robot Framework关键字可以调用的参数函数0创建python库。它需要知道定义关键字的文件的绝对路径,以及关键字的名称。我知道如何使用robot.libraries.BuiltIn库以及${SUITE_SOURCE}${TEST NAME}变量对测试用例执行类似的操作,但是我找不到与自定义关键字相似的内容。我不在乎答案有多复杂,也许我必须深入研究Robot Framework内部类的内胆并以某种方式访问​​该数据。有什么办法吗?

最佳答案

多亏了珍妮,我才能找到解决方案。

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

10-08 00:30
查看更多