老李分享:Android -自動化埋點 3


又一個問題,代碼中的writeLog方法到底要記錄哪些數據作為log信息呢?log信息中最重要的是能讓開發者看出來哪個界面被打開或者哪個控件被點 擊。對於界面,可以記錄其類名;對於控件,一般沒有確定的名稱,那么可以記錄下來這個控件在界面中的路徑。比如上文中介紹Android UI布局的實例,如果要定位記錄那個Button,則可以記錄它所在界面的類名和Button的布局路徑作為它的標識。那個Button的路徑可以表示為DecorView>LinearLayout[0]>FrameLayout[1]>RelativeLayout[0]>Button[0],由於LinearLayout有多個子View,因此可以在子View中加入編號來區分。這樣就解決了log信息的記錄問題,log信息的格式大致要有如下幾個字段:

monitor_type | ui_name | view_ui_path

比如是控件點擊埋點log,則可以記錄為

VIEW_CLICK | MainActivity | DecorView>LinearLayout[0]>FrameLayout[1]>RelativeLayout[0]>Button[0]

比如是MainActivity界面打開的埋點log,則可以記錄為

ACTIVITY_START | MainActivity | NULL

這樣我們分析這些日志信息,就可以統計出一個應用中各個頁面被打開過多少次,某個界面的控件被點擊過多少次。

對於自動化埋點的第三個功能,實現埋點的定制,這個比較好實現。如果我們需要對那些界面或者控件進行埋點,我們可以定制一個埋點列表。這個列表在應用啟動 的時候被下載到用戶的手機上,然后AutoMonitorReceiver需要多做一點事,就是將廣播發送過來的埋點信息與埋點列表進行比對,看是不是需 要埋的點,如果是,就將其記錄;如果不是,就不做處理。假設我們用json存儲這個埋點列表,大致的結構如下:

{
    "version": "app_1.1.1",
    "view_id":"MainActivity": {
        "DecorView>LinearLayout[0]>FrameLayout[1]>RelativeLayout[0]>Button[0]":"button_0"
        "DecorView>LinearLayout[0]>FrameLayout[1]>RelativeLayout[0]>Button[1]":"button_1"
    }}

當然這個埋點列表如何生成,這個需要開發者自己寫代碼去處理。

自動化埋點存在的問題和難點

poptest是國內唯一一家培養測試開發工程師的培訓機構,以學員能勝任自動化測試,性能測試,測試工具開發等工作為目標。如果對課程感興趣,請大家咨詢qq:908821478,咨詢電話010-84505200。

本文提供的自動化埋點的思路是,通過攔截屏幕點擊事件來搜索被點擊的控件,然后將其界面類名和控件的UI路徑記錄下來作為log信息。將控件的UI路徑和所在的界面類名作為一個控件的標識,有時候會出現一些問題,比如:

1.Android版本不同會造成控件的UI路徑不同。比如Android2.2與Android4.1版本下,獲取到上文中Button的UI路徑分別為

//android2.2DecorView>FrameLayout[1]>RelativeLayout[0]>Button[0]//android4.1DecorView>LinearLayout[0]>FrameLayout[1]>RelativeLayout[0]>Button[0]

這個問題可以通過將控件的UI路徑縮短來解決,比如就只用FrameLayout[1]>RelativeLayout[0]>Button[0]路徑來標識Button控件。

2.對一些隱藏控件、彈出窗口或者浮動窗口不好處理。比如,在上文中的Button同樣位置存在另外一個Button,不過是隱藏的,有時出現,有時不出現。當一個Button被點擊,單純依靠DecorView>FrameLayout[1]>RelativeLayout[0]>Button[0]路 徑不能判斷出是哪個Button被點擊。解決這個問題,有時做一些特殊處理可以解決,比如擴展log的字段,多加入一些控件的信息,比如Button上的 文字等。但是有時,開發應用的控件布局千變萬化,一些控件確實不能通過UI路徑進行唯一標識,這種就沒法自動化埋點了。只能通過手動埋點來來補充了。

3.文中提到為了實現埋點的定制,需要開發者自己寫代碼生成一個埋點列表,這個也是比較麻煩的。要遍歷一個應用中所有界面和界面中控件的UI路徑,這個比 較容易,但是取出自己想要埋點的控件UI路徑,這個可能需要人工去查看比對。另外,一些大型應用開發的時候,界面隨時發生着變化,一些控件的布局在隨時發 生變化。每次發布應用的時候,都需要掃描一下應用控件信息,以及重新找一下埋點控件的UI路徑,這個是相當麻煩的。如何實現這部分的自動化,也是一個難 題。

參考文章

InfoQ: Android事件傳遞機制


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM