Robot Framework条件判断,初始化与清除

条件判断,初始化与清除

RF中用Run Keyword If 关键字做条件判断
条件表达式参数给python的eval函数

run keyword If  "2018" in $h tml     log to console  内容
	#如果2018在$html中,在控制台打印出内容        $html可能是字符串可能是列表

python 的写法: #链接的返回值是:Wed Oct 24 10:59:01 UTC 2018

def getWebInfo():
    response = requests.get(
        'http://mirrors.sohu.com/centos/timestamp.txt')
    return response.text

html = getWebInfo()
if "2018" in html:
    print("2018年的")
else:
    print("不是2018年的")

RF的写法:(关键字和条件之间要有两个以上的空格)
01(一个条件)

*** Settings ***
Library  mylib4         #getwebinfo关键字定义在mylib4模块中

*** Test Cases ***
测试1
    ${html}=    getwebinfo
    run keyword if    '2018' in $html   log to console   2018年的     #在控制台打印2018年的

02(多个条件)
如果条件判断更加多一点

*** Settings ***
Library  mylib4

*** Test Cases ***
测试1
    ${html}=    getwebinfo
    run keyword if    '2018' in $html and 'UTC' in $html        #跟if写法一样
    ...               log to console   2018年的UTC时间          #换行的时候一定要加三个点

run keyword unless 是独立的新的语句,后面的判断条件还是要写的。意思是如果后面的不成立,就执行。
03(类似于if else)

*** Settings ***
Library  mylib4

*** Test Cases ***
测试1
    ${html}=    getwebinfo
    run keyword if    '20188' in $html and 'UTC' in $html
    ...               log to console   2018年的UTC时间
    ...               ELSE          log to console      不是2018年的UTC时间           #ELSE必须大写。并不是rf中的关键字,是run keyword if里面处理的

04(类似于if elif else)

*** Settings ***
Library  mylib4

*** Test Cases ***
测试1
    ${html}=    getwebinfo
    run keyword if    '2018' in $html and 'UTC' in $html
    ...               log to console   2018年的UTC时间、
    ...               ELSE IF       '2018' in $html     log to console          2018年             #ELSE IF之间只能有一个空格
    ...               ELSE IF          'UTC' in $html      log to console         UTC时间     #ELSE必须大写。并不是rf中的关键字,是run keyword if里面处理的
    ...               ELSE              log to console      以上都不是

循环里面的判断
Exit For Loop 与 Continue For Loop

01(简单判断,知识点get value from user,是一个弹窗)

*** Settings ***
Library  Dialogs


*** Test Cases ***
测试1
    ${weight}=   get value from user    请输入你的体重       60       #get value from user是要用户输入的值,60是缺省值,可以填可以不填,返回的是用户输入的字符串
    Log To Console   体重为${weight}           #打印到终端上
    run keyword if   int($weight)>60    log to console   太重了        #这种条件判断是python里面的,所以要加int

02(把上面的判断做在循环里)

*** Settings ***
Library  Dialogs


*** Test Cases ***
测试1
    :FOR    ${one}      in range        9999999             #rf里面没有while循环,要想循环很多次,只能把数字写很大
    \        ${weight}=   get value from user    请输入你的体重    60    #多行输入的时候可以按住alt键,\相当于缩进
    \        Log To Console   体重为${weight}
    \        run keyword if   int($weight)>60    log to console   太重了

03(退出循环)

*** Settings ***
Library  Dialogs


*** Test Cases ***
测试1
    :FOR    ${one}      in range        9999999             #rf里面没有while循环,要想循环很多次,只能把数字写很大
    \        ${weight}=   get value from user    请输入你的体重    60    #多行输入的时候可以按住alt键。\相当于缩进
    \        run keyword if     $weight=="over"         Exit for loop       #Exit for loop关键字,退出循环。$weight是py表达式,所以去掉{}
    \        Log To Console   体重为${weight}
    \        run keyword if    int($weight)>60    log to console   太重了

04(有else)

*** Settings ***
Library  Dialogs


*** Test Cases ***
测试1
    :FOR    ${one}      in range        9999999             #rf里面没有while循环,要想循环很多次,只能把数字写很大
    \        ${weight}=   get value from user    请输入你的体重    60    #多行输入的时候可以按住alt键。\相当于缩进
    \        run keyword if     $weight=="over"         Exit for loop       #Exit for loop关键字,退出循环。$weight是py表达式,所以去掉{}
    \        Log To Console   体重为${weight}
    \        run keyword if    int($weight)>60    log to console   太重了      ELSE    log to console           太轻了

