天天看點

知乎移動端性能測試實踐

作者:閃念基因

在移動用戶端的測試環節中,性能測試是比較重要的一部分,相對于普通的正常測試,性能測試實施複雜、環境配置困難、測試問題場景很難複現、報告編寫和結果分析對測試人員要求較高等等因素導緻性能測試很難在實際的測試過程中推行。

實際的測試過程中我們經常會遇見通訊異常、用戶端停止運作,還有各種崩潰、卡死、頁面加載一直轉圈、手機運作過熱、耗電嚴重等等問題,如下是幾款典型的性能測試工具對比:

知乎移動端性能測試實踐

可以看出上述工具的實施難度都比較高,并且在一定程度上都會依賴本地開發環境配置,在跨平台方面正常第三方工具必須添加低侵入式 SDK,生成報告又需要手動擷取檔案,整理檔案資料手動生成各類報表等。是以考慮到性能測試的便捷性、低成本等方面的要求,盡可能在測試階段解決上述這一類問題,于是設計了一個便捷、無門檻的性能測試工具,我會從工具的使用步驟、設計目标、問題發現、工具實作細節、自動化接入、工具擴充等方面來進行介紹。

使用步驟

首先簡單介紹一下工具的主要步驟如下:

1.打開工具頁面

知乎移動端性能測試實踐

2.APP 掃碼

使用 APP 内置的掃碼工具掃描二維碼,使 APP 内置的位址修改為測試伺服器的位址,這時工具頁面會自動跳轉至性能資料實時檢視頁面。

3.APP 實時性能表現檢視

知乎移動端性能測試實踐

CPU/MEM

知乎移動端性能測試實踐

流量上傳下載下傳

知乎移動端性能測試實踐

Java GC

知乎移動端性能測試實踐

幀率

知乎移動端性能測試實踐

記憶體占用

4.測試報告生成和留存

知乎移動端性能測試實踐

完成測試之後系統會直接生成測試報告,開發、産品、測試可以用來共同分析測試過程中遇到的問題。

系統設計目标

  1. 環境配置、易用性

    在環境配置方面、基本上不需要再依賴本地環境,由用戶端内置代碼和服務端通訊完成資料上傳,完整的測試過程一共隻有 4 個步驟即可,測試門檻幾乎基本上全部消失、通過掃碼 → 報告的方式,最大程度簡化了使用流程,帶來了極大的便捷性和易用性。

  2. 資料展示

    1) 基礎資料展示

    用戶端第一次上傳資料時,系統會自動識别用戶端的基礎資訊、包括平台、用戶端版本、裝置型号、測試人員、測試時間等相關資訊。

    2) 性能資料展示

    資料展示方面使用了 bizcharts 對資料進行可視化、分别采用區域圖、線圖、點陣圖展示最近 5 - 10 分鐘的性能資料,在測試期間、系統會動态定時重新整理性能資料。

  3. 結果分析

    在上面的圖表中,可以看到‘流量下載下傳’部分的圖表中存在某一區域明顯上升,在通常的操作過程中這種流量下載下傳的突然增高可能會是使用者使用時進行了下載下傳、語言、視訊、音樂等操作,在測試過程中實際上并沒有上述操作,可以判斷是由一些 API 的資料請求造成,複現幾次後可以得到實際的請求 API,然後由開發人員判斷是否需要針對這個 API 進行瘦身優化,減少請求流量的消耗。

  4. 品質報告

    品質報告的生成沒有時間限制,也不需要進行特殊處理,在測試人員完成性能測試、或者手動結束性能測試之後,系統會自動生成性能測試結果報告的頁面,并生成唯一的測試報告連結。

  5. 實施難度和擴充

    在設計開發和測試實踐過程中,遇到的主要難度是:

    用戶端資料收集上傳的過程中、需要保證資料的完整,保證資料的連貫性。是以用戶端資料上傳時采用隊列的方式存儲資料,當系統出現問題、網絡異常、伺服器故障時把資料存入隊列,在問題解決之後再将隊列中的資料發送到服務端。

實作過程和細節

性能資料擷取的前提是品質團隊和用戶端團隊對名額的擷取達成共識,主要方式由用戶端實作後品質團隊 review 代碼确認後确定資料擷取方式,在資料擷取方面沒有做更加深入的自定義,包括一些名額如下:

  1. CPU、記憶體、網絡流量、幀率
  2. Android GC 資料
  3. 電池、電量相關資料
  4. 異常、卡頓、自定義代碼運作問題

用戶端架構設計:

知乎移動端性能測試實踐

用戶端采取隊列方式上傳資料,提供可配置的間隔控制和開關。

服務端資料互動

資料采用 base64 加密後,傳輸 gzip 壓縮,服務接收資料解析

@Throws(IOException::class)
private fun preProcess(request: HttpServletRequest): ByteArray {
    // 擷取輸入流
    // 轉 GZIP 輸入流
    // 擷取解密方式 base64 解密
    // 捕獲異常并傳回位元組流資料
}           

自動化性能測試接入

1. 通過自動化接口調用服務端生成性能測試執行個體

知乎移動端性能測試實踐

2. 用戶端自動化打開開關進行自動化性能測試

用戶端通過自動化腳本打開性能測試開關、同時調整性能測試伺服器 url 的指向,然後執行編寫完成的自動化性能測試腳本,同時上傳資料并記錄時間戳,當發現問題時用于核對性能資料和操作步驟。

3. 調用性能測試結束接口

當自動化性能腳本反複執行完畢之後,達到 2 小時的标準建議或者手動調用測試結束接口,系統會結束測試不再接收後面的資料,生成測試報告同時按照規則生成報告的唯一 url 位址。

4. 自動擷取生成的性能測試報告

自動化性能測試完成之後,會拿到性能的報告位址,可以通過郵件、IM 等方式将報告發送給相關人員或進行下一步的其他測試。

擴充

系統還在建設過程中,後續的擴充主要基于下圖:

知乎移動端性能測試實踐
知乎移動端性能測試實踐

在用戶端、浏覽器、測試伺服器之間建設一個性能測試閉環,同時在後面的性能測試過程中還會擴充關注如下一些名額:

1.卡頓異常(卡頓堆棧資訊、異常定位資料)

2.過程耗時(冷啟、熱啟、重要業務耗時)

3.頁面切換、加載時間

4.記憶體洩漏、抖動、頁面渲染(FPS)、圖檔/視訊/語音等專項名額

作者:陳康康

出處:https://zhuanlan.zhihu.com/p/42667918

繼續閱讀