机器人框架:通过 kwargs 循环

Robot framework: looping through kwargs

我需要获取机器人中的关键字参数列表,如果关键字在某个列表中,则将它们转换为 key=value 形式的字符串,如果不在列表中,则将其转换为 set key=value 形式的字符串。在 python 中,它看起来像这样:

keywords=#list of keywords

def convert(**kwargs):
    s = ''
    for k,v in kwargs.iteritems():
        if k in keywords:
            s = s + '-%s=%s ' % (k,v)
        else:
            s = s + '-set %s=%s ' % (k,v)
    return s

我知道这可以简单地写成 python 关键字,但我想弄清楚是否可以使用 Robot。我可以使用 :For ${arg} in ${kwargs} 进行迭代,但我不确定如何单独检索键和值。

这是一个简单的例子。我不会尝试在此处重新创建您的 Python 函数,因为在 Robot 中执行条件操作会很快变得复杂。在 Robot 中使用您自己的 Python 库绝对没有错,所以这可能是更好的途径。 也就是说,您可以在 Robot 关键字中提取 kwargs

*** Test Cases ***
mytestcase
    mykeyword    abc=1    def=2

*** Keywords ***
mykeyword
    [Arguments]    @{kwargs}
    :FOR    ${arg}    IN    @{kwargs}
    \    ${key}    ${value}=    Evaluate    "${arg}".split("=")
    \    Log    ${key}, ${value}

因此,在此脚本中,循环的每次迭代都会为提供给函数的每个关键字参数提取 ${key} 和 ${value}`。

我还没有用过,但是最新版本的机器人框架(2.9)也有字典变量,这可能会使这样的任务更容易一些,即没有循环。不过,您必须参考 Robot Framework Docs

在robot中是可行的,但是代码会非常难读。这绝对最好在 python.

中完成

从机器人框架 2.8 开始,用户关键字可以接受关键字参数。语法使用 & 而不是 $@。因此,要编写一个接受关键字参数的关键字,您可以这样做:

*** Keywords ***
| Convert
| [Arguments] | &{args}

要迭代键和值,您可以将字典转换为列表,然后一次迭代两个列表。它看起来像这样:

| | ${result}= | set variable | ${EMPTY}
| | ${items}= | Get Dictionary items | ${args}
| | :FOR | ${key} | ${value} | IN | @{items}
| | | ${result}= | run keyword if | '${key}' in ${keywords}
| | | ... | catenate | ${result} | ${key}=${value}
| | | ... | ELSE
| | | ... | catenate | ${result} | set ${key}=${value}
| | [return] | ${result}

您可能需要调整返回的内容。我不确定您到底想要什么(您的示例包含破折号,但描述中没有)