我有一个具有单个功能的库,可以从字典中安全地获取密钥。在测试套件中可能吗?
def safe_get(dict_obj, key): val = dict_obj.get(key) if val is None: val = {} return val
有没有办法使用类似Run_Keyword_If
or 的方法来做到这一点Set_Variable_If
?
假设您使用的是Robot 2.9或更高版本,则可以get
使用Evaluate关键字在字典上调用该方法,该关键字将允许您在键不存在时指定默认值。
例如:
| | ${data}= | create dictionary | ... | | ${value}= | evaluate | $data.get("some key", "default value")
从robotframework 2.9开始,您可以通过删除花括号直接访问表达式中的变量(请参阅BuiltIn库文档中的“ 评估表达式 ” )。例如,如果您有一个名为的字典,则可以在表达式中使用实际变量。${data}
$data
这使得在python表达式中使用变量非常容易。例如,如果您想为字典没有键时提供默认值,则可以get
使用带有类似的Evaluate关键字来调用字典的方法$data.get(...)
。
还要注意,robot将变量定义为${None}
python值None
(而不是字符串"None"
),您可以在表达式中使用它来检查值是否为None
。
下面的示例演示如何使用evaluate
调用get
字典的方法。第一个测试显示您可以检查None
值,第二个示例显示如何提供默认值。
*** Settings *** | Library | Collections *** Test Cases *** | Get value from dictionary, returning None if key not in dictionary | | ${data}= | Create dictionary | key1=one | key2=two | | ${value}= | Evaluate | $data.get("key3") | | should be equal | ${value} | ${None} | Get value from dictionary, returning default value if key not in dictionary | | ${data}= | Create dictionary | key1=one | key2=two | | ${value}= | Evaluate | $data.get("key3", "default value") | | should be equal as strings | ${value} | default value
当然,如果您希望默认值是一个新的字典(如您的问题所暗示),您也可以这样做:
| | ${value}= | Evaluate | $data.get("key3", {})