在 Robot Framework 中减去两个 dict 值

Posted

技术标签:

【中文标题】在 Robot Framework 中减去两个 dict 值【英文标题】:Subtracting two dict values in Robot Framework 【发布时间】:2020-07-21 20:44:45 【问题描述】:

我有两个字典

$Dict1='Test_1': 'l': 307, 'T': 290, 'R': 5785, 'Bo': 4693 ,'Test_2': 'l': 307, 'T': 290, 'R': 5785, 'B': 4693 
$Dict2='TestB_3': 'l': 310, 'T': 295, 'R': 5785, 'Bo': 4693 ,'TestB_4': 'l': 307, 'T': 290, 'R': 5785, 'B': 4693 

我想减去并得到这样的结果 $Dict1-$Dict2

$Result = 'Test_1': 'l': -3 , 'T': -5, 'R': 0, 'Bo': 0 ,'Test_2': 'l': 0, 'T': 0, 'R': 0, 'B': 0

我知道如何在 Python 中做,但是在 Robot 框架中,我不明白

在 Python 中,

我们做类似的事情

for key1,Key2 in zip(dict1.key, dict2.key):
     result[key1]=dict[Key1]-dict[key2]

在python的ROBOT框架中是否有这样的东西

更新更多信息

$x2    Create Dictionary    x2=2
$x1    Create Dictionary    x1=5
FOR    $key_of_Orginal    $key_of_Actual    IN ZIP    @x2    @x1
Log    $key_of_Orginal
Log    $key_of_Actual
END

会报这个错误

Starting test: ManualMargin.Test1.Test8
20200410 14:41:52.061 :  INFO : $x2 = 'x2': '2'
20200410 14:41:52.063 :  INFO : $x1 = 'x1': '5'
20200410 14:41:52.064 :  FAIL : FOR IN ZIP items must all be list-like, got string.
Ending test:   Test8

【问题讨论】:

【参考方案1】:

您的机器人框架格式的 Python 代码:

FOR    $key1    $key2    IN ZIP    $dict1    $dict2
    $value=    Evaluate    $dict1[$key1] - $dict2[$key2]
    Set do Dictionary    $result    $key1    $value
END

如您所见,这里的语法几乎相同。

您采用的方法有很强的依赖性 - 两个字典具有相同的键,它们的顺序相同,并且在检索它们时会保留该顺序(最后一个适用于 python 版本 3.6+) .否则,您可能会减去不同键的值。 一个更可靠的方法是只迭代两者中的一个的键,确保它存在于第二个中,然后进行计算。例如:

FOR    $key1    IN    @dict1
    $exists=    Run Keyword And Return Status    Dictionary Should Contain Key    $dict2   $key1
    Continue For Loop If    not $exists    # the other doesn't have it, cannot do the calc
    $value=    Evaluate    $dict1[$key1] - $dict2[$key1]
    Set do Dictionary    $result    $key1    $value
END

【讨论】:

FOR IN ZIP items must all be list-like, got string 我看到了这个错误。我尝试了第一种方法 $dict1$dict2 变量必须是正确的字典,您很可能传递的是 json 字符串。 我将 Dict1 和 Dict2 作为我的关键字中的参数,格式如上。像这样[Arguments] $Dict1 $Dict2 只是为了获取更多信息,我在变量进入 for 循环之前记录了它,就像这样。 'C:\page268.tif': 'L': 307, 'T': 290, 'R': 5785, 'B': 4693 。这是相同的格式情况下另一个变量也是。 IN ZIP 需要一个变量引用,而不是扩展一个;我已经更新了答案。【参考方案2】:

一种解决方案是用 Python 编写一个函数,如下所示,并将其添加到用户定义的库中,然后将该库导入您想要使用它的位置。

def sub_dict(dict1, dict2):
    result = 
    for tuple in zip(dict1.keys(), dict2.keys()):
        result[tuple[0]] = dict1[tuple[0]] - dict2[tuple[1]]
    return result

【讨论】:

以上是关于在 Robot Framework 中减去两个 dict 值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Robot Framework 中比较两个图像

如何使用 Robot Framework 比较两个 csv 文件

是否可以通过 Xpath 在 Robot Framework 中同时等待两个 Web 元素?

Robot Framework 如何获取文本项

[Robot Framework] 校验字符串中是否包含某个子字符串,校验同时满足两个条件中任意一个

Robot Framework 读取控制面板安装的程序,判断某个程序是否已经安装