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 可用于根据给定表达式动态设置变量。