List 如何将列表列表作为参数输入Robot框架测试模板

List 如何将列表列表作为参数输入Robot框架测试模板,list,robotframework,data-driven-tests,List,Robotframework,Data Driven Tests,我的“任意组合”测试有一个模板关键字,${labels}是一个列表,${versions}是一个列表列表: TT Process Instance Version Search [Arguments] ${labels} ${versions} Login Process Instance Version Search ${labels} ${versions} 然后,我创建一个测试套件文件并放置以下内容: *** Settings ***

我的“任意组合”测试有一个模板关键字,${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}
我得到的错误消息是“列表变量'@{versions}'在索引0中没有项。”

我在这方面做了很多工作,包括使用嵌入参数,而我解决它的唯一方法是直接提供$versions作为全局变量。我的代码可以很好地处理全局变量,但我必须手动更改数据。我真正需要的是实现数据驱动的设计


非常感谢您的建议和帮助

从对您所写问题的评论中:

问题是:如何将列表列表作为参数提供给测试模板

答案记录在robot framework用户指南中,标题为。调用关键字时,如果在变量前面使用
$
,该变量将被视为列表对象。如果使用
@
,变量将被拆分为多个参数

当编写接受参数的关键字时,情况也是如此。如果需要单个参数,请对参数变量使用
$
。如果要将所有参数收集为一个列表,请使用
@

下面是一个测试,显示了几个示例:

*** 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}

从对您所写问题的评论中:

问题是:如何将列表列表作为参数提供给测试模板

答案记录在robot framework用户指南中,标题为。调用关键字时,如果在变量前面使用
$
,该变量将被视为列表对象。如果使用
@
,变量将被拆分为多个参数

当编写接受参数的关键字时,情况也是如此。如果需要单个参数,请对参数变量使用
$
。如果要将所有参数收集为一个列表,请使用
@

下面是一个测试,显示了几个示例:

*** 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}

如果您可以将所有代码缩减为一个文件,并尽可能减少行数,这将有所帮助。很难费力地读完那篇长篇大论。我的猜测是,这可以减少到几十行代码。看。对不起,如果这太长了。这只是我正在处理的具体案例的一个例子。问题是:如何将列表列表作为参数输入测试模板?如果这是您真正的问题,请编辑您的问题并删除所有不必要的代码。然而,这个问题是非常不清楚的,因为“我如何通过列表列表”的答案是简单地创建一个列表列表,然后像其他任何参数一样传递它。机器人在传递列表时没有问题,但我怀疑你的意思不止这些。您是否在问如何获取列表列表,并将子列表中的每个元素视为一个参数(即:将列表平铺为一个参数列表)?如果您可以将所有这些代码缩减为一个具有尽可能少的行的文件,这会有所帮助。很难费力地读完那篇长篇大论。我的猜测是,这可以减少到几十行代码。看。对不起,如果这太长了。这只是我正在处理的具体案例的一个例子。问题是:如何将列表列表作为参数输入测试模板?如果这是您真正的问题,请编辑您的问题并删除所有不必要的代码。然而,这个问题是非常不清楚的,因为“我如何通过列表列表”的答案是简单地创建一个列表列表,然后像其他任何参数一样传递它。机器人在传递列表时没有问题,但我怀疑你的意思不止这些。您是否在问如何获取列表列表并将子列表的每个元素视为参数(即:将列表展平为单个参数列表)?嗨,Brian,谢谢您的帮助。这不正是我正在做的吗?将列表@{ProcessLabels}和列表@{ProcessVersions}作为单个参数传递:${ProcessLabels}和${ProcessVersions}?当我使用全局变量时,这样做没有问题-问题是当我尝试使用测试模板时。@emi:我不知道。您没有发布足够的信息来复制问题。这就是为什么我要一个mcve()谢谢你,布莱恩。在使用伪关键字进行了几次测试之后,我发现问题出在代码本身,而不是测试模板上——当设置了全局变量时,不会抛出错误。但是,PyCharm(或者至少是社区版)不会返回错误所在的代码行,因此我假设这是测试模板问题。你能推荐一个更好的IDE来编写机器人脚本吗?嗨,布莱恩,谢谢你的帮助。这不正是我正在做的吗?将列表@{ProcessLabels}和列表@{ProcessVersions}作为单个参数传递:${ProcessLabels}和${ProcessVersions}?当我使用全局变量时,这样做没有问题-问题是当我尝试使用测试模板时。@emi:我不知道。您没有发布足够的信息来复制问题。这就是为什么我要一个mcve()谢谢你,布莱恩。在使用伪关键字进行了几次测试之后,我发现问题出在代码本身,而不是测试模板上——当设置了全局变量时,不会抛出错误。但是,PyCharm(或者至少是社区版)不会返回错误所在的代码行,因此我假设这是测试模板问题。你能推荐一个更好的IDE来编写机器人脚本吗?