《2018年美團酒旅客戶端自動化測試實踐.pdf》由會員分享,可在線閱讀,更多相關《2018年美團酒旅客戶端自動化測試實踐.pdf(42頁珍藏版)》請在三個皮匠報告上搜索。
1、美團酒旅客戶端自動化測試實踐目錄 CONTENTS01.背景02.技術方案03.系統建設04.落地與規劃01背景自動化測試伴隨公司成長的復雜度提升特性特性特性特性應用框架特性特性特性特性特性特性特性特性業務發展需求迭代人員迭代體驗優化特性特性兼容通過個人能力保證質量越來越難整體優化風險變高自動化測試日常開發的困擾需求開發整體需求不可追溯實現方式不統一影響面難以評估測試case描述過于抽象技術改進這是啥!看不懂!改不動!自動化測試自動化測試的目標需求大道重構保證日常迭代開發質量技術改進做到不錯不漏提升老化車輛的行駛速度為車輛檢修提供說明書高效完整客觀02技術方案自動化測試測試全景圖case維護c
2、ase管理case編寫case關聯case執行case選取編譯部署執行結果分析bug提報bug跟蹤重運行聚合分析自動化測試case選取基礎sdk單元測試覆蓋sdk全部功能正確可用業務主流程集成測試保證主流程可用測試粒度宏觀介觀人力投入微觀用戶傷害肉體損傷財產損失精神傷害難以完全覆蓋 容忍基線測試方案的容忍基線自動化測試case選取單元測試功能測試兼容、穩定性測試性能測試回歸測試接口與API測試業務邏輯測試場景測試埋點測試截屏測試Monkey測試性能測試全鏈路回歸測試case編寫測試框架基礎設施case管理持續集成測試環境自動化測試功能測試用例用戶操作網絡請求本地上下文測試用例:進入頁面執行操作
3、觀察結果UI呈現網絡請求UI呈現自動化測試初版方案ViewViewModelModelViewdatabindingPresenterModeluser eventsupdates viewupdates modelstate-change events通過觸發函數(信號)模擬行為模擬iOSandroidUI呈現驗證內存狀態(信號)方法調用(參數)網絡請求驗證方法調用(參數)與實現方案綁定、需要重構抗重構能力差 驗證能力有欠缺 代碼量大可讀性差自動化測試迭代方案ViewViewModelModelViewdatabindingPresenterModeluser eventsupdates v
4、iewupdates modelstate-change events通過觸發函數(信號)模擬行為模擬iOSandroidUI呈現驗證截圖對比網絡請求驗證方法調用(參數)內存狀態(信號)方法調用(參數)自動化測試第三版方案行為模擬UI呈現驗證截圖對比網絡請求本地存儲驗證方法調用(參數)網絡請求對比函數(信號)觸發手勢觸發本地存儲對比自動化測試Android實踐技術選型測試工具運行環境Mock方式主要優勢主要問題RoboletricJVM通過Shadow類及PowerMock可以Mock所有涉及的類 執行速度高效需要構造大量Shadow類 執行邏輯與真實環境存在差異 只能通過屬性檢查UI 手勢受
5、限Espresso真機通過Mockito手勢比較完備、有較強拓展性 具有一定的執行中Mock能力 同時支持頁面級和流程級測試無法Mock靜態方法和final類 在生命周期執行中缺乏Mock能力 UiAutomator Robotium Appium 真機通過代碼內置Debug能力及外部Mock Server完全支持黑盒測試 支持跨應用測試(Robotium除外)可Mock范圍有限 測試需要走完整流程,執行效率低自動化測試iOS實踐技術選型測試工具Mock方式主要優勢主要問題KIFOHHTTPStubs OCMock簡單,適合快速開發 版本覆蓋廣 像用戶一樣操作查找與操作綁定,不靈活 查找方式單
6、一,代碼改造成本高 EarlGreyOHHTTPStubs OCMock同步 可見性檢查 像用戶一樣操作 查找與操作分離,更加靈活工具鏈相對缺失 Appium 通過代碼內置Debug能力及外部Mock Server完全支持黑盒測試 支持跨應用測試 工具鏈完善可Mock范圍有限 測試需要走完整流程,執行效率低 Python腳本,學習成本自動化測試Mock上下文系統對象方法APK對象方法APKfinal類、靜態方法系統靜態方法Mockito靜態插樁靜態方法及final類暫不處理生命周期內返回值mock啟動待測App替換App持有對象測試執行啟動待測頁面替換頁面持有對象執行測試制作Mock對象設置插
7、樁類返回啟動測試App啟動測試頁面測試執行通過請求參數建立 對象返回值映射關系自動化測試模擬操作注冊動作測試線程UI線程注冊斷言等待空閑定位控件執行動作等待空閑定位控件判斷斷言定位控件espresso手勢執行流程默認實現:MainLooper沒有需要立即執行的message,AsyncTask對應的線程池中無正在執行和需要執行的任務 異步IO線程延時動畫React Native空閑AsyncTask線程池為空Looper隊列無立即執行任務IdleResource.isIdleNow()全部為true自動化測試模擬操作注冊動作測試線程UI線程注冊斷言等待空閑定位控件執行動作等待空閑定位控件判斷斷
8、言定位控件espresso等待機制改進動作等待條件斷言等待條件動作等待條件斷言等待條件空閑AsyncTaskLooperIdleResource.isIdleNow()RN LooperIO線程池自動化測試模擬操作原有拓展Click DoubleClick LongClick TypeText Swipe RepeatUtil PrecisionTouch PrecisionSwipe WrapperAction提供更多常用手勢兼容非Android標準操作(screenshot等)定位控件判定約束注入MotionEvent通過插樁修改約束自動化測試iOS-EarlGrey對RN的支持自動化測試
9、截屏驗證WindowManagerGlobal獲取全部Window并截屏PC存儲空間imageMagick參考圖實際效果Diff分析FBSnapshotiOSandroid03系統建設自動化測試下一步還缺什么?自動化測試下一步RDQA測試用例編寫代碼編寫提PR發版集成/打包交付QA自動化測試編寫QA黑盒測試人工測試靜態檢查QA穩定性和兼容測試獲取自動化測試結果拉取case信息測試框架AdenCI核心指標系統case編寫、管理和篩選場景設計的質量管控測試進度查詢case信息獲取運行RD白盒測試上報測試結果上報測試結果 生成測試報告準入判斷精準測試自動化測試如何運行-CI并發重試+自動化測試如何運
10、行-并發1359個Case執行時間0s1125s2250s3375s4500s5625s6750s7875s9000s并發路數151015202530自動化測試如何運行-減少失敗重試CIcase編寫規范setup和teardown自動化測試如何運行-CI單業務線實施case1000個并發8路+編譯5分鐘case運行15分鐘+=總耗時20分鐘自動化測試如何協作-以前的方式沒有Case ID,RD的自動化測試代碼無法與case做關聯版本變更只有簡單的文字說明,難以做測試代碼維護無法產生QA和RD的協同自動化測試如何協作-業內系統結構化文本不直觀,不易讀多媒體展示差存量case難以遷移多版本并行支持
11、差無法支持截圖對比測試自動化測試如何協作-Aden取名字自Aden港,意為Case的集散地提供case和case集管理,自動化測試和手動測試管理協同功能自動化測試如何協作-Aden用戶SSO權限日志集團設施圖片服務GitCICase管理測試框架支持UI測試系統測試結果管理指標系統功能系統前端展示層基礎服務接口服務Case集管理核心指標系統Bug管理系統CI自動化工具自動化測試如何協作-Aden采用腦圖做線上case管理系統為每個case生成唯一ID通過標簽等支持靈活的測試集組合自動化測試如何協作-Aden多版本支持每個版本都有一個副本,相同case保持id不變寫時復制,減少存儲自動化測試代碼倉
12、庫分支保持和測試集一致自動化測試如何協作-Aden自動化測試如何協作-Aden04落地與規劃自動化測試人效測試代碼編寫時間/開發時間0%10%20%30%40%度假某頁面度假某篩選列表頁31.61823.7控件定位工具37%自動化測試落地效果-某列表頁重構檢出率02468iOSAndroid人工檢出自動化檢出失效率Android共120個case,失效3個iOS共103個case,失效1個自動化測試將來的路-錄制case?住宿度假交通錄制引擎回放引擎管理系統事件錄制用戶事件數據錄制API請求地理坐標私有API管理事件回放數據回放其他校驗API參數校驗case存儲case關聯case分發彈窗頁面跳轉UI變化頁面參數緩存測試報告結果上報通知報警RD、QA錄制用戶反饋Q&A