我正在尝试在机器人框架的测试模板中设置测试变量

I am trying to set Test variable in test template of robot framework

我正在尝试 set test variable Test template。我不明白为什么会看到此错误。如果我 运行 没有 Test template 它工作得很好。请帮忙

*** Settings ***
Documentation    Suite description
Test Template       Templete keyword   


*** Test Cases ***
Test case1
    set test variable       @{FileTypes}        JPEG

Test case 2
    run keyword     pass execution  tes
   

*** Keywords ***
Templete keyword
     [Arguments]        @{kw}    &{args}
     run keyword and ignore error           @{kw}    &{args}

下面是命令行中的结果

Test title                                                            | FAIL |
Variable '@{FileTypes}' not found.
------------------------------------------------------------------------------
Test case 2                                                           | PASS |
tes
------------------------------------------------------------------------------

下面是第一个测试用例 log.html 中的结果。

粗略地说,因为当关键字到达大小写时,它试图将变量 @{FileTypes} 扩展为其成员,因此它可以将它们作为参数传递给关键字 Templete keyword
它失败了,因为此时没有定义这样的变量。


我已经为您找到了解决方法 - 但它并不完美。
您可以传递对变量本身的引用,而不是将变量的值传递给关键字——即使它尚未定义。所以情况可能是:

Test case1
    set test variable       @FileTypes        JPEG

,并在关键字内创建一个列表变量。
但是 - 因为有 @{kw} &{args} - 它还有一个空字典成员。创建的变量的值变成这样:

['JPEG', {}]

如果您删除模板关键字中的 &{args},那么它就是您所期望的 - 单个成员;但是你不能将那个关键字与命名参数一起使用。

如果你(在这种情况下)用普通的 (标量) 变量标识符($)而不是列表中的一个(@ ):

Test case1
    set test variable       $FileTypes        JPEG

,然后由于 &{args} 框架抛出异常:

Setting list value to scalar variable '${FileTypes}' is not supported anymore. Create list variable '@{FileTypes}' instead.

如果您删除 &{args},异常就会消失;但是您只能创建标量变量,而不能创建列表变量。

==> 如果我处在你的位置,我会重新评估所选择的方法。

当传递一个变量作为参数时,只有变量值被传递给关键字。因此,您实际上是在给 Robot [] 而不是列表变量名。为避免这种情况,在将其作为参数传递给 \ 时需要 escape the variable

简而言之,您的关键字应该如下所示

Set Test Variable       \@{FileTypes}        JPEG

脚本的其余部分可以保持原样,您可以在执行关键字后正常使用列表@{FileTypes}

请注意,无论您向列表中添加什么,都会有一个空字典值作为最后一个列表值,因为您在关键字调用中使用了 &{args} 字典。