Robot_Framework:基礎_變量

工程、測試套件、測試用例

在Robot Framework中創建測試項目和創建單元測試項目一致

Robot Framework unittest(Python)
Test Project Test Project
Test Suit Test Suit
Test Case Test Case

 

 

 新建工程


1、選擇菜單欄:file----->new Project

2、填寫相關信息
    ⑴Name:工程命名
    ⑵Parent Directory:上級目錄,工程會創建在這個目錄下
    ⑶Created Path:創建工程後的完整路徑
    ⑷Type:工程類型(Type分爲文件和目錄兩種,從方便管理的角度來說,選Directory比較合適)
    ⑸Format:文件格式(默認選擇ROBOT)
    ⑹注:在創建工程時需要注意下Parent Directory,因爲它默認是前一次工程的目錄

3、填寫好相關信息後,點擊[OK]按鈕,工程創建成功,右鍵工程名
    ⑴New Directory:創建工程或測試套件時,還可以選擇是文件還是目錄(通常測試工程選擇目錄(Directory),測試套件選擇文件(File))
    ⑵Change Format:之前設定了工程或測試套件的格式,這裏可以進行修改
    

 

 

創建測試套件

1、右鍵點擊“測試項目”選擇new Suite選項

2、填寫相關內容
    Name輸入項目名稱;Type選擇File

3、填寫好相關信息後,點擊[OK]按鈕,測試套件創建成功

 

 

創建測試用例

1、右鍵點擊“測試項目”選擇 new Test Case

2、填寫相關內容,右鍵用例名
    用例只需要輸入用例name,點擊[OK]即可
    
3、填寫好相關信息後,點擊[OK]按鈕,用例創建成功,右鍵用例名
    ⑴Move Up和Move Down:當測試用例多了時,可以使用該按鈕來條件用例間的順序

注:
1、“測試項目”和“測試套件”本質上並沒有什麼區別,如果你願意,也可以把測試項目創建成一個文件

2、如果把“測試項目”創建成一個文件後,那麼在這個“測試項目”下就不能再創建“測試套件”了,只能創建測試用例。除非所創建的“測試項目”非常小,只需要幾個用例。一般情況下,會選擇將其定義成一個目錄,這樣它就可以分成多個套件,套件可定義爲不同的業務,不同的業務下再分用例,結構會更加清晰。

3、當然,同樣也可以把“測試套件”創建成一個目錄。如果把“測試套件”創建成了一個目錄後,就不能直接在其下面創建用例了,還需要再創建的“File”類型的“子測試套件”。說白了就是用例只能創建在file類型的套件中

4、假設Suite1下面有test1和test2並且它們都設置了Setup和Teardown,那麼它們的執行順序爲:

Suite1-Setup->test1-Setup->test1-執行->test1-Teardown->test2-Setup->test2-執行->test2-Teardown->Suite1-Teardown
    ⑴測試用例的初始化:在每個測試用例執行前後都會執行對應的Setup和Teardown
    ⑵測試套件的初始化:在開始執行前和結束執行測試套件或全部測試用例後各執行一次對應的Setup和Teardown

 

 

 

變量與常量基礎

變量標識符

每個變量都可以用變量標識符{變量名}來進行表示,變量主要有兩類:Scalar和List
1、Scalar型變量:$作爲標識符

2、List型變量:@作爲標識符

3、例如:${var},@{lvar}就分別是Scalar變量和List變量的展現形式

4、Scalar變量:從翻譯上它的中文名叫標量(單值變量),與之對應的就是List這種多值變量了。單值並不僅僅是像字符串、數值這樣的,還有可能是個對象或者是字典

5、只有帶有@標識的變量能夠確認它是List型變量(類似於Python可變參數),而帶有$標識的變量則要取決於它的變量名或變量值,才能確定它到底是什麼變量,特別是變量值。因爲變量之間是可以轉換的。例如使用$標識的變量,實際上也可以在接收List值後轉化成List變量

 

變量聲明

1、因爲RF底層是Python,所以它的語法也有些類似,變量不需要特定聲明,只要有初始化賦值即可使用

2、如果硬要說有聲明,那可以把在TestSuite下面手動添加的變量理解爲聲明。比如可以在TestSuite上點右鍵或者在Edit區點Add Scalar或Add List來新增變量

3、在TestSuite下定義變量給我的感覺就是:定義了一些全局變量,適用於當前suite下的全部測試用例(如果是定義在資源文件suite下,通過調用資源文件,任何一個測試suite都可以使用)。這個要區別與在測試用例中定義的變量

步驟1:創建變量


