3.2.11 流程控制
分支和循环是任何一种编程语言的基本功能。自动化测试用例经常需要根据不同的条件执行不同的验证步骤,有时还需要循环执行相同的步骤。分支和循环是Robot Framework自动化测试框架支持的基本功能。
1.分支
Robot Framework中的分支通过BuiltIn库里的关键字Run Keyword If实现。
分支的语法如下。
Run Keyword If 条件1 Action 1 … ELSE IF 条件2 Action 2 … ELSE Action 3 |
其中“…”是Robot Framework中的换行符,表示前一行的关键字还没书写完,换一行继续书写。将ELSE与ELSE IF分行书写是为了保持代码的美观和整洁。也可以把ELSE IF与ELSE写在一行里面,只是阅读起来比较困难。
*** Keywords *** flow_control_if_kw [Arguments] ${arg1} Run Keyword If 0<${arg1}<100 Return From Keyword Middle Number … ELSE IF ${arg1}==0 Return From Keyword Zero … ELSE IF ${arg1}<0 Return From Keyword Negative Number … ELSE Return From Keyword Large Number *** Test Cases *** If_Control_Testcase ${ret} flow_control_if_kw -5 #${ret}的值为"Negative Number" ${ret} flow_control_if_kw 0 #${ret}的值为"Zero" ${ret} flow_control_if_kw 35 #${ret}的值为"Middle Number" ${ret} flow_control_if_kw 300 #${ret}的值为"Large Number" |
Robot Framework的If分支和Python以及大多数编程语言基本一致。注意,换行时ELSE前要加“…”。另外,Robot Framework中的条件判断和Python中的条件判断格式类似,可以使用“<”“>”“==”“>=”“!=”“is”“is not”等。
除了Run Keyword If之外,BuiltIn库里还提供了其他用于分支的关键字。
·Run Keyword Unless:当指定的条件不满足时,执行后面的关键字。
·Set Variable If:当指定的条件满足时,设置变量的值。
可以参阅Robot Framework线上文档,也可以在RIDE里从菜单栏中选择Tools→Search Keyword或按F5键搜索BuiltIn库里所有带If或Unless的关键字,了解更多的分支控制用法。
2.循环
重复执行某个或某些关键字在自动化测试中是一种常用的场景,这种重复的执行叫作循环。Robot Framework内置了“:FOR”作为循环的保留关键字。“:FOR”既可以用在测试用例中,也可以用在用户关键字中。
1)普通FOR循环
普通FOR循环的语法如下。
:FOR ${item} IN Sequence \ keyword |
其中,“:FOR”中的“:”用于和普通的关键字相区分;FOR循环中的临时变量“${item}”用于存储每次循环中取得的值;“IN”是一个固定关键字;“Sequence”是需要进行循环的列表。第二行中缩进一格才开始写关键字。注意,必须缩进一格。
FOR_Normal_TestCase : FOR ${item} IN a b c d … e f g h \ Log ${item} @{list_var} Set Variable 1 2 3 4 5 : FOR ${item} IN @{list_var} \ Log ${item} |
上例中第一个FOR循环将值列表直接放置在IN之后,如果太长,不能放在同一行中,可以在第二行开头用“…”表示继续上一行。每次取IN后面列表中的一个值并赋给${item},然后输出。
第二个FOR循环在IN后面没有直接放置值列表,而是对一个List变量进行循环。每次取出List变量中的一个值并赋给${item},然后将其输出。
2)FOR…IN…RANGE循环
FOR…IN…RANGE循环的语法如下。
:FOR ${item} IN RANGE ${end} \ Keyword :FOR ${item} IN RANGE ${start} ${end} \ keyword :FOR ${item} IN RANGE ${start} ${end} ${step} \ keyword |
将普通FOR循环的“IN”用“IN RANGE”代替,这样Sequence部分就不用将所有参数一一罗列,而只需指定从第几个开始到第几个结束。默认从第0个开始,每次加1。另外,也可以通过指定“${start}”“${end}”和“${step}”来明确指定开始编号、结束编号与间隔。示例如下。
FOR_IN_RANGE_TestCase : FOR ${item} IN RANGE 10 \ Log ${item} : FOR ${item} IN RANGE 1 10 \ Log ${item} : FOR ${item} IN RANGE 1 10 2 \ Log ${item} |
上例中,第一个FOR…IN…RANGE循环中的${item}将依次取值0~9。
第二个FOR…IN…RANGE循环中的${item}将依次取值1~9。
第三个FOR…IN…RANGE循环中的${item}将依次取值1,3,5,7,9。
3)FOR…IN…ENUMERATE循环
FOR…IN…ENUMERATE循环的语法如下。
:FOR ${index} ${item} IN ENUMERATE Sequence \ Keyword |
FOR…IN…ENUMERATE循环不仅用${item}来存储每次循环取得的值,还用${index}来存储这个值在Sequence里的位置。
示例如下。
FOR_IN_ENUMERATE_TestCase @{list} Set Variable a b c d : FOR ${index} ${item} IN ENUMERATE @{list} \ Log ${item} at index ${index} |
输出的日志如下。
INFO : a at index 0 INFO : b at index 1 INFO : c at index 2 INFO : d at index 3 |
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。