一澈圈、安卓性能測試的難點
- 安卓客戶端產(chǎn)品可能會遇到用戶反饋域携,用了一段時間后手機發(fā)燙發(fā)熱、內(nèi)存不夠用了晶密,這可能是客戶端性能沒有優(yōu)化導(dǎo)致的用戶體驗下降擒悬。
- 客戶端性能測試,常見的做法一般是通過各種方法獲取性能參數(shù)稻艰,包括cpu懂牧、內(nèi)存、電量尊勿、流量等僧凤,然后再通過各種測試工具結(jié)合性能數(shù)據(jù)畜侦,對代碼中耗時較久的方法進行性能優(yōu)化。這個過程通常會比較費時躯保。
- 我們考慮如何從使用產(chǎn)品的角度出發(fā)旋膳,直接定位到性能劇變的點,然后再針對該點進行性能優(yōu)化吻氧,這樣的話能夠明顯提高客戶端性能優(yōu)化的效率溺忧。
因此,我們嘗試將UI自動化測試與性能測試的結(jié)合進行了探索和實踐盯孙,設(shè)計了針對安卓的性能自動化測試平臺鲁森。平臺以文漫的幾個產(chǎn)品為例,進行了性能自動化測試的初步實踐振惰。
二歌溉、性能測試結(jié)合UI自動化
UI自動化測試:一大特點是UI測試,也就是模擬用戶的真實操作骑晶,另一大特點就是自動化痛垛,自動化的過程完全可以拿到用戶在哪一秒做了什么操作。將性能測試與UI自動化測試結(jié)合起來桶蛔,我們能夠從用戶使用產(chǎn)品的角度出發(fā)匙头,尋找性能劇變的點。常用的安卓UI自動化框架有很多仔雷,我們選擇使用較穩(wěn)定的Appium進行UI自動化測試蹂析。
Battery Historian:性能數(shù)據(jù)的采集也是關(guān)鍵步驟,Battery Historian是Google提供的通過可視化圖形界面展示電量等各種性能數(shù)據(jù)的工具碟婆,我們可以通過adb bugreport命令拿到性能文檔电抚,然后通過Battery Historian進行性能數(shù)據(jù)的圖形化展示。
因而竖共,我們設(shè)計的針對安卓的性能自動化測試平臺蝙叛,就是將性能測試(Battery Historian)與UI自動化測試(Appium)結(jié)合起來。
三公给、性能自動化測試平臺簡介
文漫組主要是四個產(chǎn)品借帘,閱讀、漫畫淌铐、蝸牛和lofter肺然,我們將性能自動化測試首先應(yīng)用在本組的四個產(chǎn)品上。由于平臺第一期匣沼,我們的UI自動化用例選取了每個產(chǎn)品最核心的功能來測試,如閱讀是閱讀書籍5分鐘捂龄,蝸牛閱讀書籍5分鐘释涛,漫畫是閱讀漫畫5分鐘加叁,lofter是瀏覽首頁資訊5分鐘。adb bugreport需要用真機測試才可以獲得有效的性能數(shù)據(jù)唇撬,尤其是電量數(shù)據(jù)它匕,于是我們使用adb wifi脫機執(zhí)行UI自動化測試。
平臺操作:點擊某一個按鈕開始對應(yīng)的產(chǎn)品UI自動化測試窖认,執(zhí)行完成后點擊“觀看報告”豫柬,即可在下方查看Battery Historian解析出來的性能數(shù)據(jù)。
平臺展示如下:
上半部分是進行UI自動化產(chǎn)品選擇的按鈕扑浸,執(zhí)行完UI自動化后烧给,可以點擊觀看報告,進而下半部分展示具體的性能數(shù)據(jù)喝噪。由于我們目前主要關(guān)注的是電量數(shù)據(jù)础嫡,將其他cpu等數(shù)據(jù)進行了暫時的屏蔽。
具體操作過程如下圖所示:
我們這里進行的場景文件的錄制和性能數(shù)據(jù)的結(jié)合酝惧,可以在坐標(biāo)圖中展示出在哪一時刻做了什么操作榴鼎,也就是下圖浮層中展示的“此刻操作:xxx”,下圖三中給出的是在性能劇變(電量發(fā)生下降)的點進行了查看晚唇,進行的操作可以明顯看到巫财。
Battery Historian還提供了從系統(tǒng)整體角度和獨立的app進程角度進行的電量等性能分析,可以通過平臺查看報告點擊后下拉頁面查看哩陕,下圖四就是系統(tǒng)性能整體數(shù)據(jù)平项,而下圖五則是選擇網(wǎng)易云閱讀的進程性能數(shù)據(jù)。
四萌踱、性能自動化測試平臺的基本框架
我們在服務(wù)器上搭建了兩個web服務(wù)器葵礼,分別是tomcat與go服務(wù)器,因為Battery Historian是用go語言實現(xiàn)的服務(wù)并鸵,我們就另起了一臺tomcat進行平臺基本功能的開發(fā)鸳粉,而核心的bugreport數(shù)據(jù)則由Battery Historian服務(wù)器解析。
如下圖所示园担,tomcat服務(wù)器前段頁面主要是進行測試請求和結(jié)果展示届谈,而后端Servlet則處理進行環(huán)境檢查、執(zhí)行UI自動化腳本弯汰、生成自動化場景文件以及生成Bugreport報告艰山。而go服務(wù)器的后端負(fù)責(zé)解析核心bugreport報告和scene場景文件,并將其進行拼接傳給前端頁面予以展示咏闪。
平臺實現(xiàn)的技術(shù)難點主要有幾個:
- 脫機進行UI自動化測試曙搬。因為使用數(shù)據(jù)線進行充電的話,電量數(shù)據(jù)等數(shù)據(jù)并非反映真實的性能情況。我們選擇adb wifi進行了真機的脫機UI自動化測試纵装。
- 平臺接口處理復(fù)雜終端操作征讲。我們使用shell腳本進行,結(jié)合gradle的命令行執(zhí)行UI自動化用例橡娄。
- Battery Historian處理場景文件诗箍。我們改造了原生的Battery Historian,對其做了再次開發(fā)挽唉,將處理場景文件的功能加了進去滤祖。
五、后續(xù)平臺發(fā)展與展望
因為目前平臺第一期主要做了是文漫幾個產(chǎn)品的實踐,且把UI自動化用例都進行了固定,為目前用戶最主要操作的核心功能草雕。后期在平臺優(yōu)化方面可做的地方有許多:UI自動化用例的選擇(希望支持自定義測試用例)拭荤;產(chǎn)品不做限制,任何產(chǎn)品都可以上傳包并產(chǎn)生性能數(shù)據(jù);性能文件的保存,前后多個性能文件的對比。
目前平臺的功能比較單一有限首昔,這是我們將性能測試和UI自動化測試結(jié)合思路的一次實踐,后面希望可以通過優(yōu)化平臺糙俗,包括自定義測試用例勒奇、產(chǎn)品應(yīng)用廣泛化、性能數(shù)據(jù)的對比等巧骚,使性能自動化平臺在性能測試中發(fā)揮更大的作用赊颠。
有其他問題、想法或者建議的話可聯(lián)系我或者劉勝hzliusheng@corp.netease.com