1. 程式人生 > >Robot Framework關鍵字,變數,迴圈

Robot Framework關鍵字,變數,迴圈

Robot Framework關鍵字,變數,迴圈

關鍵字的使用

RF的官方文件

  • http://robotframework.org

  • library裡面

    *** Test Cases ***
    測試1
    ${var} set variable hello #給var賦值變數為hello set variable是關鍵字
    Should Be Equal ${var} helle #比較var和helle是不是相等。

    *** Test Cases ***
    測試1
    ${var} set variable hello #數字也會轉化成字串
    Should Be Equal ${var} helle 變數不是hello #msg預設是none,添加了msg值,對錯誤資訊可以看的更加清晰

    結果: 變數不是hello: hello != helle

    *** Test Cases ***
    測試1
    ${var} set variable 這是日誌裡面要記錄的內容
    Log ${var} #會把變數的值列印到日誌裡面

常用關鍵字

  • Import Library #用的比較少,一般是一個case引用一個

  • Should Be Equal #相等

  • Should Contain #包含

  • set variable #設定變數

  • log to console #直接列印到控制檯的

  • log #列印到log檔案

  • sleep #1d 睡一天,1m 睡一分鐘,預設是秒,可以不寫

  • convert to integer #轉化成整型

  • convert to number #轉化成浮點型整數

*** Test Cases ***
驗證

${num}=  convert to integer   32        #把32轉化成整形       結果32
log to console   ${num}

${num2}=  convert to Number   32        #把32轉化成浮點型     結果32.0
log to console   ${num2}

log to console      ${32}           #用數字變數。可以直接轉化成數字整型         結果32
log to console      ${32+4*6}       #也可以像py裡面的數字表達式     結果56






*** Test Cases ***
測試1
    Should Be Equal   10    010           #字串物件比較,結果是False
    Should Be Equal As Integers  10  010  #轉換成數字物件比較,結果是true。傳給關鍵字的時候,是字串。在關鍵字內部轉成整數的

rf裡面的should be true關鍵字,會傳遞給py裡面的eval()函式比較。
eval(“4+8”) #結果12 eval()更智慧的識別表示式
驗證 should be true
*** Test Cases ***
驗證

${num}=  convert to integer  20     #把20轉化為一個整型
should be true    ${num}>19         #等價於python裡面eval("20>19")   ${num}本身是整型,後面>19又會變成字串。should be true會把它轉化成eval函式:eval("20>19")是ture。傳遞給should be true的是"20>19",相當於eval("20>19")是ture。

驗證 should be true
*** Test Cases ***
驗證

${str1}=  set variable  hello       #設定變數,rf裡面的字串是不需要加“”的
should be true   ${str1}==hello     #NameError: name 'hello' is not defined。${str1}的內容是hello,hello == hello,交給should be true的時候就是呼叫python裡面的eval()函式。相當於eval(“hello == hello”) python裡面也會報錯。name 'hello' is not defined。hello是當做變數的

驗證 should be true

*** Test Cases ***
驗證

${str1}=  set variable  hello
should be true   '${str1}'=='hello'     #'${str1}'是把變數裡面的值取出來,然後“”變成str型別。然後兩個字串相比。eval(“"hello "== "hello"”) 結果pass

驗證 should be true
*** Test Cases ***
驗證

${str1}=  set variable  hello
should be true   $str1=='hello'     #結果pass,這種方式是直接引用變數,$str1是變數名,比如a。$str1[2],或$str1[“key”]和python一樣,列表和字典用法

# s t r 1 {str1}取的是變數的值,不加 str1取的變數的值

**

認識測試庫

**
通常,關鍵字是由測試庫提供的
測試庫就是python模組檔案
python測試庫裡面的關鍵字實現方式

  • 類的方法

  • 函式

  • RF指令碼使用函式名,方法名,大小寫不敏感

RF如何發現庫的路徑的

  • 和python程式一致,sys.path

有引數的關鍵字,傳參的方法

*** Settings ***
Library           mylib3

*** Test Cases ***
測試
    ${var1}         set variable     123          #通過關鍵字設定變數123
    printarg        ${var1}             #printarg是在mylib3裡面定義的函式,${var1}是傳的字串。直接在關注簡直後面填引數就行了

    ${var2}         convert to integer     123          #通過關鍵字轉化成整型123
    printarg        ${var2}             #這裡傳了一個整型的引數

    ${var2}         convert to integer     23          #通過關鍵字轉化成整型123
    printarg        ${var2}         hello       #這裡傳了一個整型的引數和一個字串的引數