Dialog库是为半自动化操作提供的,collections库里面存放的是py里面列表和字典常用的操作在里面。这两个都是标准库里面的

创建列表,加一个元素,也可以加多个元素
01(加一个元素)

*** Settings ***
Library         Collections


*** Test Cases ***
测试1
        ${list}=  Create List
        Append To List      ${list}        hello
        log to console      ${list}

#结果
[“hello”]

在这里插入图片描述

02(加多个元素)

*** Settings ***
Library         Collections


*** Test Cases ***
测试1
        ${list}=  Create List   a       b       ${1}        #创建一个列表里面原来包含ab和数字1
        Append To List      ${list}        hello        world           #追加hello  world
        log to console      ${list}

#结果
[‘a’, ‘b’, 1, ‘hello’, ‘world’]

03(创建字典)

*** Settings ***
Library         Collections


*** Test Cases ***
测试1
        ${var}=  create dictionary   a=1       b=2       #创建一个字典
        set to dictionary      ${var}        c=3          #追加c=3
        log to console      ${var}

#结果
{‘a’: ‘1’, ‘b’: ‘2’, ‘c’: ‘3’}

Evaluate(他的参数会当做py表大会执行)

直接用python代码表达式来生成一个结果

${var}=     set variable       ${890}
完全可以写成
${var}=     evaluate       890              #evaluate后面,python怎么写就怎么写

例如:
01创建一个整数变量

*** Settings ***
Library      mylib4

*** Test Cases ***
测试1
        ${var}=  evaluate   890        #创建一个整数变量
        log to console      ${var}

02创建一个列表

*** Settings ***
Library         Collections


*** Test Cases ***
测试1
        ${list}=  evaluate    ["hello",0]        #python中怎么写,evaluate后面就怎么写
        log to console      ${list}

#结果
[‘hello’, 0]

02创建一个列表

*** Settings ***
Library         Collections


*** Test Cases ***
测试1
        ${list}=  evaluate    ["hello"]*20        #python中怎么写,evaluate后面就怎么写,一个列表里由0个hello
        log to console      ${list}

#结果
[‘hello’, 0]

03可以写py里面各种复杂的语法

*** Settings ***
Library         Collections


*** Test Cases ***
测试1
        ${list}=  evaluate    ["hello"] *20       #python中怎么写,evaluate后面就怎么写。列表里面有20 个hello
        log to console      ${list}

#结果
[‘hello’, ‘hello’, ‘hello’, ‘hello’, ‘hello’, ‘hello’, ‘hello’, ‘hello’, ‘hello’, ‘hello’, ‘hello’, ‘hello’, ‘hello’, ‘hello’, ‘hello’, ‘hello’, ‘hello’, ‘hello’, ‘hello’, ‘hello’]

初始化和清除(自动化系统中非常重要的)

setup是测试一个用例(或者套件)前要做的事情
teardown是测试后要做的事情

一个例子
要测试登录功能,需要先注册1个用户,用这个用户验证登录功能
那么对于测试登录功能的套件(或者用例)来说,前面先注册好一个用户的操作,就是setup。
是否需要teardown,主要看这个用例执行后的结果是否会影响下面执行的用例
在RF中,每个测试套件目录,测试套件文件,测试用例,都可以有自己的setup和teardown
所有的setup和teardown操作都只能由一个关键字语句构成

测试用例的setup,teardown
写在测试用例(测试1)表的配置项中

*** Test Cases ***
测试1
    [Documentation]    测试初始化、清除         #就是一些描述性的话
    [Setup]    log to console  \n *** 测试用例1 setup ****
    log to console   测试用例1主体部分          #执行主体部分的时候,会执行初始化和清除的部分
    [Teardown]    log to console   \n *** 测试用例 1 teardown ****



测试2
    log to console   测试用例2主体部分


测试3
    log to console   测试用例3主体部分

还可以做整个文件的初始化和清除
写在测试套件文件的setting表中
两种类型

  • Suite setup/teardown #放在setting表中,对所有用例有效。
    进入和退出这个suite执行用例前后必须执行且只分别执行一次

  • Test setup/teardown 如果suite内的用例本身没有setup/teardown,才执行

