1. 程式人生 > >Robot Framework條件判斷,初始化與清除

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 ---