庫的匯入

  • 除了builtin庫,無需匯入宣告 #類似於python中的內建庫,無需匯入申明就可以使用

  • 其他庫必須要宣告匯入 #在RF中匯入庫的時候,庫的名字是大小寫敏感的

  • 庫的匯入方式

     在用例中使用關鍵字import library匯入
     在settings表中宣告匯入
    

RF中的變數
RF中的變數,實際上就是一個Python變數
它指向一個python物件
RF變數對應的是什麼Python物件,就是什麼型別的物件

RF中,對變數有什麼不用的用法

Scalar方式(最常用的)

${var}          #以$符{}加變數名字定義的變數,傳遞給關鍵字作為引數使用的時候,就是直接把這個變數所對應的python物件傳遞給關鍵字的函式。是數字就是傳數字,是字串就傳字串,列表就是列表,字典就是字典
    	直接把變數所對應的Python物件傳遞給關鍵字 對應的函式

List方式

@{var}
        	展開的List中的每個元素,作為多個引數傳入

Dictionary方式

&{var}
        	展開的Dict中的每個元素,作為多個引數傳入

訪問環境變數 %{env_var}

*** Settings ***
Library           mylib3


*** Test Cases ***
驗證
Printarg         %{path}           #列印path環境變數

解釋Scalar方式:
#驗證Scalar方式傳進去的是什麼,就是什麼
#模組mylib3中的函式,下面rf中呼叫

#def returnlist():
#    return [1,2,3]
#
#def returndict():
#    return {
#        'ele1' : 'male',
#        'ele2' : 'female'
#    }

驗證Scalar方式傳進去的是列表,就是列表

*** Settings ***
Library           mylib3


*** Test Cases ***
驗證
    ${var1}=  returnlist
    Printarg     ${var1}             #傳遞給Printarg關鍵字的引數就是[1,2,3]

驗證Scalar方式傳進去的是字典,就是字典

*** Settings ***
Library           mylib3


*** Test Cases ***
驗證
    ${var1}=  returndict
    Printarg     ${var1}             ##傳遞給Printarg關鍵字的引數就是{ 'ele1' : 'male','ele2' : 'female'}

驗證Scalar方式傳進去的是組合的字元,就是字串

 *** Settings ***
    Library           mylib3
    
    
    *** Test Cases ***
    驗證
        ${var1}=  returnlist
        Printarg     54${var1}             #如果這樣傳。傳遞給Printarg關鍵字的引數54[1,2,3],是字串

List方式(@{var})
展開的List中的每個元素,作為多個引數傳入

*** Settings ***
Library           mylib3


*** Test Cases ***
驗證
    ${var1}=  returnlist
    Printarg     @{var1}             #如果這樣傳。傳遞給Printarg關鍵字的引數分別是1,2,3 是三個引數。

展開的List中的每個元素,作為多個引數傳入。也可以像py一樣取值

*** Settings ***
Library           mylib3


*** Test Cases ***
驗證
    ${var1}=  returnlist            #定義的時候一般寫${var1},關鍵看傳參的時候這麼傳
    Printarg     @{var1}[1]             #如果這樣傳。傳遞給Printarg關鍵字的引數是第二個元素2

Dictionary方式
展開的Dict中的每個元素,作為多個引數傳入

*** Settings ***
Library           mylib3


*** Test Cases ***
驗證
    ${var1}=  returndict
    Printarg     &{var1}             ##傳遞給Printarg關鍵字的引數就是'ele1' : 'male'和'ele2' : 'female'這兩個引數

展開的Dict中的每個元素,作為多個引數傳入,也可以通過鍵取值

  *** Settings ***
    Library           mylib3
    
    
  *** Test Cases ***
    驗證
        ${var1}=  returndict
        Printarg     &{var1}[ele1]            ##傳遞給Printarg關鍵字的引數就是'male'

**

RF用:FOR來實現迴圈

**
遍歷List變數
IN RANGE的用法
一個檢查學科的例子
經典方法
evaluate方法

*** Settings ***
Library  mylib3

*** Test Cases ***

Example 1
    :FOR    ${animal}  IN   貓   狗  豬
    \    Log To Console    ${animal}
    \    Log To Console    第二行
    Log To Console   迴圈外面

#結果:

第二行

第二行

第二行
迴圈外面

*** Settings ***
Library  mylib3

*** Test Cases ***

遍歷list變數
    ${list}=     returnlist
    :FOR    ${index}    IN   @{list}            #這裡用的是@{list}等價於1,2,3
    \    Log To Console    ${index}

#結果:
1
2
3

要迴圈固定的次數要range()

*** Settings ***
Library  mylib3

*** Test Cases ***

range用法
    :FOR    ${index}    IN RANGE    0    10            #這裡range和py中的一樣,可以直接寫10,也可以0   10
    \    Log To Console    ${index}

#結果:
0
1
2
3
4
5
6
7
8
9