01(第一种类型:Suite setup/teardown。放在setting表中,对所有用例有效)

*** Settings ***
Suite Setup       log to console   \n --- Suite st2 Setup ---           #套件的初始化,在执行用例的初始化
Suite Teardown    log to console   \n --- Suite st2 Teardown ---        #最后执行套件的清除



*** Test Cases ***
测试1
    [Setup]    log to console  \n *** case 测试1 setup ****
    log to console   测试用例主体部分 11
    [Teardown]    log to console   \n *** case 测试1 teardown ****

测试2
    log to console   测试用例主体部分22

测试3
    log to console   测试用例主体部分33

结果:

--- Suite st2 Setup ---         #先执行套件的初始化
测试1
*** case 测试1 setup ****         #执行用例的初始化
.测试用例主体部分 11
.
*** case 测试1 teardown ****      #执行用例的清除
测试1
--------------------------------
测试2
.测试用例主体部分22
测试2
--------------------------------
测试3
.测试用例主体部分33
测试3
--------------------------------

--- Suite st2 Teardown ---      #所有的用例执行完之后,最后执行套件的清除

02(第二种类型Test setup/teardown。就是每个用例的缺省的初始化和清除。如果套件里面某个用例没有初始化和清除,就会执行设置好的Test setup/teardown)

*** Settings ***
Suite Setup       log to console   \n --- Suite st Setup ---
Suite Teardown    log to console   \n --- Suite st Teardown ---
Test Setup       log to console   \n --- Test st Default Setup ---          #如果测试用例没有自己的初始化清除,就使用这个
Test Teardown    log to console   \n --- Test st Default Teardown ---


*** Test Cases ***
测试1
    [Setup]    log to console  \n *** case 1 setup ****
    log to console   测试用例主体部分11
    [Teardown]    log to console   \n *** case 1 teardown ****

测试2
    log to console   测试用例主体部分22

测试3
    log to console   测试用例主体部分33

结果:

--- Suite st Setup ---
测试1
*** case 1 setup ****
.测试用例主体部分11
.
*** case 1 teardown ****
测试1
-------------------------------------
测试2
--- Test st Default Setup ---
.测试用例主体部分22
.
--- Test st Default Teardown ---
测试2
-------------------------------------
测试3
--- Test st Default Setup ---
.测试用例主体部分33
.
--- Test st Default Teardown ---
测试3
-------------------------------------

--- Suite st Teardown ---

测试套件目录的setup,teardown(会存在一个就近原则,一个测试用例,既在初始化文件中有Test setup/teardown,套件里面有缺省的Test setup/teardown,会就近执行套件里面的Test setup/teardown。不会再执行初始化文件里面的Test setup/teardown)
在其目录下的初始化文件__init__.txt 或者 init.robot,(这两个文件是手动添加的)里的setting表中
两种类型

  • Suite setup/teardown

    进入和退出这个suite执行用例前后必须执行且只分别执行一次

  • Test setup/teardown #只针对单个用例,不针对套件整体
    如果suite内的用例,或者子套件 本身没有setup/teardown,才执行

执行一个用例文件:robot suite1(文件名) 如果只执行文件夹suite1里面的一个文件st1.robot。可以这样写:robot suite1/st1.robot 但是就不会执行suite1里面的初始化文件__init__.txt 或者 init.robot。 只能这样写robot --suite st1 suite1 :意思是执行suite1文件里面的st1。这样写就会执行初始化话文件里面的初始化和清除。多个是:robot --suite st1 --suite st2 suite1 意思是:执行suite1文件里面的st1,st2文件
源是suite1一定要是用例的根目录:robot --suite st1 --suite st2 suite1 (–suite是固定的写法)

如果套件的初始化里面用到了某一个库里面的关键字(mylib4里面定义函数),用之前一定要先导入他,导入的申明要写在前面

*** Settings ***
Library         mylib4
Suite Setup       opencalc                  #如果套件的初始化里面用到了某一个库里面的关键字(mylib4里面定义函数),用之前一定要先导入他,导入的申明要写在前面
Suite Teardown    log to console   \n --- Suite st Teardown ---
Test Setup       log to console   \n --- Test st Default Setup ---
Test Teardown    log to console   \n --- Test st Default Teardown ---

猜你喜欢

转载自blog.csdn.net/qq_37615098/article/details/84203190