字典作为Robot Framework中的变量:代码运行正常但IDE产生错误

时间:2017-03-07 03:27:20

标签: robotframework

我正在尝试将字典设置为变量(因此我可以将其用作资源并从其他文件访问其值)并且有些东西让我发疯。

这是我的代码(仅用于测试目的):

*** Settings ***
Documentation    Suite description
Library  Collections

*** Variables ***
&{SOME DICT}  key1=value1  key2=value2

*** Test Cases ***
Dict Test                                # why $ instead of &?
    ${RANDOM VAR}=  Get From Dictionary  ${SOME DICT}  key1
    Log  ${RANDOM VAR}  WARN

如果我运行它,我得到了预期的结果( [WARN] value1 )但IDE(PyCharm)抱怨 $ {SOME DICT} 变量是未定义,字典声明不会突出显示与变量或列表相同。

如果我将其更改为& {SOME DICT} ,IDE将不再抱怨,但测试失败并显示以下输出:

Dict Test                                                             | FAIL |
Keyword 'Collections.Get From Dictionary' got positional argument after named arguments.

令我感到困惑的是,为什么我必须使用$而不是&如果它是一本字典使它工作?有什么我做错了,它只是运气好吗?

感谢您提供任何建议或指导!

2 个答案:

答案 0 :(得分:2)

了解"从词典中获取" libdoc,看起来像示例显示与您的工作片段相同:

Name: Get From Dictionary
Source: Library (Collections)
Arguments: [dictionary, key]

Returns a value from the given ``dictionary`` based on the given ``key``.

If the given ``key`` cannot be found from the ``dictionary``, this
keyword fails.

The given dictionary is never altered by this keyword.

Example:
| ${value} = | Get From Dictionary | ${D3} | b |
=>
| ${value} = 2

关键字实施细节如下:

try:
            return dictionary[key]
        except KeyError:
            raise RuntimeError("Dictionary does not contain key '%s'." % key)

确实,Robot发送dict内容的表示而不是dict name,因此可以返回key的值。 这与python中的直接调用相同:

a = {u'key1': u'value1', u'key2': u'value2'}
print(a['key1'])

最后,该KW的libdoc并不简单,但在这种情况下,你的机器人PyCharm插件无法正常工作。 在RED Robot Editor(基于Eclipse)中,正确的情况不会在编辑器中出现任何警告,错误的情况提供关于参数的错误标记(更好但仍然不清楚究竟是什么错误。责备简约的libdoc信息)。

PS。我是RED项目的领导要清楚。

答案 1 :(得分:0)

<块引用>

在机器人框架中使用键值变量的简单示例 将值设置为字典 从字典中获取值

&{initValues} 创建字典 key1=value1 key2=value2

设置为字典 ${initValues} key1=newvalue1

设置为字典 ${initValues} key2=newvalue2

设置为字典 ${initValues} key3=newvalue3

${value} 从字典中获取 ${intialValues} key1