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

目录

[TOC]

一、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}   

猜你喜欢

转载自www.cnblogs.com/gupan/p/8999606.html