測試架構共同點:
- 手工編寫用例+測試資料
- 手工運作用例 — > 自由運作用例
- 肉眼全程觀察運作過程—>自動記錄運作過程
- 肉眼校驗結果 — > 自動校驗測試結果
- 手工編寫測試報告—> 自動生成測試報告 (檢視測試報告,分析測試報告,回報bug,優化腳本)
Robot Framework 架構學習
一、 RF特點:
- 開源、基于python語言
- 豐富的第三方庫: UI , API, Android, iOS
- 測試用例支援: txt\tsv、html等格式編寫
- 關鍵字驅動,用已有關鍵字形成業務關鍵字
- 測試用例支援變量使用、IF語句和FOR循環
- 支援繼承svn、git、jekins等工具
- 靈活、可擴充
-
豐富的編輯工具
Robot Framework 學習位址: https://robotframework.org/ ---->Library
二、 Robot Framework四大常用使用子產品介紹
1. *** Test Cases *** 用例子產品
2. *** Keywords *** 關鍵字
3. *** Settings *** 庫導入子產品
4. *** Variables *** 變量
關鍵字存放在:
資源檔案中(資源檔案名.robot / 資源檔案名.resource)
資源檔案的導入: 在用例套件中, Settingsm子產品導入,導入格式: Resource 資源檔案名.字尾
三、 Robot framework 變量定義、調用
-
變量定義
${} – 純量 。代表一個值
@{} – 清單 。 N個值(清單)
&{} – 字典, key-value
-
變量指派:
接收關鍵字調用後的傳回值
通過關鍵字來指派: ${} – set variable
@{} – create list
&{} – Create Dictionary
-
變量調用:
${} 直接調用,無論變量是純量,字典還是清單類型,調用時,需要轉化為純量
清單元素通路: ${list[0]}
字典key對應value值通路: ${dict.key} 或者 d i c t [ ′ k e y 值 ′ ] ( k e y 如 果 字 符 串 , {dict['key值']} (key如果字元串, dict[′key值′](key如果字元串,{dict[‘key值’]},否則,則 ${dict[key]} 即可通路)
-
變量的作用域:
1. 用例中定義的變量則隻作用于該用例
2. robot用例套件檔案裡邊 Variables中的變量,隻作用于該用例套件
3. 如果用例中對變量設定了: set suite variable 變量名,那麼該變量也可以在該套件其他用例中使用
我們也可以将變量定義到py檔案中,使用時,直接引用就好了
引用在套件檔案中的Settings中引入py,然後再調用變量:
Variables.py 内容如下:
username = “Lujier”
pwd = “123123”
list1 = [‘中國建設銀行’, ‘中國銀行’, ‘浦發銀行’, ‘陝西信合’]
dict1 = {“name”: “Lujier”, “pwd”: “123123”}
"""字典變量,robot套件在引用py子產品變量時,文法跟robot原來不一樣 比如: 測試套件在使用,robot中的字典的key對應的value擷取時,格式是: ${dict1.key} ---》 遵循robot文法 py檔案中的字典時,卻需要: ${dict1[key]} ----》遵循python文法 那麼,怎樣才可以讓py變量也可以像robot中的變量一樣,使用robot文法來通路呢? 在清單前面加上: LIST__ 在字典前邊加上: DICT__ 被調用時 """ LIST__list002 = [1, 3, 6, 8] DICT__dict002 = {"name": "Lujier", "age": "18 forever"}
測試套件robot内容:
*** Settings ***
Variables variables.py # 引入變量檔案,相對路徑即可
*** Test Cases *** test_001 LOG TO CONSOLE ${username} test002 LOG TO CONSOLE ${list1} test003 LOG TO CONSOLE ${dict1} test004 [Documentation] 讀取清單局部值 LOG TO CONSOLE ${list1[0]} test005 [Documentation] 讀取字典局部值(與python讀取一樣,不能用robot讀取robot變量的方式) LOG TO CONSOLE ${dict1["name"]} test006 [Documentation] LIST__ 或則 DICT__變量可以按照robot文法來使用變量 LOG TO CONSOLE ${dict002.name} LOG TO CONSOLE ${list002[0]}
四、 常見關鍵字:
-
FOR循環周遊
舉例:
清單for循環周遊
@{list1}= Create List a b c
:FOR ${i} IN @{list1} # For循環周遊
\ LOG TO CONSOLE i e x i t f o r l o o p i f " {i} \ exit for loop if " i exitforloopif"{i}" == “b” # 條件滿足,跳出循環
清單for循環周遊_下标 @{list1}= Create List a b c ${len} = get length ${list1} # 擷取清單長度 :FOR ${index} IN RANGE ${len} # For循環周遊 \ LOG TO CONSOLE ${list1[${index}]}
-
if 判斷 RUN KEYWORD IF
*** Test Cases ***
Test title
${datas} set variable 88
RUN KEYWORD IF d a t a s = = 0 L O G T O C O N S O L E 竟 然 是 0... E L S E I F 0 < {datas}==0 LOG TO CONSOLE 竟然是0 ... ELSE IF 0< datas==0LOGTOCONSOLE竟然是0...ELSEIF0<{datas}<60 LOG TO CONSOLE 竟然不及格
… ELSE log to console 及格了
-
異常
*** Test Cases ***
用例異常關鍵字使用
${passed}= run keyword and return status addnums 100 300
RUN KEYWORD IF ${passed} LOG TO CONSOLE 成功
… ELSE log to console 失敗
用例異常關鍵字使用2 ${passed}= run keyword and return status addnums 100 300 400 RUN KEYWORD IF ${passed} LOG TO CONSOLE 成功 ... ELSE log to console 失敗 *** Keywords *** addnums [Documentation] 加法函數定義 [Arguments] ${a}=1 ${b}=2 # 函數參數,預設值 Log ${a}+${b} ${sum}= Evaluate ${a}+${b} # ${sum}= Evaluate $a+$b [Return] ${sum} # [Return] $sum
五、 robot 自動化
Web UI 自動化: SeleniumLibrary
pip install --upgrade robotframework-seleniumlibrary
App UI 自動化: AppiumLibrary
pip install robotframework-appiumlibrary
接口自動化: RequestsLibrary
pip install -U requests
pip install -U robotframework-requests
以 Web自動化為例:
-
Selenium庫引入:
用例檔案Settings引入: Library SeleniumLibrary
-
常見關鍵字
在RF中,seleniumlibrary的元素定位方式和selenium保持一緻
表達式2種:
定位類型:定位表達式 ,如 id:hello
定位類型=定位表達式
如果是css定位,需要在定位前面加上: css=
-
等待:
隻需要在會話啟動的時候設定
等待元素可見: Wait Until Element is Visible
等待元素出現: Wait Until Page Contains Element
1. Robot_Web自動化思想:
1) PO分層思想,
2) 用到知識: Library、Keyword、Resource、TestCase/TestSuite
Settings - 引入庫、引入資源|變量檔案、前置後置
3) 用例管理
. 自動加載用例--- 需要告知robot,在那個目錄(工程目錄)下去收集用例
. 預設報告 --- 預設存放在所在的目錄
報告是否可指定路徑? 可以
用例是否可篩選? 可以打标記:
用例标記:用例内部[Tags]
類标記: Settings中:Force Tags 強制标簽
Default Tags 預設标簽
4) 用例運作,可以在console控制台:
. 運作所有用例: robot 項目路徑
一般建議,進入到該項目目錄下,在使用: robot 用例目錄 來運作用例,此時報告就會預設顯示在該項目下
. 運作指定标簽的用例: robot -i 标簽名 項目路徑/用例路徑
如: robot -i smoke python_robot_20190919_20190921
. 用例執行結果(報告、日志等檔案)指定位置
robot -i 标簽名 -d 存放報告路徑 項目路徑/用例路徑
如: robot -d python_robot_20190919_0921/OutPuts python_robot_20190919_20190921
. 運作指定測試套件:
robot -s 套件名稱/路徑 項目路徑/用例路徑
. 接收robot指令行所傳的參數
robot -i -标簽 -v 變量名:變量值
如: robot 檔案内容
*** Test Cases ***
get_cmd_key_and_value
[Documentation] 擷取運作指令中傳的參數
[Tags] global_value
LOG ${browser_type}
那麼robot指令就是:robot -i global_value -v
browser_type:chrome name:Lujier -d python_robot_20190919_0921/OutPuts python_robot_20190919_20190921