录制快、回放稳,爱奇艺iOS云录制回放平台技术实践
眾所周知,移動APP的周期短、迭代速度快,測試人員在保證新功能正常運行的情況下需要回歸大量的歷史功能,自動化回歸便成為重要的回歸手段之一。iOS端自動化由于以下問題,一直很難在業(yè)務(wù)線廣泛開展。
落地成本高:執(zhí)行環(huán)境必須使用mac設(shè)備,硬件成本高,本地服務(wù)&設(shè)備難以跨團隊共享。
學(xué)習(xí)成本大:除了Python、node等基礎(chǔ)編程環(huán)境外,還需要使用xcode,要有一定的OC基礎(chǔ)。
二次開發(fā)難:設(shè)備驅(qū)動如Appium WDA、Facebook-WDA,部分功能接口響應(yīng)耗時長、穩(wěn)定性不高,且基于OC語言編寫,二次開發(fā)難度較大,難以針對業(yè)務(wù)特性定制。
基于上述情況,愛奇藝在云真機基礎(chǔ)之上重點優(yōu)化設(shè)備驅(qū)動,并將設(shè)備共享、遠程租用、自動化腳本管理、任務(wù)調(diào)度、可視化報告等能力組合,推出了愛奇藝iOS云錄制回放平臺。該平臺通過設(shè)備和服務(wù)共享可以有效降低業(yè)務(wù)線自動化投入,使測試人員更加專注于測試用例設(shè)計。通過項目實踐和不斷調(diào)優(yōu),平臺在易用性和自動化執(zhí)行效率等方面有顯著提升,現(xiàn)已對接主站等多條業(yè)務(wù)線,覆蓋視頻播放、視頻編輯、feed流等復(fù)雜場景,成為愛奇藝業(yè)務(wù)群質(zhì)量保障中不可缺少的一環(huán)。本文將介紹愛奇藝iOS云錄制回放平臺的系統(tǒng)架構(gòu)以及實現(xiàn)細節(jié)。
01
? ?方案設(shè)計
1.1?基本流程?
錄制回放基本流程圖
在錄制過程中,云IDE實時監(jiān)聽鼠標點擊、滑動事件,同時獲取手機頁面的DOM樹,根據(jù)用戶操作的坐標查找最匹配的元素節(jié)點,如果用戶選擇OCR和AI方式,則識別手機截圖中的文本和已知的AI元素,確認元素之后會轉(zhuǎn)換為自動化腳本并保存。
在回放時,首先拉取待執(zhí)行腳本集合,進行腳本解析,通過腳本指定的方法查找元素并執(zhí)行相應(yīng)的操作,如點擊、滑動等。任務(wù)結(jié)束后會生成測試報告,包括用例執(zhí)行步驟、日志、截圖等信息。
1.2??錄制篇?
功能多樣
錄制頁面采用Web化IDE設(shè)計,集成了設(shè)備選擇、腳本管理、實時畫面和腳本實時生成四大功能,支持腳本在線編輯和調(diào)試,并持久化到服務(wù)端,相對于其他競品的錄制頁面,更方便、靈活。
設(shè)備列表:展示可用的手機列表,支持設(shè)備實時切換;
腳本管理:對錄制的腳本進行管理,可以按照業(yè)務(wù)、用例集等不同維度歸檔;
腳本編輯:在該IDE內(nèi)操作APP會自動生成Python腳本,支持在線編輯和多機調(diào)試;
手機畫面:實時展示手機畫面,同步監(jiān)聽用戶操作事件,展示畫面元素操作選擇。
錄制頁面
流暢的操作體驗
除了功能多樣外,流暢的操作體驗也是好產(chǎn)品的重要評價指標之一,其性能直接影響平臺用戶體驗和操作效率。我們調(diào)研了市面上主流的WDA,如Appium WDA、Facebook WDA等,他們的設(shè)計主要是用于自動化執(zhí)行,設(shè)計思路優(yōu)先保證case執(zhí)行的穩(wěn)定性,因此相關(guān)接口響應(yīng)耗時比較長,這樣的設(shè)計嚴重影響用戶操作體驗并不適合作為錄制使用,考慮到開源的WDA都是用OC語言編寫,學(xué)習(xí)成本比較高,我們決定使用SWIFT語言自行開發(fā)WDA,重點在DOM樹獲取速度、點擊響應(yīng)耗時和畫面幀率方面進行優(yōu)化。
在DOM樹獲取方面,區(qū)分層級頁面的元素結(jié)構(gòu)并加以剔除,有效降低元素查找速度。
針對點擊響應(yīng)慢的問題,我們優(yōu)化原有接口調(diào)用邏輯,包括去除復(fù)雜的同步等待機制等,響應(yīng)速度有了很大提升。
在屏幕獲取方面則是通過WDA實現(xiàn)截圖,重點優(yōu)化圖片壓縮算法和傳輸效率,保證畫面清晰度的同時達到每秒20幀以上的畫面渲染效果,有效解決畫面卡頓的問題。
優(yōu)化前后數(shù)據(jù)對比如下:
遠程錄制畫面渲染的效果圖如下:
遠程錄制畫面渲染效果圖
豐富的元素識別方式
寫腳本容易,維護腳本不易,編寫自動化腳本過程中,選擇合適的元素獲取方式才能從根本保證腳本的穩(wěn)定性。相信很多同學(xué)都會有過這種經(jīng)歷:首次寫完自動化執(zhí)行成功率很高,但是隨著功能迭代,自動化腳本成功率逐漸降低。測試同學(xué)被動地陷入自動化相關(guān)的維護里,自動化不僅沒有起到保障質(zhì)量的作用,反而成為了測試同學(xué)的負擔(dān)。為了盡可能的適配各種場景,愛奇藝提供了多種元素定位方式,以適用不同的業(yè)務(wù)場景和兼容性需求。
元素識別方式分類
原生方式
iOS的原生支持方式,包括predicate、accessibility ID、坐標等方式,利用元素的type、name、label等屬性定位,其中predicate支持比較、范圍運算符等,這種方式適用于元素定義比較規(guī)范的場景。
XPath方式
路徑定位方式,iOS原生系統(tǒng)并不支持此種方式,業(yè)界開源的工具定位速度很慢,通常在3-30秒,我們通過路徑優(yōu)化獲取算法,XPath獲取速度降低到1秒以內(nèi)并且提高了多機回放的兼容性,優(yōu)化前后數(shù)據(jù)對比如下:
圖像識別
依托于愛奇藝自研的AI和機器學(xué)習(xí)技術(shù),支持對UI界面截圖進行OCR識別和圖標識別,使得Android端和iOS端使用同一套UI自動化測試腳本成為可能,實現(xiàn)跨平臺腳本能力,目前這種方式多用于圖標和icon的識別場景。
1.3 回放篇?
穩(wěn)定的腳本加上完善的任務(wù)調(diào)度服務(wù)才能實現(xiàn)自動化任務(wù)的高效運轉(zhuǎn)。iOS云平臺回放調(diào)度服務(wù)從設(shè)備篩選、任務(wù)觸發(fā)、任務(wù)執(zhí)行和問題回溯等四個方面著力打造滿足業(yè)務(wù)線需求的平臺。
系統(tǒng)設(shè)計圖
設(shè)備篩選
手機設(shè)備作為自動化任務(wù)執(zhí)行的最終載體,是自動化任務(wù)啟動的第一步,其豐富程度和篩選的靈活性決定服務(wù)的應(yīng)用范圍。平臺支持用戶從機型、分辨率、系統(tǒng)、運營商等多個維度進行選擇。為避免手機本身異常影響自動化任務(wù)執(zhí)行,在自動化任務(wù)開始之前系統(tǒng)會進行設(shè)備環(huán)境檢查,只將任務(wù)分配到檢查通過的手機設(shè)備上執(zhí)行。
任務(wù)觸發(fā)
任務(wù)觸發(fā)無縫對接CICD,支持定時/手動/指定條件觸發(fā),增加用例集概念,支持以業(yè)務(wù)線/用戶個人維度對執(zhí)行腳本進行管理,并指定用例并行或串行執(zhí)行。例如,需要驗證兼容性可以選擇相同用例多設(shè)備并發(fā)執(zhí)行,在用例較多時可選擇多設(shè)備分布式執(zhí)行以提升執(zhí)行效率。
任務(wù)執(zhí)行
自動化執(zhí)行過程中,我們重點處理以下幾類情況,以保證自動化任務(wù)穩(wěn)定運行:
(1)實時監(jiān)控并處理系統(tǒng)彈窗和App內(nèi)各種彈窗等等,以保證任務(wù)執(zhí)行過程不被彈窗干擾,彈窗處理有效率>90%。
(2)測試關(guān)鍵過程信息隨時存取,同時啟動崩潰檢測,與bug項目協(xié)同管理,發(fā)現(xiàn)異常自動轉(zhuǎn)為可視化bug。
(3)任務(wù)結(jié)束時自動進行清理環(huán)境,包括卸載App、清除本地執(zhí)行過程數(shù)據(jù)等,支持異常任務(wù)支持選擇相同條件設(shè)備進行重試。
問題定位
對App異常情況提供足夠的信息輔助開發(fā)修復(fù)問題形成閉環(huán)才是自動化最終的目的,可視化報告必不可少,它可以幫助用戶快速了解整個任務(wù)的執(zhí)行情況、定位異常。
愛奇藝iOS云錄制回放提供的測試報告包含任務(wù)概況、設(shè)備信息、用例執(zhí)行步驟、執(zhí)行日志等內(nèi)容,讓我們對每個用例的執(zhí)行過程都了如指掌,快速還原崩潰前后場景。
基于云端設(shè)備管理模式,可以快速跳轉(zhuǎn)到對應(yīng)設(shè)備進行場景回放和遠程調(diào)試。
任務(wù)報告圖
02
? ?落地效果
錄制回放系統(tǒng)極大地降低了iOS自動化的編寫和運行成本,目前已應(yīng)用于愛奇藝內(nèi)部的多條業(yè)務(wù)線中,日均執(zhí)行次數(shù)100+,發(fā)現(xiàn)多例功能性bug和崩潰。在日常的版本準入、回歸和CICD流程中發(fā)揮著重要的作用。
平臺提供的各類元素識別方法在不同系統(tǒng)手機上兼容性良好,平均執(zhí)行成功率穩(wěn)定在98%以上,常規(guī)版本迭代中腳本維護的成本低,單次維護半小時以內(nèi)。
03
? ?未來展望
當(dāng)前自動化測試用例仍然需要測試同學(xué)進行多次調(diào)優(yōu)才能達到最佳的執(zhí)行效果,智能化測試用例生成是一個重要的探索方向,未來我們會不斷地豐富元素的識別手段和生成方式,使用例生成更加智能、App自動化運行更穩(wěn)定。
在問題定位方面,第一階段還是以提供執(zhí)行場景信息、人工定位和判斷為主,后續(xù)我們會持續(xù)跟進各類問題產(chǎn)生原因并生成知識庫,結(jié)合知識庫實現(xiàn)失敗場景的初步定位和問題智能分發(fā),進一步降低自動化跟進和維護成本。
錄制回放作為自動化的基礎(chǔ)平臺,除支持基本的功能驗證和UI驗證外,未來會與愛奇藝內(nèi)部各平臺打通,支持同步啟動流量錄制、PingBack檢測、數(shù)據(jù)Mock等,助力各種專項測試。
看完心動了嗎?
戳👇“閱讀原文”直達招聘頁面
即刻加入愛奇藝!
也許你還想看
效能篇 | APP的自動化錄制回放系統(tǒng) 全云化處理新體驗
愛奇藝APP全面適配iOS 14 首批支持畫中畫功能 追劇聊天兩不誤
愛奇藝iOS穩(wěn)定性測試實踐
?關(guān)注我們,更多精彩內(nèi)容陪伴你!
總結(jié)
以上是生活随笔為你收集整理的录制快、回放稳,爱奇艺iOS云录制回放平台技术实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。