一、介绍:RobotFrameWork 支持 FOR 循环语句,语法和 Python 的语法基本相同,但 RobotFrameWork 中,需要 END 结束,其它与 Python 的语法相同
二、For 循环实例
- FOR IN
- 这种结构,循环的次数由 "IN" 关键字后面的变量个数控制
- 在 FOR 循环语句结束行加上 END,防止报错 "FAIL : FOR loop contains no keywords
FOR ${var} IN Apple Banana Grape log ${var} END #结果如下 20200407 22:06:31.272 : INFO : Apple 20200407 22:06:31.273 : INFO : Banana 20200407 22:06:31.274 : INFO : Grape
@{list} Create List Apple Banana Grape FOR ${var} IN @{list} log ${var} END #结果如下 20200407 22:09:51.195 : INFO : @{list} = [ Apple | Banana | Grape ] 20200407 22:09:51.196 : INFO : Apple 20200407 22:09:51.197 : INFO : Banana 20200407 22:09:51.198 : INFO : Grape
- FOR IN RANGE
- 这种写法更常用一些,"IN RANGE" 后面跟一个整数型的数字的范围,循环的次数受数字的范围控制
- 从结果我们可以看出,${var} 的值从 3 开始,一直被赋值到 4,循环 2 次
FOR ${var} IN RANGE 3 5 log ${var} END #结果如下 20200407 22:12:30.172 : INFO : 3 20200407 22:12:30.173 : INFO : 4
-
- "IN RANGE" 后面也可以只写一个数字,表示范围的下限默认是0
FOR ${var} IN RANGE 3 log ${var} END #结果如下 20200407 22:14:01.269 : INFO : 0 20200407 22:14:01.270 : INFO : 1 20200407 22:14:01.271 : INFO : 2
-
- 以上两种写法,步长默认步长都是 1,我们也可以修改步长,如下修改步长为 10
FOR ${var} IN RANGE 20 40 10 log ${var} END #结果如下 20200407 22:15:49.798 : INFO : 20 20200407 22:15:49.799 : INFO : 30
- For IN ENUMERATE 循环
- 有些时候需要知道当前循环中的循环位置的 index 编号,此时可以使用 FOR-IN ENUMERATE 关键字,在取 index 编号时,固定使用 ${index} 作为变量名
@{list} Create List Apple Banana Grape FOR ${index} ${var} IN ENUMERATE @{list} log ${index}:${var} END #结果如下 20200407 22:21:52.578 : INFO : @{list} = [ Apple | Banana | Grape ] 20200407 22:21:52.579 : INFO : 0:Apple 20200407 22:21:52.580 : INFO : 1:Banana 20200407 22:21:52.581 : INFO : 2:Grape
- For IN ZIP 循环
- 对于有些测试来说,可能会用到多个列表的数据,在循环中需要对这些数据进行组合使用,RF 提供了一个叫做 For-IN ZIP 的关键字,该关键字来自于 python 内置的 zip 函数,可用于对列表进行组合
- 这里注意,我们在定义一个列表变量时,可以使用 ${列表名},也可以使用 @{列表名},而在 For-IN ZIP 循环中使用该关键字时,只能使用 ${列表名}
@{num} Create List 1 2 3 4 ${name} Create List zhangsan lisi wangwu zhaoliu FOR ${n1} ${n2} IN ZIP ${num} ${name} log ${n1}:${n2} END #结果如下 20200407 22:26:58.989 : INFO : @{num} = [ 1 | 2 | 3 | 4 ] 20200407 22:26:58.990 : INFO : ${name} = ['zhangsan', 'lisi', 'wangwu', 'zhaoliu'] 20200407 22:26:58.991 : INFO : 1:zhangsan 20200407 22:26:58.992 : INFO : 2:lisi 20200407 22:26:58.993 : INFO : 3:wangwu 20200407 22:26:58.994 : INFO : 4:zhaoliu
三、退出循环
- Exit For Loop 退出循环
- RF 也提供了退出循环的语句 —— Exit For Loop,遇到这个语句,脚本将无条件提出循环
-
如下 ${var} 被赋值到 Banana,触发了 Exit For Loop 语句而推出了循环
@{list} Create List Apple Banana Grape FOR ${var} IN @{list} Run Keyword If "${var}" == "Banana" Exit For Loop log ${var} END #结果如下 20200407 22:31:01.587 : INFO : @{list} = [ Apple | Banana | Grape ] 20200407 22:31:01.589 : INFO : Apple 20200407 22:31:01.590 : INFO : Exiting for loop altogether.
- Exit For Loop If 满足条件后退出循环
@{list} Create List Apple Banana Grape FOR ${var} IN @{list} Exit For Loop If "${var}" == "Grape" log ${var} END #结果如下 20200408 20:02:30.821 : INFO : @{list} = [ Apple | Banana | Grape ] 20200408 20:02:30.822 : INFO : Apple 20200408 20:02:30.824 : INFO : Banana
- 在循环中使用 Continue,终止单个循环
- Continue For Loop
@{list} Create List Apple Banana Grape FOR ${var} IN @{list} Run Keyword If "${var}" == "Banana" Continue For Loop log ${var} END #结果如下 20200408 20:06:05.555 : INFO : @{list} = [ Apple | Banana | Grape ] 20200408 20:06:05.557 : INFO : Apple 20200408 20:06:05.558 : INFO : Continuing for loop from the next iteration. 20200408 20:06:05.560 : INFO : Grape
-
- Continue For Loop If
@{list} Create List Apple Banana Grape FOR ${var} IN @{list} Continue For Loop If "${var}" == "Banana" log ${var} END #结果如下 20200408 20:07:36.902 : INFO : @{list} = [ Apple | Banana | Grape ] 20200408 20:07:36.903 : INFO : Apple 20200408 20:07:36.904 : INFO : Continuing for loop from the next iteration. 20200408 20:07:36.906 : INFO : Grape