一種基于動(dòng)態(tài)插件系統(tǒng)的移動(dòng)測(cè)試黑科技-創(chuàng)新互聯(lián)

背景

移動(dòng)APP插件化是平臺(tái)化產(chǎn)品解決系統(tǒng)限制(65535)、模塊解耦、和多團(tuán)隊(duì)協(xié)作的利器。它的大特點(diǎn)是模塊動(dòng)態(tài)下發(fā),給產(chǎn)品帶來的收益顯而易見,但是,在百度,這套系統(tǒng)給移動(dòng)端測(cè)試技術(shù)帶來了新思路

公司專注于為企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、電子商務(wù)商城網(wǎng)站建設(shè),微信小程序,軟件按需求定制制作等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。憑借多年豐富的經(jīng)驗(yàn),我們會(huì)仔細(xì)了解各客戶的需求而做出多方面的分析、設(shè)計(jì)、整合,為客戶設(shè)計(jì)出具風(fēng)格及創(chuàng)意性的商業(yè)解決方案,創(chuàng)新互聯(lián)更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務(wù)。

移動(dòng)端線上問題定位的幾個(gè)場(chǎng)景

  • 場(chǎng)景一: 云端用戶反饋某功能不可用,RD猜測(cè)幾種可能觸發(fā)原因,線上收集的客戶端打點(diǎn)日志信息不全,無法完全確認(rèn)問題。陷入死循環(huán),線上用戶持續(xù)暴露問題,線下無法穩(wěn)定復(fù)現(xiàn),不能及時(shí)定位問題。如何破?

  • 場(chǎng)景二:通過客戶端預(yù)埋方式打點(diǎn)用戶行為,往往會(huì)出現(xiàn)打點(diǎn)不全的問題,而往往線上問題的定位需要這些行為日志為問題定位提供良好的復(fù)現(xiàn)步驟。 如何無需編碼,通過技術(shù)手段獲取全量用戶與客戶端交互日志?

  • 場(chǎng)景三:線下很多好工具可以SDK化,給線上問題發(fā)現(xiàn)和定位帶來大量正向收益,但因?yàn)闇y(cè)試能力本身會(huì)影響集成app的性能,或開發(fā)團(tuán)隊(duì)排期等原因,無法集成,大量線上問題無法充分暴露。如何優(yōu)美的解決這種問題?

  • 場(chǎng)景四:百度的線上客戶端小流量實(shí)驗(yàn)表明,線上問題實(shí)際是一種正態(tài)分布的隨機(jī)事件,TOP問題,往往只需抽樣很少量用戶即可召回,而不需要影響全量用戶

移動(dòng)端線下測(cè)試的幾個(gè)場(chǎng)景

  • 場(chǎng)景一: 客戶端測(cè)試簡(jiǎn)單卻又復(fù)雜,一個(gè)客戶端測(cè)試人員的簡(jiǎn)單技能樹可能包括這些問題的分析能力: ANR、crash、卡頓、內(nèi)存泄露、內(nèi)存、CPU占用、電量分析、啟動(dòng)速度分析等等一系列的技能。而往往,部分QA人員并不是全棧。并且這些工具的使用本身,就是一個(gè)工具大集合。如何讓客戶端測(cè)試人員,或非專業(yè)測(cè)試人員,無需任何背景,只需要點(diǎn)一點(diǎn)就可以具備全部客戶端問題分析能力

  • 場(chǎng)景二:同剛才說的線上問題定位,線下大量的優(yōu)秀功能,并不能適用于全量用戶,因?yàn)樗麄儽旧砭褪莻麛嘲税?,自傷一千的能力。如何在盡量小用戶體驗(yàn)損耗的前提下,讓問題盡量的全部召回?

一種移動(dòng)端線上問題定位的新思路:

基于插件系統(tǒng),做一個(gè)測(cè)試插件,把我們所有覺得有用的線下測(cè)試能力打進(jìn)去,同時(shí)集成業(yè)內(nèi)知名的好框架,譬如dexposed、 leakcanary等,還有一些系統(tǒng)開放了但是主版使用會(huì)影響性能的好東西traceviewer、Choreographer、ActivityLifecycleCallback等。統(tǒng)統(tǒng)打到云插件中,并通過云端已經(jīng)構(gòu)建好的動(dòng)態(tài)模塊小流量系統(tǒng)下發(fā)到特定目標(biāo)用戶手機(jī)中,持續(xù)暴露問題

