机器人框架:循环通过kwargs

时间:2015-09-11 15:53:59

标签: python robotframework

我需要在机器人中获取一个关键字参数列表,如果关键字在某个列表中,则将它们转换为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}进行迭代,但我不确定如何单独检索键和值。

2 个答案:

答案 0 :(得分:2)

它在机器人中是可行的,但代码将很难阅读。这肯定最好在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}

您可能需要调整返回的内容。我不确定你想要什么(你的例子包括破折号,但说明没有)

答案 1 :(得分:1)

这是一个简单的例子。我不会尝试在这里重新创建你的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}。

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