4. RobotFramework 流程控制

FOR 循环

FOR 循环可以与测试用例和用户关键字一起使用。除了非常简单的情况外,更推荐使用用户关键字,因为它们隐藏了 FOR 循环引入的复杂性。基本的 FOR 循环语法 , FOR item IN sequence 源自 Python,但其他各种编程语言也支持类似的语法。

基本的 FOR 循环

在正常 FOR 循环中,根据值列表分配一个变量,每次迭代一个值。语法以 FOR(区分大小写)作为标记开始,然后是循环变量,然后是 IN(区分大小写)作为分隔符,最后是要迭代的值。这些值可以包含 变量,包括列表变量。循环中使用的关键字位于 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 循环。

*** Test Cases ***
Example
    FOR    ${element}    IN    @{elements}
        Log To Console    ${element}
    END

*** Variables ***
@{elements}     1    2    3    4

旧版本 FOR 循环

在 Robot Framework 3.1 之前,FOR 循环语法与现在不同。开始循环的标记是 :FOR 而不是 FOR。循环内容需要用反斜杠显式标记,而不是使用 END 标记结束循环。上面的第一个示例使用旧语法看起来像这样:

*** Test Cases ***
Example
    :FOR    ${animal}    IN    cat    dog
    \    Log    ${animal}
    \    Log    2nd keyword
    Log    Outside loop

旧语法在 Robot Framework 3.2 中已弃用,对它的支持在 Robot Framework 4.0 中完全删除。

使用多个变量循环

FOR 通过在和 IN 标记之间使用多个循环变量,可以在一次迭代中迭代多个值。可以有任意数量的循环变量,但值的数量必须能被变量的数量整除。每次迭代都会消耗与变量一样多的值。如果有很多值要迭代,通常将它们组织在循环变量下方会很方便,如下面示例的第一个循环所示:

*** Test Cases ***
Multiple loop variables
    FOR    ${index}    ${english}    ${finnish}    IN
    ...    1           cat           kissa
    ...    2           dog           koira
    ...    3           horse         hevonen
        Add Translation    ${english}    ${finnish}    ${index}
    END
    FOR    ${name}    ${id}    IN    @{EMPLOYERS}
        Create    ${name}    ${id}
    END

FOR-IN-RANGE 循环

该循环方式和 Python 语法中的 range 区别在于除了可以迭代整数还可以迭代小数。

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

WHILE 循环

WHILE 循环结合了 FOR 循环和 IF/ELSE 结构的特性。只要条件保持为真,它们就会指定一个条件并重复循环体。例如,这可以用来重复一个不确定的序列,直到出现所需的结果,或者在某些情况下,它们可以用作 FOR 循环的替代方案。

基本的 WHILE 循环

*** Test Cases ***
Example
    ${rc} =   Set Variable    10
    WHILE    ${rc} != 0
        Log To Console    ${rc}
        ${rc} =    Evaluate    ${rc} - 1
    END

限制 WHILE 循环迭代

使用 WHILE 循环,总是有可能实现无限循环,无论是有意还是无意。当循环条件永远不会变为假时,就会发生这种情况。虽然无限循环在应用程序编程中具有一定的实用性,但在自动化中,无限循环很少是期望的结果。如果 Robot Framework 出现这样的循环,则必须强制停止执行,并且不能创建日志或报告。因此,Robot Framework 中的 WHILE 循环默认限制为 10000 次迭代。如果超出限制,则循环失败。

可以使用 limit 配置参数更改限制。有效值为正整数,表示迭代计数和时间字符串,如 10s 或 1 hour 10 minutes 表示最大迭代时间。也可以使用 NONE(不区分大小写) 完全禁用该限制。以下示例说明了所有这些选项。

*** Test Cases ***
Limit as iteration count
    WHILE    True    limit=100
        Log    This is run 100 times.
    END

Limit as time
    WHILE    True    limit=10 seconds
        Log    This is run 10 seconds.
    END

No limit
    WHILE    True    limit=NONE
        Log    This must be forcefully stopped.
    END

IF/ELSE 语法

基本 IF 语法

Robot Framework 的原生 IF 语法以 IF(区分大小写)开头,以 END(区分大小写)结尾。IF 强烈建议在块中缩进关键字,但不是强制性的。

*** Test Cases ***
Example
    ${var1}    Set Variable    1
    ${var2}    Set Variable    2
    IF    ${var1} < ${var2}
        Log To Console    var1 is less than var2
    ELSE IF    ${var1} > ${var2}
        Log To Console    var1 is greater than var2
    ELSE
        Log To Console    var1 is equal var2
    END

IF 的其他用法

还有其他方法可以有条件地执行关键字:

  • BuiltIn 关键字 Run Keyword If 和 Run Keyword unless 仅在某个表达式为真或假时分别执行命名关键字。不过,通常建议使用上面解释的新语法 IF/ELSE。
  • 另一个BuiltIn关键字Set Variable If 可用于根据给定表达式动态设置变量。
posted @ 2022-05-15 12:03  Jathon-cnblogs  阅读(613)  评论(0编辑  收藏  举报