Android App持續整合效能測試:啟動流量(1)

debugtalk發表於2016-05-03

本文對Android App的啟動流量測試進行介紹。這裡的啟動流量指的是網路流量,即App在啟動時發起網路請求和接收網路響應時傳輸的網路資料量。

說起流量,也許大家的第一反應就是tcpdump/wireshark這類網路抓包工具。的確,Android系統確實也支援tcpdump工具,通過tcpdump,我們可以實現非常精準的流量測試。但tcpdump也有個問題,就是它捕捉到的流量是系統層面的,我們很難區分捕捉得到的流量資料是否都是當前apk產生的。

其實,對於特定apk的整體流量資料,在Android系統中都會儲存到對應檔案中,我們完全可以通過讀取對應檔案來獲得當前apk的流量資訊。

get app UID

與流量相關的狀態資料儲存在/proc/uid_stat//目錄下,其中,表示apk對應的UID。

關於UID,簡單地進行下說明。在Linux系統中,UID表示的是User Identifier,主要用於表示是哪位使用者執行了該程式。但在Android系統中,由於Android系統本身就為單使用者系統,這時UID就被賦予了新的使命,主要用於實現資料共享。具體地,Android系統為每個應用都分配了一個UID,不同apk的UID幾乎都是互不相同的,而對於不同UID的apk,不能共享資料資源。之所以用“幾乎”,是因為有時候同一廠家會存在多個產品,並且希望能在多個apk之間實現資料共享,這個時候,便可通過在menifest配置檔案中指定相同的sharedUserId,然後在Android系統中安裝應用時便會分配相同的UID。

獲取app UID的方式有多種,最簡單的方式應該還是從/data/system/packages.list中讀取,並通過apk的找到對應的UID。

在這裡,10084即是com.UCMobile.trunk的UID。

獲取流量資料

流量資料分為接收流量(tcp_rcv)和傳送流量(tcp_snd)兩部分,這兩個狀態數值我們可以通過讀取/proc/uid_stat/目錄下的兩個檔案得到。

通過這種方式,我們就可以讀取得到指定apk在當前時刻的累計流量數值。

獲得啟動流量資料

有了前面的基礎,我們要測試啟動流量就很好實現了。只需要在啟動前採集下累計流量數值,然後啟動應用,完成啟動後再採集一次累計流量數值,前後兩次累計數值的差值便是當次啟動耗費的流量數。需要注意的是,由於很多時候apk在啟動後,會在系統後臺非同步載入一些資料資源,因此為了保證我們採集到當次啟動耗費的全部流量數值,我們在啟動應用後最好能等待一段時間。

採集到前後兩次流量數值後,即可計算得到當次啟動耗費的總流量。

當然,這裡的啟動還分為好幾種,包括首次安裝啟動、非首次安裝啟動、覆蓋安裝啟動等。具體的啟動方式可根據實際場景來定,但在統計流量的方法方面都是相同的。

總結

本文講解了Android App啟動流量測試的一種方法。然而,本次介紹的方法也存在一定侷限性,因為/proc/uid_stat//目錄下的tcp_rcvtcp_snd檔案中都只記錄了總值,如果我們只關注總體的流量數值還好,但要是我們希望能測試得到更細化的資料,該方法就沒法滿足我們的測試需求了。

舉個例子,UC瀏覽器國際版在啟動後,會和美國的伺服器進行通訊互動。現在,我們想測試UC瀏覽器國際版在啟動後與美國伺服器的通訊流量。

顯然,本文中介紹的方法是沒法實現上述例子中的測試需求的。那例子中的場景要怎麼測呢?這就還是得用到tcpdump,在下一篇文章中我會再詳細進行介紹。

相關文章