机器人框架:通过 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}
您可能需要调整返回的内容。我不确定您到底想要什么(您的示例包含破折号,但描述中没有)
我需要获取机器人中的关键字参数列表,如果关键字在某个列表中,则将它们转换为 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}
您可能需要调整返回的内容。我不确定您到底想要什么(您的示例包含破折号,但描述中没有)