NICE JOB??!

云插件工作原理
云插件本身就是宿主的一個(gè)插件而已,真正能夠發(fā)揮它的測(cè)試能力的是,線下構(gòu)建的大量測(cè)試場(chǎng)景,以及插件本身的動(dòng)態(tài)加載機(jī)制,這樣我們的測(cè)試場(chǎng)景就可以在線上發(fā)揮它的效力了。提到這個(gè)就不得不新鍋炒舊飯:

  • 雙親委托機(jī)制:java的類加載機(jī)制下,子classloader可以向上查找父classloader的加載內(nèi)容,從而給云插件動(dòng)態(tài)查找宿主各種類信息提供了先決條件(多進(jìn)程化的插件系統(tǒng)。。請(qǐng)忽略我把)

  • dexclassloader:可以加載文件系統(tǒng)的任意JAR(包含dex文件)、zip、apk文件

  • patchclassloader: 只可以加載data/app/的apk文件,常用于多dex拆分項(xiàng)目

  • dexfile: 可以加載動(dòng)態(tài)文件,同時(shí)提取文件內(nèi)部的類信息,這個(gè)是dexclassloader不具備的

  • 破殼: 云插件自己的場(chǎng)景需要集成信息上傳類,但在編譯時(shí),不能將對(duì)應(yīng)類編譯進(jìn)插件包。這樣場(chǎng)景插件在被加載起來以后,就可以回調(diào)宿主的日志系統(tǒng)進(jìn)行信息采集了

經(jīng)過如上,下圖中的JAR或APK中包裹的場(chǎng)景插件就可以被云插件動(dòng)態(tài)加載進(jìn)來,同時(shí)對(duì)宿主的各種類、本地空間、以及系統(tǒng)中與宿主相關(guān)的信息進(jìn)行讀取、采集。至于是hook、反射、代碼注入、異常捕獲、插樁等這些只是一種手段了 

一種基于動(dòng)態(tài)插件系統(tǒng)的移動(dòng)測(cè)試黑科技

實(shí)例:

注意: 下面的case,雖然說的是云插件的問題定位場(chǎng)景,但是不止云插件,我們后面會(huì)以SDK形式開源這部分技術(shù),所以,集成了這個(gè)SDK的app也可以這么干,但是脫離了插件系統(tǒng),本身的安全性,需要集成的開發(fā)者關(guān)注自己的安全性。 當(dāng)然也可以不關(guān)注,root的手機(jī)上,你的app本身就已經(jīng)全部暴露給了***(BLESS…)

正文: 以流暢度為例,我們看如何非??焖俚臉?gòu)建云調(diào)試插件的case吧

流暢度:可以理解為android系統(tǒng)繪制UI的速度,理論上,人眼在1s內(nèi)接收60幀圖像才會(huì)感覺程序流暢。 android系統(tǒng)之初,流暢度一直是人們?cè)嵅〉哪繕?biāo),直到android 4.1系統(tǒng)的時(shí)候,有了注明的project Buffer,并引入了三大元素,VSYNC(垂直同步)、Triple Buffer和Choreographer。其中Choreographer這個(gè)東西是我們今天討論的目標(biāo)。它是整套機(jī)制中的協(xié)調(diào)者,并且所有l(wèi)ooper都共用一個(gè)Choreographer對(duì)象

Choreographer對(duì)外開放了一個(gè)FrameCallback的東西,在每次系統(tǒng)繪制時(shí),都會(huì)通過這個(gè)回調(diào)doFrame函數(shù),通過這個(gè)函數(shù)可以計(jì)算出在1s內(nèi),當(dāng)前頁(yè)面的繪制次數(shù)。但是問題來了:
一種基于動(dòng)態(tài)插件系統(tǒng)的移動(dòng)測(cè)試黑科技看上圖,含義就是,此貨雖然好,但是建議是你們開發(fā)者還是不要用了。。。這如何玩,本來還想拿它上個(gè)流暢度監(jiān)控的。。此時(shí)一定會(huì)想到,我們有云調(diào)試插件。

