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