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 表中定義列表變數的栗子
測試結果
測試程式碼分成了四部分
- 宣告列表變數,有兩種宣告列表變數的方式,以及兩種生成列表值的方式
- 列印列表
- 迴圈列印
- 獲取列表長度
我們來看看上述 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 -----------------
獲取列表變數中的值
一共兩種獲取的格式
- ${變數名}[下標值]
- ${變數名[下標值]}
測試結果
知識點
- 系統也提示啦,我們應該用 ${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} 會報錯哦,不可取
&n