基於UI響應時間的移動App效能測試解決方案
丟擲問題
移動端的效能測試指標有很多,分為響應時間類,資源消耗類,包括cpu、mem、電量、流暢度,網路流量,其中最影響使用者體驗的就是響應時間,因為它的好壞直接關乎使用者的直觀感受,所以參考價值也最高。而已有響應時間測試方法存在侷限性,如何低成本的快速開展App響應時間效能測試呢?
已知的方法
- 方法一:Android端可通過AM計算App啟動時間,或者通過DisplayManager日誌計算activity開啟時間。
- 方法二:程式植入log打點程式碼,通過特定位置的日誌標籤計算啟動或頁面載入時間。
- 方法三:通過攝像或者截圖,然後使用手工或程式的影象對比方法計算。
存在的缺點
- 方法一計算得出的結果往往和人眼感知的結果存在差距,這是因為頁面載入一般存在網路非同步互動,原生的系統日誌,無法準確表達App的響應時間,且測試範圍存在侷限性,對於特定場景,例如控制元件級別的載入或渲染無法實現測量。
- 方法二涉及到產品程式碼的侵入,需要保證測試程式碼和產品釋出程式碼的有效隔離,無形中增加了產品程式碼維護成本。除非必要,一般也不會在實際專案中使用。
- 方法三缺點是,要麼依賴高速攝像器材,要麼使用手機自身截圖的方式,後者容易對測試本身產生干擾,測試結果的權威性無法保證,因為截圖本身消耗了計算資源。前者測試成本投入較大。另外,程式影象對比也經常產生誤差,例如手機螢幕上的時間標籤剛好在影象對比那一幀發生了變化,影象對比結果就會出現錯誤。
聚焦關鍵點
從已有方法看出,方法三最契合我們的訴求,但它的缺點也比較明顯,例如,高速攝像採集成本高;截圖採集對測試環境產生汙染;影象對比容易受干擾。為了能給出人眼視覺的響應時間的量化值,並且保證結果準確、專案應用成本低。我們採用自動化+外接影象採集+影象對比演算法優化的整體技術方案。
關鍵點一:無汙染
目標:螢幕採集,需要避免對測試環境產生汙染,保證測試環境本身乾淨。
方案:外接攝像頭錄屏
實施:1、win pc+外接攝像頭2、手機、外接攝像頭連線電腦,win視窗顯示攝像頭採集內容3、win api抓取win視窗圖片
說明:截圖頻率直接影響測試結果的誤差精度,視窗截圖抓取程式執行時,圖片資料使用記憶體儲存,只在case結束時,完成一次硬碟IO儲存操作。這樣做是為了提高截圖速度,實現了20ms一次截圖。
關鍵點二:抗噪點
目標:影象對比,需要過濾圖片色差、區域性變化的干擾,儘可能貼近人眼觀察認知。
方案:影象對比演算法忽略區域性噪點,採用感知雜湊演算法,只關注圖片整體結構,忽略細節。
演算法:
完整的實施路線圖
技術實現
- 自動化驅動:MonkeyRunner驅動
- 影象對比:python PIL感知雜湊演算法實現
- 截圖:WIN API截圖,20ms擷取一次
- 時間一致性保障:時間系統統一,都採用windows系統時間。
原理說明
Case驅動原理,在一個操作之後等待較長時間,app介面處於響應結束狀態。開始時間是自動化指令碼觸發的,可以記錄,結束時間從圖片序列由後往前對比,找到最後一個變化的圖片代表的時間就是結束時間。兩者之差就是響應時間。以app啟動時間的響應時間為例,自動化case虛擬碼就是:1、啟動app並記錄啟動時間2、開啟截圖程式,實現錄屏 3、等待足夠久的時間4、case結束,截圖程式儲存截圖圖片。5、影象對比使用感知雜湊演算法計算結束時間。