RF02 控制流语法——IF和For语句语法

目录

一、RF控制流—if判断

        RF中,IF语句是用 Run Keyword If 来代替的

1.1 语法

Run KeyWord If 判断条件 其他关键字
... ELSE IF 判断条件 其他关键字
... 
... ELSE 判断条件 其他关键字

        如果给出的条件满足,就执行给出的关键字

1.2 案例

1.2.1 案例1

*** Test Cases ***
...

# 如果要运行的关键字有返回值,在控制流语句前面接收
${用户余额} Run KeyWord	If ${res}==1 用户信息页面-获取用户余额

1.2.2 案例1

*** Settings ***
Force Tags    new

*** Test Cases ***
数字比较
    @{list1}    BuiltIn.Create List    0    10    5
    BuiltIn.Run Keyword If    ${list1[0]}>${list1[1]}    BuiltIn.Log    我赢了        
    ...    ELSE    BuiltIn.Log    我输了

字符比较
    # 字符比较都需要加上双引号或者单引号
    &{dict1}    BuiltIn.Create Dictionary    str1=happy    str2=unhappy
    BuiltIn.Run Keyword If    "${dict1.str1}"=="happy"    BuiltIn.Log    I am happy!
    
布尔值比较
    # 布尔值比较都需要加上双引号或者单引号
    # 注意返回值为None的情况
    # 在rf中,布尔值首字母是大写:True、False
    
    ${var1}    BuiltIn.Set Variable    true
    ${res}    BuiltIn.Run Keyword If    "${var1}"=="false"    BuiltIn.Log    pass      
    BuiltIn.Log    ${res}
    
    BuiltIn.Comment    返回值为None的情况
    
    ${value}    BuiltIn.Set Variable    hello
    ${value}    BuiltIn.Set Variable If    "true"=="false"    hao    ${value}          
    
    # 在rf中,如果关键字没有设置返回值,那么就会返回None,如果有返回值,所以上面语句中,
    # 最后加了一个${value}作为BuiltIn.Set Variable If关键字条件不满足时的返回值,二
    # BuiltIn.Set Variable If的语法为,条件满足返回第一个值,不满足返回第二个值        

1.3 IF关键字使用案例讲解

        实际项目中,可能需要在不同的测试环境(SIT环境、UAT环境以及生产环境)中跑自动化测试脚本。不同 测试环境所需要准备的测试数据可能不一样,所以要做到测试数据的分离。在rf命令行启动过程中,可以通过-v传入全局的参数,可以在用例中在用例执行前判断传入的参数的值,再根据这个值导入不同的资源文件

*** Test Cases ***
BuiltIn.Run Keyword If    "${env}"=="SIT"	BuiltIn.Import Resource		SIT环境测试数据存储资源文件路径
...		ELSE IF		"${env}"=="SIT"		BuiltIn.Import Resource		UAT环境测试数据存储资源文件路径
...		ELSE IF 	BuiltIn.Import Resource		UAT环境测试数据存储资源文件路径

二、RF控制流—For循环

2.1 单层for循环

2.1.1 语法

第一种语法:

:For 变量 IN 序列(or 列表)
	关键字 参数值
	Exit for loop if 判断条件

第二种语法:

:For 变量 IN RANGE 循环限量
	关键字 参数值
	Exit for loop if 判断条件

2.1.2 案例

*** Settings ***
Force Tags    A

*** Test Cases ***
从列表或序列中循环取值
    [Documentation]    从列表中循环取值
    # For IN    从序列或者列表中取值
    BuiltIn.Log    start    
    @{myList}    BuiltIn.Create List    hello    world    hey
    
    BuiltIn.Comment    表示该for循环的作用域,表示语句是for循环的内容
    :FOR    ${item}    IN    @{myList}
        BuiltIn.Log    ${item}
        # 满足条件的情况下,退出循环
        BuiltIn.Exit For Loop If    "${item}"=="world"    

在一个范围内循环取值
    [Tags]    smoke
    BuiltIn.Log    只有一个参数,参数为终止值。默认其实为0,默认为+1   
    :FOR    ${index}    IN RANGE    5
        BuiltIn.Log    ${index}
    
    
    # 设置起始值 
    BuiltIn.Log    设置起始值。第一个参数为起始值,第二个参数为结束值。默认+1
    :FOR    ${index}    IN RANGE    10    15
        BuiltIn.Log    ${index}    
   
    BuiltIn.Log    设置步长。第一个参数为起始值,第二个参数为结束值,第三个参数为步长
    :FOR    ${index}    IN RANGE    10    20    2
        BuiltIn.Log    ${index}

2.2 双层for循环

        rf中不支持直接嵌套for循环,如果想要嵌套for循环,需要把内层for循环写成关键字,for写到外面

2.2.1 语法

外层循环:

:For 变量 IN 序列(or 列表)
	内层循环关键字 参数值

内层循环关键字:

:For 变量 IN RANGE 循环限量
	关键字 参数值

2.2.2 案例

外层for循环:

*** Settings ***
Force Tags    A
Default Tags    test    tt
Resource    ../关键字/内层for循环关键字.robot

*** Test Cases ***
双层for循环
    BuiltIn.Comment    rf中不支持直接嵌套for循环,如果想要嵌套for循环,需要把内层for循环写成关键字,for写到外面
    @{rows}    BuiltIn.Create List    row1    row2    row3    row4
    @{cells}    BuiltIn.Create List    cell1    cell2    cell3
    :FOR    ${row}    IN    @{rows}
        内层for循环关键字.内层for循环    ${row}    @{cells}

内层for循环关键字:

*** Settings ***
Library    BuiltIn    

*** Keywords ***
内层for循环
    [Arguments]    ${row}    @{cells}
    :FOR    ${cell}    IN    @{cells}
        BuiltIn.Log    ${cell}   
原文地址:https://www.cnblogs.com/gupan/p/8999606.html