繁体   English   中英

机器人框架:循环通过kwargs

[英]Robot framework: looping through kwargs

我需要在robot中获取一个关键字参数列表,如果关键字在某个列表中, set key=value它们转换为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中完成。

从机器人框架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}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM