Bootstrap

9、for循环的新旧语法详解【robot framework】

新语法格式:"FOR…IN…END"

这种是Robot Framework 3.1之后的用法。

FOR循环中使用的关键字位于接下来的行中,循环以END(区分大小写)在单独的行上结束。循环内的关键字不需要缩进,但强烈建议进行缩进,以使语法更易于阅读

*** Test Cases ***

Example

    FOR    ${animal}    IN    cat    dog

        Log    ${animal}

        Log    2nd keyword

    END

    Log    Outside loop


Second Example

    FOR    ${var}    IN    one    two    ${3}    four    ${five}

    ...    kuusi    7    eight    nine    ${last}

        Log    ${var}

    END

旧语法格式:":FOR…IN…\...\"

这种是Robot Framework 3.1之前的用法。

*** Test Cases ***

Example

    :FOR    ${animal}    IN    cat    dog

    \    Log    ${animal}

    \    Log    2nd keyword

    Log    Outside loop

同一个关键字的换行不需要以“\”开头,以下写法会报错:"Escaping empty cells with '\' before line continuation marker '...' is deprecated. Remove escaping before Robot Framework 3.2.

*** Test Cases ***

Debug

    ${Str} =    Set Variable    Rose

    : FOR    ${Ctr}    IN RANGE    1    5

    \    Run Keyword If    '${Str}' == 'Test'    Log    Test

    \    ...    ELSE    Log    Not Test

正确写法:

*** Test Cases ***

Debug

    ${Str} =    Set Variable    Rose

    : FOR    ${Ctr}    IN RANGE    1    5

    \    Run Keyword If    '${Str}' == 'Test'    Log    Test

         ...    ELSE    Log    Not Test

㠌套for循环

从Robot Framework 4.0开始支持㠌套语法, FOR 循环里面包含另一个FOR循环。

*** Test Cases ***

Multiple nesting levels

    FOR    ${root}    IN    r1    r2

        FOR    ${child}    IN    c1   c2    c3

            FOR    ${grandchild}    IN    g1    g2

                Log Many    ${root}    ${child}    ${grandchild}

            END

        END

        FOR    ${sibling}    IN    s1    s2    s3

            IF    '${sibling}' != 's2'

                Log Many    ${root}    ${sibling}

            END

        END

    END

FOR-IN-RANGE loop

控制循环范围从 0 到 9,1到11或者自定义的步长。

*** Test Cases ***

Only upper limit

    [Documentation]    Loops over values from 0 to 9.

    FOR    ${index}    IN RANGE    10

        Log    ${index}

    END

Start and end

    [Documentation]    Loops over values from 1 to 10.

    FOR    ${index}    IN RANGE    1    11

        Log    ${index}

    END

Also step given

    [Documentation]    Loops over values 5, 15, and 25.

    FOR    ${index}    IN RANGE    5    26    10

        Log    ${index}

    END

Negative step

    [Documentation]    Loops over values 13, 3, and -7.

    FOR    ${index}    IN RANGE    13    -13    -10

        Log    ${index}

    END

Arithmetic

    [Documentation]    Arithmetic with variable.

    FOR    ${index}    IN RANGE    ${var} + 1

        Log    ${index}

    END

Float parameters

    [Documentation]    Loops over values 3.14, 4.34, and 5.54.

    FOR    ${index}    IN RANGE    3.14    6.09    1.2

        Log    ${index}

    END

FOR-IN-ENUMERATE loop

包含index的列表循环

*** Variables ***

@{LIST}         a    b    c

*** Test Cases ***

Manage index manually

    ${index} =    Set Variable    -1

    FOR    ${item}    IN    @{LIST}

        ${index} =    Evaluate    ${index} + 1

        My Keyword    ${index}    ${item}

    END

FOR-IN-ENUMERATE

    FOR    ${index}    ${item}    IN ENUMERATE    @{LIST}

        My Keyword    ${index}    ${item}

    END

FOR-IN-ZIP loop

支持同时遍历长度相同的多个列表

*** Variables ***

@{NUMBERS}       ${1}    ${2}    ${5}

@{NAMES}         one     two     five

*** Test Cases ***

Iterate over two lists manually

    ${length}=    Get Length    ${NUMBERS}

    FOR    ${index}    IN RANGE    ${length}

        Log Many    ${NUMBERS}[${index}]    ${NAMES}[${index}]

    END

FOR-IN-ZIP

    FOR    ${number}    ${name}    IN ZIP    ${NUMBERS}    ${NAMES}

        Log Many    ${number}    ${name}

    END

*** Variables ***

@{NUMBERS}       ${1}    ${2}    ${5}

@{NAMES}         one     two     five

@{LISTS}         ${NUMBERS}    ${NAMES}

*** Test Cases ***

FOR-IN-ZIP with lists from variable

    FOR    ${number}    ${name}    IN ZIP    @{LISTS}

        Log Many    ${number}    ${name}

    END

支持同时遍历长度不相同的多个列表

注意:必须用robot --version查一下robot版本是否支持这种新语法。

从Robot Framework 6.1开始,支持同时遍历长度不相同的多个列表.

默认情况下,最短的项决定了有多少次迭代,并且在较长项末尾的值将被忽略。可以通过使用 mode 选项来更改这一行为,该选项有三种可能的值:

STRICT:项必须具有相等的长度。如果不相等,则执行失败。这与使用 Python 的 zip 函数的 strict=True 相同。

SHORTEST:在较长的项中的项将被忽略。在此模式下支持无限迭代器,只要其中一个项耗尽即可。这是默认行为。

LONGEST:最长的项决定了有多少次迭代。在较短的项中缺少的值将使用 fill 选项指定的值填充,如果未使用 fill,则使用 None。这与使用 Python 的 zip_longest 函数相同,只是它具有 fillvalue 参数而不是 fill。

以下示例说明了所有这些模式:

*** Variables ***

@{CHARACTERS}     a    b    c    d    f

@{NUMBERS}        1    2    3

*** Test Cases ***

STRICT mode

    [Documentation]    This loop fails due to lists lengths being different.

    FOR    ${c}    ${n}    IN ZIP    ${CHARACTERS}    ${NUMBERS}    mode=STRICT

        Log    ${c}: ${n}

    END

SHORTEST mode

    [Documentation]    This loop executes three times.

    FOR    ${c}    ${n}    IN ZIP    ${CHARACTERS}    ${NUMBERS}    mode=SHORTEST

        Log    ${c}: ${n}

    END

LONGEST mode

    [Documentation]    This loop executes five times.

    ...                On last two rounds `${n}` has value `None`.

    FOR    ${c}    ${n}    IN ZIP    ${CHARACTERS}    ${NUMBERS}    mode=LONGEST

        Log    ${c}: ${n}

    END

LONGEST mode with custom fill value

    [Documentation]    This loop executes five times.

    ...                On last two rounds `${n}` has value `0`.

    FOR    ${c}    ${n}    IN ZIP    ${CHARACTERS}    ${NUMBERS}    mode=LONGEST    fill=0

        Log    ${c}: ${n}

    END

;