步驟2:查看創建的變量
    ⑴成功創建變量後,可以在對應的suite下看到所創建的變量
    ⑵這個例子中,這種變量是創建在測試用例suite下面的,一般情況下把這類變量創建在資源文件下要好點(不同的suite可以通過調用自原文件來調用這些變量)
    

 

步驟3:執行變量
    ⑴這裏使用兩個RF自帶的關鍵字log和log many來打印變量,這兩個關鍵字分別適用Scalar變量和List變量,如果用錯了,那在運行時會報錯
    ⑵感覺就是定義了一些全局變量:一些很多測試用例都能用到且不需要經常改變的變量
    ⑶通過輸出結果可以看出:List類型的變量裏面的值是分別打印出來的(這裏需要注意下:List變量表示列表裏面的每個元素都是一個變量,而值爲列表的Scalar變量是一個變量,且兩種的索引方式也不同)
    

 

Scalar變量賦值和取值

1、變量賦值也有幾種方式,可以根據實際情況來使用
    ⑴可以使用Set Variable或其它關鍵字對變量進行賦值
    ⑵也可在運行中被賦值(即在測試用例中將關鍵字的返回值賦值給某個變量)

2、取值時都是需要在Scalar情況下來獲取的,List可以通過index來取,Dictionary可以通過key來取

 

Set賦值

通常最常用的方式主要是使用Set Variable關鍵字對變量進行賦值,其他Set相關的帶Variable的關鍵字也可以進行賦值

例:
1、下面例子表示:第一個變量${value}賦值爲abcd,第二個變量判斷如果${value}的值和abcd字符串相等,就賦值11給${value2},如果不相等就賦值111

2、賦值的時候,變量後面寫不寫"="都可以

3、我在實際項目中暫時沒有這種賦值方式:一般RF中只有業務邏輯,數據什麼的都是在PY層進行處理的,特別是像第二個變量這種,很少用到自帶的關鍵字

 

Get賦值

主要用於返回值上,包括系統關鍵字的返回值和用戶關鍵字的返回值(從某種意義上來講,Set那個也是返回值)

下面例子中表示:將一個字符串型的列表賦值給變量${value},再通過關鍵字(Get Length)獲取變量${value}的長度,將Get Length返回值賦值給變量${len},最後打印變量${len}

 

命令行賦值

在運行時使用"-V"的參數來給變量賦值:這個是在"Run"頁面例進行的,感覺用到的不多,就不打算學了

 

 

變量的使用

變量的使用用我自己的話就是:某個地方定義好變量(賦值了),另一個地方調用這個變量

1、在判斷中使用
跟前面那個例子一樣使用"Set Variable If"等關鍵字進行判斷(我是不習慣這種用法的,感覺還是在PY層處理比較好,不然RF的用例看起來比較複雜)

2、字符串使用
    ⑴如果想把變量作爲一個字符串的一部分,可以按照下面例子中那種寫法
    ⑵在默認情況下,RF裏面輸入的變量值都是字符串型,並且兩個字符串拼接不需要加任何符號,直接連起來就行了(如果添加了符號的話,會把符號也一起加到字符串裏面)
    ⑶除了字符串連接,還有字符串索引和切片:這個規則與Python一樣(索引從0開始,包左不包右)

3、參與運算
因爲RF中輸入的默認都是字符串,如果想要進行數值型的運算的話,可以使用字符串Evalute關鍵字(也可以使用轉義和PY處理)

 

 

List變量

賦值

和Scalar類似,List變量也可以使用Set Variable來賦值,但是它最正式的賦值還是使用Create List關鍵字

例:
下面這個例子中分別使用了關鍵字Set Variable和Create List來設置一個變量,並分別賦值給一個Scalar類型和List型變量
    ⑴給我的感覺就是:不管是使用Set Variable還是使用Create List來設置一個變量,它們的返回的結果都是一樣的,最終賦值給變量名的值是否有區別主要在於變量名的標識(@和$)
    ⑵Scalar類型:值裏面不管有多少個元素,都是一個變量值
    ⑶List型變量:值裏面有多少個元素就有多少個變量值(感覺跟Python中的可變參數有點類似)


 

 

變量使用

在使用上,最直觀的是看關鍵字的參數到底是Scalar的還是List類型的,區別是看變量名前民是否有"*"(星號)

說明:
1、這個關鍵字有兩個參數,name和*args:name就是支持傳入的Scalar變量的參數;*args變量就是支持可以傳入List變量的。這個關鍵字的作用就是傳入一個name的參數,這是要執行的關鍵字的名字,*args就是要執行關鍵字的參數,因爲每個關鍵字所需要的參數個數是不定的,所以這裏用了可變個數的參數(*args)

