Robot Framework(12)- 詳細解讀 RF 的變數和常量

小菠蘿測試筆記發表於2020-05-28

如果你還想從頭學起Robot Framework,可以看看這個系列的文章哦!

https://www.cnblogs.com/poloyy/category/1770899.html

 

常量的栗子

常量就不多說了吧,大家都懂!直接看栗子

上面 log 關鍵字後面跟的引數都是常量,且型別均是字串【RF 裡面,常量預設是字串型別,如果需要整形、浮點數、列表,需要呼叫關鍵字來轉換 or 生成】

 

變數的介紹

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

變數識別符號

{變數名}

 {} 就是變數識別符號

 

RF 的變數型別

變數型別 變數中文 寫法
scalar 標量  ${SCALAR} 
list 列表  @{LIST} 
dict 字典  &{DICT}  
環境變數 環境變數  %{ENV_VAR} 

變數的作用就不說了哈,大家應該都知道~

 

變數的注意事項

  • 不區分大小寫: ${var} 和 ${VAR} 指向同一個物件
  • 變數名若有下劃線和空格都會被忽略: ${my var}  或  ${myVar} 

測試程式碼

 測試結果

 

Scalar 變數

特點

  • 當傳遞 Scalar 變數給關鍵字作為引數的時候, 就是直接把它所對應的 Python 物件型別傳遞給關鍵字對應的函式
  • 每個 List 變數和 Dict 變數,也是 Scalar 變數

測試程式碼

測試結果

知識點

  • 在 Variables 表中定義變數,可以直接在變數後面跟值,不用加 set variable 
  • 給標量賦值,宣告變數後面可加=,也可不加
  • 在 Test Cases 表中定義變數,宣告變數之後,一定要接 set variable 或 set variable if 關鍵字,然後再接需要設定的值
  • 變數間,可以互相賦值

 

List 變數

List 變數的介紹

如果一個標量的值是一個列表,或者類似列表的其它序列,可以將該變數作為列表變數使用,格式為 @{EXAMPLE}

Variables 表中定義列表變數的栗子

直接宣告變數名,然後接值就可以了

重點:不同值之間也要空兩個空格,不然 RF 會識別成同一個元素值

 

Test Case 表中定義列表變數的栗子

測試結果

測試程式碼分成了四部分

  1. 宣告列表變數,有兩種宣告列表變數的方式,以及兩種生成列表值的方式
  2. 列印列表
  3. 迴圈列印
  4. 獲取列表長度

我們來看看上述 RF 程式碼等價於 Python 的話,會是咋樣的

@{lists} 和 ${lists} 的區別

  • 列表變數也是標量的一種,只是值是列表,所以可以看成列表變數
  • ${lists} 可以看成是一個列表整體, @{lists} 可以看成整體拆成一個個單獨的元素
  • ${lists} 在 Python 裡面就是一個 list ,然後 @{lists} 就是展開其 lists 中的每個元素,作為多個引數傳入,和 *args 一樣效果,在Python 裡叫可變引數【可看這篇博文:https://www.cnblogs.com/poloyy/p/12526592.html

我們將它們等價到Python 裡面去看,這樣更好理解

def printarg(*args):
    if len(args) == 0:
        print('** no args **')
    else:
        print('** args are **')
        print('-----------------')
        for one in args:
            print(repr(one))
        print('-----------------')


# 等價於 RF 的寫法:printarg  ${lists}
printarg(lists)

# 等價於 RF 的寫法:printarg  @{lists}
printarg(*lists)

測試結果

** args are **
-----------------
[1, 2, 3, 4, 5]
-----------------
** args are **
-----------------
1
2
3
4
5
-----------------

 

獲取列表變數中的值

一共兩種獲取的格式

  1.  ${變數名}[下標值] 
  2.  ${變數名[下標值]} 

測試結果

知識點

  • 系統也提示啦,我們應該用 ${list}[0] 這種格式來代替 @{list} 獲取列表的某個值
  • 下標也是從 0 開始
  • 下標可以傳變數 ${list}[${index}] 

 

Dict 變數

Dict 變數介紹

如果一個標量的值是一個字典,可以將該變數作為字典變數使用,格式為  &{EXAMPLE} 

Variables 表中定義字典變數的栗子

直接宣告變數名,然後接 即可,注意宣告字典變數一定要用 &{dicts} 的格式

重點:不同key=value之間也要空兩個空格,不然 RF 會識別成同一個值

 

Test Case 表中定義字典變數的栗子

測試結果

我們來看看上述 RF 程式碼等價於 Python 的話,會是咋樣的

 

&{dict} 和  ${dict} 的區別

  • 字典變數也是標量的一種,只是值是字典,所以可以看成字典變數
  • ${dict} 可以看成是一個完整的字典物件, &{dict} 可以看成整體拆成一個個單獨的鍵值對
  • ${dict} 在 Python 裡面就是一個  dict ,然後&{dict} 就是展開其 dict 中的每個鍵值對,作為多個引數傳入,和 **kwargs 一樣效果,在Python 裡叫關鍵字引數【可看這篇博文:https://www.cnblogs.com/poloyy/p/12526592.html

我們將它們等價到Python 裡面去看,這樣更好理解

def printarg(**kwargs):
    if len(kwargs) == 0:
        print('** no kwargs **')
    else:
        print('** kwargs are **')
        print('-----------------')
        for k, v in kwargs.items():
            print(repr(k) + ':' + repr(v))
        print('-----------------')

# 等價於 RF 的寫法:printarg  &{dicts1}
printarg(**dicts1)

測試結果

** kwargs are **
-----------------
'name':'yy'
'age':19
-----------------

 

獲取字典變數中的值

只有一種獲取格式: ${dicts}[key] 

測試結果

知識點

  • 系統也提示啦,我們應該用 ${dicts}[key] 代替 &{dicts}[key] 
  • 鍵可以傳變數 &{DICT}[${KEY}] 
  • 重點: ${dict.key} 會報錯哦,不可取

 

相關文章