如何将列表列表作为参数提供给机器人框架测试模板

How to feed a list of lists as an argument into a Robot Framework Test Template

我的 "do any combination" 测试有模板关键字,其中 ${labels} 是一个列表,${versions} 是列表的列表:

TT Process Instance Version Search
    [Arguments]     ${labels}    ${versions}
    Login
    Process Instance Version Search     ${labels}    ${versions}

然后我创建一个测试套件文件并放置以下内容:

*** Settings ***
Test Template   TT Process Instance Version Search


*** Variables ***
@{ProcessVersions} =   ${Process0}     ${Process1}     ${Process2}
@{SingleVersion} =  ${Process2}
@{Process0} =   1   2
@{Process1} =   3   test_version
@{Process2} =   1

@{SingleProcessLabel} =  Label1
@{ProcessLabels} =  Label1     Label2   Label3

    *** Test Cases ***                                     
Single Instance Version for a Single Process     ${SingleProcessLabel}   ${SingleVersion}
Distinct Instance Versions for Multiple Processes    ${ProcessLabels}  ${ProcessVersions}

我得到的错误信息是"List variable '@{versions}' has no item in index 0."

我对此进行了很多尝试,包括使用嵌入式参数,而我设法修复它的唯一方法是直接提供 $versions 作为全局变量。我的代码适用于全局变量,但我必须手动更改数据。我真正需要的是实施数据驱动设计。

非常感谢任何建议和帮助!

来自对您所写问题的评论:

The question is: How to feed list of lists as an argument into a Test template?

答案记录在机器人框架用户指南中标题为 List Variables 的部分中。调用关键字时,如果在变量前加一个$,变量会被当作一个列表object。如果使用 @,变量将被拆分为多个参数。

在编写接受参数的关键字时,也是如此。如果您想要单个参数,请使用 $ 作为参数变量。如果要将所有参数收集为列表,请使用 @.

这是一个显示几个示例的测试:

*** Variables ***
@{numbers}    1    2    3
@{letters}    a    b    c    d
@{listoflists}    ${numbers}    ${letters}

*** Keywords ***
Accept list of lists as single arg
    [Arguments]         ${arguments}
    length should be    ${arguments}       2
    length should be    ${arguments[0]}    3
    length should be    ${arguments[1]}    4

Accept multiple args
    [Arguments]         @{arguments}
    length should be    ${arguments}       2
    length should be    ${arguments[0]}    3
    length should be    ${arguments[1]}    4


*** Test cases ***
Pass list of lists as single argument
    Accept list of lists as single arg       ${listoflists}

Pass list of lists as multiple arguments
    Accept multiple args    @{listoflists}
    Accept multiple args    ${numbers}    ${letters}