構(gòu)建很簡(jiǎn)單,如下,只需要把這段代碼copy到任意android工程,然后打包,注意NutXError只作為編譯依賴即可, 如果已有插件系統(tǒng), 這段代碼就可以直接被加載并運(yùn)行了

public class
        NutFrameMonitor extends BaseCase {
    private static final String TAG = "NutFrameMonitor";
    @Override
    public void invoke(Context context) {
        int sdkVersion = 0;
        try {
            sdkVersion = Build.VERSION.SDK_INT;
        } catch (Exception e) {
            // TODO
        }
        if (sdkVersion >= 16) {
            try {
                Choreographer.getInstance().postFrameCallback(NutFrameCallback.callback);
            } catch (Exception e) {
                // TODO
            }
        }
    }

    private static  class NutFrameCallback implements Choreographer.FrameCallback {

        static final NutFrameCallback callback = new NutFrameCallback();
        private long mLastFrameTimeNanos = 0;
        private long mFrameIntervalNanos = (long)(500000000) - 1;
        @Override
        public void doFrame(long frameTimeNanos) {
            if (mLastFrameTimeNanos != 0) {
                final long jitterNanos = frameTimeNanos - mLastFrameTimeNanos;
                if (jitterNanos > mFrameIntervalNanos) {
                    NutXError error = new NutXError(TAG);
                    error.setDetailMessage("frame Choreographer waste more than 500ms");
                    error.dump();
                }
            }
            mLastFrameTimeNanos = frameTimeNanos;

            Choreographer.getInstance().postFrameCallback(NutFrameCallback.callback);
        }
    }

}

結(jié)果

下面這個(gè)截圖是在操作客戶端運(yùn)行的時(shí)候(注意監(jiān)控case是通過云插件動(dòng)態(tài)加載的喲),發(fā)現(xiàn)的一個(gè)流暢度問題。同時(shí)也可以看到,在監(jiān)控到繪制問題后,用戶停留的每個(gè)界面也被畫了出來。 然后線下就可以沿著這條trace去復(fù)現(xiàn)結(jié)果了~
是不是很酷~~~ 

一種基于動(dòng)態(tài)插件系統(tǒng)的移動(dòng)測(cè)試黑科技

后記

如上,便結(jié)束了對(duì)百度在移動(dòng)端測(cè)試的技術(shù)探討。然而,其實(shí)有很多沒提到,譬如現(xiàn)在已經(jīng)構(gòu)建好的自動(dòng)化case有哪些、這套機(jī)制兼容性如何等,再譬如有眼尖的同學(xué)也會(huì)發(fā)現(xiàn)這套系統(tǒng)本身可能就會(huì)有兼容性問題,如何做好問題卡控,保證云調(diào)試插件(其實(shí)我們叫堅(jiān)果云)有效及時(shí)回收。 其實(shí),我們有充足的自信在線上嘗試這個(gè)東西。在廠子的線上,我們一整套動(dòng)態(tài)模塊小流量系統(tǒng),云插件本身其實(shí)就被作為了一個(gè)動(dòng)態(tài)模塊,當(dāng)線上出現(xiàn)問題時(shí),我們的云插件就會(huì)發(fā)揮它的價(jià)值了

百度MTC是業(yè)界領(lǐng)先的移動(dòng)應(yīng)用測(cè)試服務(wù)平臺(tái),為廣大開發(fā)者在移動(dòng)應(yīng)用測(cè)試中面臨的成本、技術(shù)和效率問題提供解決方案。同時(shí)分享行業(yè)領(lǐng)先的百度技術(shù),作者來自百度員工和業(yè)界領(lǐng)袖等。

本文作者:hyxbiao & tony xin

作者Email:hyxbiao@gmail.com & jiankangxin@gmail.com

有問題聯(lián)系我>>

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)站題目:一種基于動(dòng)態(tài)插件系統(tǒng)的移動(dòng)測(cè)試黑科技-創(chuàng)新互聯(lián)
文章起源:http://muchs.cn/article20/ijhjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)站收錄、云服務(wù)器微信公眾號(hào)、網(wǎng)站排名、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)