我正在尝试在机器人框架的测试模板中设置测试变量
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}
字典。
我正在尝试 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}
字典。