Python集的Robot框架实现

Python集的Robot框架实现,python,robotframework,Python,Robotframework,当我编写Robot框架测试时,我错过了集合。 我试着像这样模仿我需要的东西: Create Set [arguments] @{elements} ${set}= Evaluate {e for e in @{elements}} [return] ${set} Sets Should Be Equal [arguments] ${a} ${b} ${equal} Evaluate set(@{a}) ==

当我编写Robot框架测试时,我错过了集合。 我试着像这样模仿我需要的东西:

Create Set
    [arguments]    @{elements}
    ${set}=    Evaluate    {e for e in @{elements}}
    [return]    ${set}

Sets Should Be Equal
    [arguments]    ${a}    ${b}
    ${equal}    Evaluate    set(@{a}) == set(@{b})
    Should Be True    ${equal}

Append to Set
    [arguments]    ${set}    ${new}
    Evaluate    ${set}.add(${new})
看起来,前两个关键词很好

附加到集合
不起作用,
${new}
从未添加到集合中。我猜关键字正在处理一个副本,由于
set.add
返回
None
,因此该副本被丢弃而没有任何效果

我试图从关键字返回
${set}
,并保存关键字调用的结果,但没有效果

robot-log.html对于
Create Set
(工作)而言如下所示:

对于
附加到Set
(不工作)来说,如下所示:

我可以修改作为参数传递的集合吗


另一个问题是
Append to Set
需要引用新参数,而
Create Set
不需要引用新参数。

对于这两个问题,解决方案是在变量名周围省略
{
}
字符

Append to Set
    [arguments]    ${set}    ${new}
    Evaluate    $set.add($new)
从关键字的文档:

像${variable}这样使用的变量在计算之前在表达式中被替换。变量也可以在求值命名空间中使用,并且可以使用特殊的$variable语法进行访问,如中所述

从:

使用变量

当使用普通${variable}在表达式中使用变量时 语法,则在计算表达式之前替换其值这个 表示表达式中使用的值将是字符串 表示变量值,而不是变量值本身。 对于数字和其他具有 可以直接求值但使用其他 对象的行为取决于字符串表示形式。Most 重要的是,字符串必须始终被引用,如果它们可以包含 换行符必须是三重引号

示例:

Should Be True    ${rc} < 10  Return code greater than 10     
Run Keyword If    '${status}' == 'PASS'   Log     Passed
Run Keyword If    'FAIL' in '''${output}'''   Log     Output contains FAIL
应为True${rc}<10返回大于10的代码
如果通过了“${status}”==“PASS”日志,则运行关键字
如果“${output}”中的“FAIL”日志输出包含FAIL,则运行关键字
评估中还提供了实际变量值 命名空间。可以使用特殊变量语法访问它们,而无需 大括号像$variable。这些变量永远不应该被忽略 引用


@高蒂尔:你试过了吗?