[點晴永久免費OA]月活8.89億背后:微信工程師細數(shù)兼容測試經(jīng)驗
2017年4月,企鵝智酷公布了最新的《2017微信用戶&生態(tài)研究報告》。報告數(shù)據(jù)顯示,截止到2016年12月微信全球共計8.89億月活用戶,新興的公眾號平臺擁有1000萬個。微信這一年來直接帶動了信息消費1742.5億元,相當于2016年中國信息消費總規(guī)模的4.54%。 目前國內(nèi)很多硬件廠商,對于Android版本,深度定制自己的ROM、系統(tǒng)版本,例如小米的MIUI、華為的EMUI、聯(lián)想的VIBEUI等。這就是N個廠商乘以M個版本,導致的版本數(shù)量爆炸,牽引出各種適配問題。 微信應用去適配那么多的設備花費了大量精力時間。在這個環(huán)境下,微信團隊寄托于自動化測試,希望把更多的測試環(huán)節(jié)放在云端自動化地運行。 一 微信最關注的質(zhì)量問題 兼容性測試覆蓋的環(huán)節(jié)眾多,微信優(yōu)先選取核心的環(huán)節(jié)進行測試。并把必測的環(huán)節(jié)盡量以自動化,云端化的方式實現(xiàn)。那么,哪些問題屬于高優(yōu)先級? 1、安裝和啟動失敗 安裝和啟動問題是屬于最嚴重的bug。這種問題一般比較少出現(xiàn),但是一出現(xiàn)就是大問題。安裝和啟動失敗,很可能造成微信團隊的監(jiān)控數(shù)據(jù)不充分,有時無法主動發(fā)現(xiàn)問題,最后只能通過用戶反饋感知到這種錯誤。此時可能已經(jīng)給用戶造成很大影響了。 比如曾經(jīng)發(fā)現(xiàn)華為和三星某臺機型的getDrawable這個api掛掉了,導致這兩款機型部分用戶啟動不了微信,雖然影響用戶量不大,但非常嚴重。安裝失敗和啟動失敗是兼容性測試最基本的要求。 2、Crash問題 Crash率是微信團隊衡量一個版本是否穩(wěn)定的重要標準,尤其是新出現(xiàn)的Crash。當測試包灰度出去之后,如果Crash率偏高,或新出現(xiàn)的Crash占比較高,微信團隊一般會采取換包,撤包措施。這會帶來以下連鎖反應 1、給用戶造成極差的使用體驗 2、給開發(fā)和測試造成額外的工作 3、造成因版本發(fā)布延遲引起的一系列損失 因此,新出現(xiàn)的Crash一定是微信最關注的質(zhì)量標準之一。 二 對癥下藥,提前發(fā)現(xiàn)問題 上面提及的兼容性問題,出現(xiàn)任何一種情況都是極其嚴重。微信團隊根據(jù)同行的積累和歷史經(jīng)驗,針對不同的問題,做不同的測試。 1、針對安裝和啟動問題——覆蓋安裝測試 覆蓋安裝,顧名思義就是用新版本的應用覆蓋舊版本。 覆蓋安裝的測試流程如下: 針對安裝和啟動問題是影響最嚴重的問題,微信團隊目前在版本發(fā)布前都要做覆蓋安裝測試。將要發(fā)布的包,安裝并且啟動成功之后保證微信基本功能能正常運行。微信的每個正式版本基本都會修改配置的版本號,Android也是根據(jù)版本號來判斷App是否有更新。當覆蓋安裝完之后,App有專門的代碼處理更新,保證數(shù)據(jù)兼容。一般第三方商店都是以這個值來檢測軟件是否更新。 覆蓋安裝測試的流程較簡單,盡可能模擬真實用戶升級安裝使用的場景。覆蓋安裝之后,用戶啟動微信時,后臺發(fā)出升級指令,升級主要是確認老版本的數(shù)據(jù)能否在新版本中使用;最后通過冒煙測試,檢測微信核心功能(覆蓋到主要的數(shù)據(jù)庫)能否正常通過。微信團隊重視覆蓋安裝測試,除了監(jiān)測一些數(shù)據(jù)兼容性問題外,還需檢測新打的包是否有問題。此外tinker的patch包也需要經(jīng)過類似的測試,保證patch成功以及基本的核心功能。 覆蓋安裝測試只在發(fā)布前夕做,因為微信這邊是持續(xù)集成開發(fā),分布分支上的包一直在更新,所以只拿即將發(fā)布的包來做,通過之后才會進行外網(wǎng)發(fā)布。 2、Crash問題——穩(wěn)定性測試 Crash問題對應的測試是穩(wěn)定性測試。對于app的穩(wěn)定性測試,官方的測試工具是monkey。monkey會產(chǎn)生一些列隨機性事件(具體比例可以配置)測試目標APP是否出現(xiàn)Crash。 Monkey測試的局限性 微信團隊發(fā)現(xiàn)monkey不會去檢測界面上的控件,因此產(chǎn)生的事件過于隨機,不太符合微信的測試需求。因此,微信開發(fā)了一個基于控件的定制化monkey來做穩(wěn)定性測試。 要基于控件開發(fā)一個定制化monkey,首先就需要獲取界面(Activity)的所有控件(View)。 選擇框架修改Monkey腳本 一開始采用robotium框架,但微信本身是一個多進程的App,比如打開相冊,或者webview的時候,都是在一個tools進程中的,而robotium只針對單個進程,需要去改框架源碼才可以支持多進程的微信App,實現(xiàn)起來比較繁瑣。因此后面微信團隊開始使用官方框架UIAutomator。 利用框架獲取控件(View) google并沒有給出公開接口獲取所有控件,如果使用selector來獲取,速度很慢,因為google為了保證ui自動化的執(zhí)行,很多地方加了等待,而monkey測試需要快速的點擊。通過參考UIAutomator的源碼實現(xiàn),微信團隊決定利用java的反射原理拿到AccessibilityNodeInfo,中間去掉無謂的等待或者減少等待事件增加重試次數(shù)。AccessibilityNodeInfo 跟view(控件)有一對一的關系,在uiautomator里面就跟一個UiObject對應。目前外面很多的搶紅包插件也是利用AccessibilityService拿到AccessibilityNodeInfo來做識別和點擊。 定制化Monkey的誕生 通過反射的方案,獲取當前activity的速度可以保證在十幾毫秒以內(nèi)完成。獲取所有控件之后,就可以針對控件做隨機探索了! 為了更好的遍歷盡可能多的activity,微信團隊采用改造之后深度遍歷算法。我們稱之為“定制化Monkey”。定制化monkey的運行邏輯比較簡單,其中,還有一些特殊處理,比如返回的時候要檢查是否有彈框,打開webview的時候檢查是否有彈框(地理位置),跑的時候是否有退出登錄等。目前來看改造的效果比原生的效果有一定的提升,下面是單機的測試結(jié)果: 從上圖可以看出,相對于原生的monkey,行覆蓋率大約有80%的提升,activity覆蓋率大約有將近200%的提升。而且從曲線上可以看到,這兩個monkey在登錄之后的1個小時以內(nèi),行覆蓋率和activity覆蓋率都有明顯的提升,在1到2個小時以內(nèi)也會緩慢提升,而兩個小時之后提升就非常緩慢了。 微信團隊每天都會取最新代碼編的apk包進行穩(wěn)定性測試,收集出現(xiàn)的Crash,并且把新出現(xiàn)的Crash,提交bug給對應開發(fā)。 3、機型覆蓋——云端化測試 兼容性測試根本還是要覆蓋機型,微信團隊在做一些自動化方案目的就是為了在多種機器上并行執(zhí)行。原先,微信團隊用來做自動化的機型數(shù)量較少。上面提到的覆蓋安裝測試和定制化monkey測試,可能只跑典型的6到10臺機型。 現(xiàn)在兼容性測試遷移到WeTest平臺上,測試基于WeTest給微信搭建的私有云平臺進行,同時公有云的機型作為補充。 至此,微信團隊實現(xiàn)了機型管理云端化,設備覆蓋也有了實質(zhì)性提升。 微信團隊每天都會在測試平臺上申請上百臺手機跑多輪定制化Monkey測試,日均測出十幾個Crash,一些新特性上線的高峰期有時可達40/50個。 三 其他關鍵質(zhì)量問題——新功能適配 除以上問題之外,新功能上線時,微信團隊會非常關注其是否會產(chǎn)生新的適配問題。譬如,字體截斷問題,鍵盤問題等。一年多前,微信發(fā)布小視頻功能,發(fā)現(xiàn)多個廠商定制ROM導致的視頻方向錯誤,黑屏,播放失敗等問題,嚴重影響用戶體驗。 每個版本都有功能兼容性問題,并且每個版本的測試內(nèi)容都不一樣。目前采用的方式還比較低級,主要依靠人力在主流機型上進行兼容性測試以及眾測。 版本間差異大,自動化陷入困境 功能測試一般針對某個特定版本,因此自動化腳本基本只適用特定版本,復用性弱,自動化不能帶來好的收益。同時,功能測試路徑有時比較特殊,自動化腳本難寫,驗證麻煩。比如小視頻功能測試,自動化腳本判斷不出來是否出現(xiàn)黑屏、花屏,必須要人眼判斷。 部分特性可以自動化實現(xiàn):半自動化測試 一些特性可以做自動化或者半自動化測試。比如H5測試,主要是檢測在不同手機上打開頁面,看看頁面是否有UI問題。半自動化測試方案:通過腳本驅(qū)動UI操作和webview操作,同時在關鍵的頁面截圖,生成帶一系列截圖的測試報告。事后肉眼查看截圖,比對判斷測試是否通過。 功能兼容性問題目前我們還沒有一個通用的解決方案,都是根據(jù)不同的需求利用目前手頭資源做盡可能完善的測試。 功能自動化測試遷入WeTest平臺 針對功能適配兼容性測試,微信團隊也把H5適配兼容性測試和部分高優(yōu)先級自動化用例遷移到WeTest平臺上。 ● 建立微信私有云:在私有云上,微信團隊不間斷提交自動化腳本進行24小時測試。當私有云缺少某臺特定機型時,WeTest公有云上的機型作為補充測試。 ● 微信質(zhì)量系統(tǒng)與私有云對接:WeTest將一些接口開放給微信,微信利用這些接口,搭建了自己的云端質(zhì)量管理平臺,直觀、便捷地進行測試管理工作,大大提升了效率。 四 效果 微信團隊通過自動化、云端化測試,在兼容性和功能測試方面效率提升了1倍多,更快速、精準地定位解決問題,累計發(fā)現(xiàn)并解決的問題數(shù)達數(shù)千個,覆蓋億級用戶,提供了流暢穩(wěn)定的體驗環(huán)境。 后續(xù),我們期待云端化、自動化測試深度覆蓋到更多測試環(huán)節(jié),使測試過程和測試結(jié)果變得更加流暢、可視化。通過技術的力量,持續(xù)提升產(chǎn)品的質(zhì)量! 該文章在 2017/5/4 11:35:27 編輯過 |
關鍵字查詢
相關文章
正在查詢... |