2、List變量其實是不定個數的,它有幾個元素,就相當於有幾個Scalar變量,所以對於*args可以按照關鍵字需要一個一個的寫,也可以傳一個List變量

3、在RF中定義可變參數關鍵字的變量時要用@{變量名},不能用${變量名 (用$的話表示一個參數值)

 

 

List元素的使用

元素的值的索引方式有兩種:
    ⑴List型變量:在List的變量的括號外面加上方括號,裏面是索引值,@{變量名}[索引值]
    ⑵Scalar型變量:在變量名後面加上方括號,裏面是索引值,${變量名[索引值]}

 

變量類型轉換

1、看了下資料,感覺List型變量和Scalar型變量相互轉化就是:關鍵在於將值賦值給變量名時,變量名使用的標識($或@)

2、所以在定義變量時,一定要注意所定義的變量的類型

 

 

其他變量

Directory變量:Directory其實和List有點類似,List的每個元素是一個值。Directory的每個元素是一對鍵值對,一個KEY對應一個Value,Key不能重複

對象變量:比如在接口測試中的Request,假設${return}是接口返回的對象。對於對象來說,更多的是使用對象的屬性值。比如這個對象的狀態是${return.STATUS},對象的內容就是${return.CONTENT}

 

 

變量的作用域

1、在通常情況下,每個變量默認都是局部變量。但具體變量還是要根據其定義的位置來確定其作用域:前面提到的測試用例中定義的變量,suite中定義的變量等

⑴一個case裏面的變量:作用域在這個case內部

⑵一個userkeyword裏面的變量:作用域在這個userkeyword內部

⑶一個文件型suite裏面的變量:作用域在這個suite內部,其下面所有的case都可以使用(一種是定義在目錄型suite下的,一種是定義在資源文件下的,資源文件下定義的變量可以通過調用資源文件來使用)

⑷一個目錄型suite裏面的變量:作用域在這個目錄裏面(這種定義出來是沒什麼意義的:它下面的文件型suite是無法使用這些變量的)

2、變量的作用域是可以改變的。通過一些關鍵字可以對變量進行作用域的改變

⑴Set Global Variable:設置爲全局變量。設置後這個變量在所有的測試用例和測試套件中都可以使用

⑵Set Suite Variable:設定爲File Suite級變量。設置後這個變量在當前文件suite內都可以使用

⑶Set Test Variable:設置爲Case級變量。設置後這個變量在當前Test Case內可以使用

注:不過不建議使用這幾個關鍵字來改變變量的作用域

 

 

常量

除了變量以外,RF裏還有一些常量。常量主要有環境變量、數值常量、特殊字符常量、系統保留變量
1、環境變量:在RF裏可以使用同一標識符"%"來表示。如電腦環境變量中定義了一個JAVA_HOME的變量,則在RF中可以使用%{JAVA_HOME}來調用(RF中只能使用,不能賦值)

2、數值常量:通常情況下,在RIDE裏面所有字符都會被當做字符串,即使變量的值是數值,默認也是字符串形式存在(Robotframework輸入框輸入的默認爲字符串)。如果想要它以數值方式存在,就可以用到數值常量
    ⑴使用數值定義方式${2}:如定義一個2的數值類型,可以寫成${${2}} (外層的${}是定義一個變量,內層的${2}表示數值,感覺就是轉義下)
    ⑵當然也可以在PY腳本中使用int()函數轉換下

3、特殊字符常量和系統保留變量:這行平常幾乎遇不到,比如${/}、${:}、${False}、${None}、${null}、${True}

 

 

拓展

變量總結

 

RF共享變量概述

1、引入目的:某些數據(用戶名和密碼等)根據不同的環境可能會改變,若這些數據都散落在各個測試腳本文件中非常不利於統一修改(這裏介紹一種常見的)

2、數據類型:任意python數據類型

3、解決辦法:寫在配置文件中。variables表,即變量表中申明變量


資源文件申明變量

概述:在資源文件變量表中聲明的變量,只要導入對整個資源文件裏面所有的測試用例都有效。

如何定義
#定義變量
${MgrLoginUrl}  http://localhost/mgr/login/login.html
#定義列表
@{database}     127.0.0.1   3306
#定義字典
&{user}        name=auto   pw=sdfsdfsdf


RF中聲明變量文件並使用

*** Settings ***
Resource  rc2.robot
*** Test Cases ***
case03
log to console  ${MgrLoginUrl}
log to console  ${database[0]}
log to console  ${database[1]}
log to console  &{user}[name]
log to console  &{user}[pw]


 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章