4)FOR…IN…ZIP循环
FOR…IN…ZIP循环的语法如下。
:FOR … IN ZIP Sequence1 Sequence2 …
\ Keyword
FOR…IN…ZIP循环一次可以处理多个列表,这有助于处理几个关联的列表。示例如下。
FOR_IN_ZIP_TestCase
${header} Set Variable ID Name Score
${row1} Set Variable 1 张三 80
: FOR ${header_item} ${row1_item} IN ZIP ${header} ${row1}
\ Log ${header_item}|${row1_item}
输出的日志如上。
INFO : ID|1
INFO : Name|张三
INFO : Score|80
5)嵌套FOR循环
在各种编程语言(如Python、Java)里,通常会用到嵌套循环,即在第一层循环下,还有第二层、第三层等循环。但是Robot Framework的“:FOR”循环不支持嵌套使用,因为第二行应该是关键字,而“:FOR”不是一个合法的关键字。以下写法是错误的。
:FOR ${row} IN @{table}
:FOR ${column} IN @{row}
Log ${column}
如果在自动化测试中必须使用双层或多层嵌套循环,该怎么办呢?我们有替代的方案—用户关键字。既然“:FOR”循环下必须是关键字,那我们就创建一个关键字,在这个关键字里再写下一层的循环即可。
*** Test Cases ***
FOR_Nested_TestCase
@{List1} Create List 1 2 3
@{List2} Create List a b c
@{List3} Create List A B C
@{Lists} Create List ${List1} ${List2} ${List3}
:FOR ${List} IN @{Lists}
\ Second Loop @{List}
*** Keywords ***
Second Loop
[Arguments] @{list_arg}
:FOR ${i} IN @{list_arg}
\ Log ${i}
“FOR_Nested_TestCase”测试用例里首先创建了一个二维数组,数组里每一行都是一个List。在FOR循环中,每次读取二维数组的一行后,都将它存入${List} Scalar变量中。然后将这个变量转换为List变量并传递给Second Loop关键字。关键字Second Loop接受一个List变量,并用FOR循环将这个List中的所有元素一一输出。
测试用例的运行结果如下。
INFO : @{List1} = [ 1 | 2 | 3 ]
INFO : @{List2} = [ a | b | c ]
INFO : @{List3} = [ A | B | C ]
INFO : @{Lists} = [ ['1', '2', '3'] | ['a', 'b', 'c'] | ['A', 'B', 'C'] ]
INFO : 1
INFO : 2
INFO : 3
INFO : a
INFO : b
INFO : c
INFO : A
INFO : B
INFO : C
6)退出循环
通常情况下,遍历队列里的所有值后,或中途出错时,循环才会退出。如果需要提前退出,可以用BuiltIn库里的关键字Exit For Loop和Exit For Loop If。二者和普通编程语言中的break类似。示例如下。
FOR_EXIT_LOOP_TestCase
@{t_list} Create List a b c d e
: FOR ${i} IN RANGE 5
\ Run Keyword If '@{t_list}[${i}]'=='d' Exit For Loop
\ Log @{t_list}[${i}]
FOR循环遍历@{t_list}列表,当循环找到值“d”时,就退出循环,不再遍历后面的值。
输出的日志如下。
INFO : @{t_list} = [ a | b | c | d | e ]
INFO : a
INFO : b
INFO : c
INFO : Exiting for loop altogether.
7)继续执行循环
除了可以跳出当前循环之外,还可以提前终止当前迭代而取下一个值来继续执行循环。BuiltIn库提供了关键字Continue For Loop和Continue For Loop If来继续执行循环。示例如下。
FOR_CONTINUE_TestCase
@{t_list} Create List a b c d e
: FOR ${i} IN RANGE 5
\ Continue For Loop If '@{t_list}[${i}]'=='d'
\ Log @{t_list}[${i}]
FOR循环用于遍历@{t_list}列表,当循环找到值“d”时,就什么都不做,继续迭代下一个值。
输出的日志如下。
INFO : @{t_list} = [ a | b | c | d | e ]
INFO : a
INFO : b
INFO : c
INFO : Continuing for loop from the next iteration.
INFO : e
3.3 小结
本章主要讲解了Robot Framework测试数据。本章首先以一个助理机器人为例直观地讲解了一个简单测试工程的搭建和测试用例的设计以及实现。Robot Framework测试数据的结构主要有测试工程及子目录、测试套件、用户关键字、变量定义、资源文件、变量文件等。
然后,本章详细讲解了Robot Framework的语法,包括Scalar、List、Dictionary这3种变量的定义和使用。其中Scalar和List变量可以互相强制转换。通过${}可以将List和Dictionary变量强制转换为Scalar变量。
除了这3种变量之外,Robot Framework还提供了一些内置变量,如当前路径、当前测试用例名字、Log路径等。此外,有些特殊的变量(如数字、布尔值、空格、日期和时间等)需要引起注意,它们有不同的表示方式。
Robot Framework测试数据中有一些特殊的标记(如Setup、Teardown、Tags、Timeout、Template等),用于影响测试用例的执行。
像大多数编程语言一样,Robot Framework也支持IF分支和FOR循环,以满足不同的业务需求。其中FOR循环提供了4种不同风格的循环读取方式。FOR循环本身不支持嵌套循环,但是我们可以用关键字来写下一层的循环。
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。