UI自動化框架 /分層git
(1) 基礎層 baseapi- 自動化框架api 如 webdriver uiautomator,解耦,二次封裝,loggithub
一、頁面跳轉或者異步加載延遲出現的界面,無需再單獨使用sleep
二、testwatcher對於系統隨機出現的可能會影響App界面的一些因素(例如Android6.0的受權彈框、電話呼入),無需再單獨處理
三、全部調用封裝後框架的操做,都會記錄日誌
四、框架自己有斷言能力,若是在框架處理異常狀況後還找不到指定控件,這時候會截圖而且斷言
五、若是須要替換框架或者框架升級,可使用最小的成原本框架層進行改動,而不須要改動用例層和Word層web
(2) 公共業務封裝層 bussines 數據庫
公用業務抽取,業務邏輯處理,相似關鍵字處理api
(3) 用例層 testcase 框架
1.case編寫 要求高度可讀,不作過多邏輯判斷。邏輯判斷放bussines
2.不能有寫死的sleep。封裝在底層,遞增等待機制
3.UI自動化要儘可能減小ui操做
4.公共抽取放bussines,調用bussins層封裝公用的可讀性強的關鍵字
5.失敗重跑須要保持case之間的獨立性異步
(4) 框架層 runner總控ui
1.自定義runner
2.失敗重跑:
junit 實現custom rule,監控程序運行異常時候catch住,再運行一次。 運行完把失敗的case再廣播給執行的apk運行
testng 實現listen重跑次數。 運行完在output文件夾下運行failed的case
失敗檢查:在失敗重跑前,檢查wifi等容易致使case失敗的信息
3.testwater異常處理
4.report生成/email發送spa
影響類:設計
設計類:重複耦合,受迭代影響-座標寫死,靜態等待
環境類:環境不穩定-wifi,adb,系統彈框,數據類影響-專用數據庫,沒法兼容所有機型
示例: https://github.com/seasonxie/uiautomator2.0
單例全部base類:
public class BaseApi { private static BaseApi instance; public synchronized static BaseApi getInstance() { if (instance == null) { instance = new BaseApi(); } return instance; } }