天天看點

用戶端Android穩定性測試實踐

作者:閃念基因

背景

為什麼需要用戶端穩定性測試?

穩定性測試是在保證功能完整正确的前提下,必不可少的一項測試内容,通過對軟體穩定性的測試可以觀察在一個運作周期内、一定的壓力條件下,

軟體的出錯機率、性能劣化趨勢等。進而大大減少軟體上線後的崩潰卡死等現象,為軟體的逐漸優化提供方向及驗證。

穩定性問題帶來的危害?

  • 影響品牌口碑
  • 使用者留存降低
  • 影響使用者體驗

在視訊業務方向,某個版本疊代底層技術架構優化多例播放器的需求,使用者在更新到新版本後第一次觀看視訊Crash,共計Crash量39k。在功能測試階段,從功能層面出現機率極低,但是當使用者量大的時候會激發。

反思: 從品質保障角度層面,發現視訊業務在內建階段 缺乏前置 攔截測試手段 。

用戶端Android穩定性測試實踐

故障複盤

目标

  • 社群用戶端穩定性 Crash 降低 20%
  • 版本灰階階段穩定性問題閉環率 100%
  • 日常營運穩定性測試工具,攔截內建和灰階Bug
  • 建立 知乎統一穩定性測試能力

技術方案設計

方案調研

1、Google Monkey

首先來看業界用的較早也是經常聽過的一款工具—— Monkey。這是 Android 官方提供的一個工具。谷歌原本設計這款工具是為了對 App 進行壓力測試的。

谷歌早期在設計 Android 的時候,Android 需要響應滑動、輸入、音量、電話等事件,早期 Activity 設計不完善的時候,谷歌希望測試 activity 的性能,

把所有的資料批量化的輸出給 Activity ,看 Activity 一秒鐘可以處理多少資料。是以早期 Monkey 是用來做 Android 的一個壓力測試的工具。

由于 Monkey 在測試過程中的“随機”性,恰巧可以被用來做自動周遊測試,但是 monkey 的缺點很明顯,不支援業務行為定制,

無法靈活的控制,經常會點到外部的 App 無法回歸原測試 App ;或者點選到登出和退出,造成無法繼續後面的測試;

是以 monkey 在經過調研了解後沒有成為我們做自動周遊測試的首選。

Monkey 官方連結: https://developer.android.com/studio/test/monkey

2、Maxim自動化周遊

Maxim 也是一款自動周遊工具,由國内的 zhangzhao 同學開發,官方給出的定義是:

An efficient Android Monkey Tester, available for emulators and real devices 基于周遊規則的高性能 Android Monkey,适用于真機/模拟器的 APP UI 壓力測試。

我們來看看這款工具的優缺點:

優點:

  • 基于Monkey二次開發,運作速度非常快
  • 提供了多種周遊算法以提高覆寫度
  • 提供了定制化功能,可以實作流程控制

缺點:

  • 因為是基于 Monkey,是以不具備跨平台性,隻能測試 Android ,不能測試 iOS 及 Web 等;

這是一款很優秀的工具,可在一定程度上進行定制,如果隻測試 Android 系統的話,可以考慮選用 Maxim 做自動周遊。

官方 GitHub 位址:https://github.com/zhangzhao4444/Maxim

3、AppCrawler

AppCrawler 官方 GitHub 上對這款工具的解釋是:

一個基于自動周遊的 App 爬蟲工具。支援 Android 和 iOS,支援真機和模拟器。最大的特點是靈活性,可通過配置來設定周遊的規則。

這裡順便提一下的是谷歌也釋出了一款自動周遊的工具,名字幾乎一樣,叫做 App Crawler (差了一個空格),設計的思想也一緻。思寒開源的的工具比谷歌早了兩年時間。

下面來看看 AppCrawler 的作用和價值。看看它為何滿足我們的測試需求,它的優缺點又在哪裡。

優點:

  • 跨平台性:AppCrawler是基于 Appium 開發的,是以支援 Android、iOS、Web
  • 靈活定制:對周遊的頁面、控件、事件、深度等都可自由控制

缺點:

  • 運作速度較慢:基于 Appium 開發具備了跨平台的優點,但是也因為這層封裝造成了運作速度相對較慢,再加上運作過程中加入了截圖(可以在配置中取消,但是取消後不利于結果的檢視),運作起來自然就慢了;
  • 使用門檻高:正因為使用靈活性的問題,也造成了使用門檻的提高,主要基于 YAML 檔案中使用 Appium 的相關技術知識進行配置,這就對使用者有了一定的技術要求;

4、位元組跳動Fastbot 健壯性測試工具

Fastbot 是位元組跳動的 Quality Lab 團隊開發的一款融合了機器學習與強化學習的基于模型測試的工具。

中文介紹

基于model-based testing 結合機器學習、強化學習的APP 穩定性測試工具

Fastbot可以了解為MaxIM的更新版,為了增強覆寫,融合了多種機器學習、強化學習等相關的算法。他的執行速度很快,并顯著提升了測試覆寫度。應用的效果也是非常不錯的。

目前,Fastbot 已廣泛應用于位元組用戶端類産品的穩定性測試與相容性測試。每日啟動任務數超過 300 次,每日平均發現 5000 個以上的崩潰,并有超過 100 個新捕獲的崩潰。借助 Fastbot 的能力,我們在發版前就可以修複大部分的 crash,

確定線上使用者的使用體驗。同時,Fastbot 在整個 DevOps 流程扮演重要的基礎服務角色。我們相信,越來越多的智能化測試工具,将極大的改善國内傳統測試行業。

官方 GitHub 位址: https://github.com/bytedance/Fastbot_Android

優勢

1、Android 多os相容

同時相容Android 5-11,相容國内各廠商定制化的Android系統及原生Android系統

2、事件快速注入

繼承原生 Monkey 的優勢,快速點選,每秒最高可發送12個事件

3、專家系統

不同業務線支援不同的個性化需求,業務深度定制化

4、智能化測試

基于 model-based 邊周遊邊模組化,利用強化學習等算法做高收益決策

5、跨平台

支援非标準化控件,YOLOv3、ocr、cv分割等UI圖像識别能力

6、模型複用

支援模型複用,模型檔案會自動存儲在 /sdcard/fastbot_[包名].fbm,啟動 fastbot 時如果此檔案存在則預設加載模型,運作過程中每隔十分鐘會覆寫存儲一次,使用者可根據需求删除或拷貝此檔案

綜合對比上面的技術架構優缺點,最終選擇Fastbot 作為Android Monkey執行引擎。

能力建設

主要有如下三個方向:

  • 資料分析 分析下鑽各個階段的産生問題歸類,發生比例、修複率等名額。
  • 流程規範: 制定Crash修複流程,降低灰階和全量的風險。
  • 工具能力: 架構搭建、bug上報、持續內建、提高覆寫率、精準bug分發、工具推廣。
用戶端Android穩定性測試實踐

用戶端穩定性測試建設

裡程碑

主要分為四個關鍵節點:

  • 需求調研
  • 技術調研
  • 業務試點
  • 營運分析
用戶端Android穩定性測試實踐

方案裡程碑計劃

工具架構

工具架構如下: 主要分為工具層和服務層

  • 工具層主要提供測試工具執行的基礎能力。
  • 服務層主要提供提供給工具層服務能力,如: 安裝包資料、建立 Bug 服務、儲存報告服務等。
用戶端Android穩定性測試實踐

工具能力架構

發版流程

伴随用戶端發版節奏,從需求上車後到建構完成內建包,自動化觸發穩定性測試任務。發現穩定性問題

會自動送出 Bug 并且指派給研發同學,可以通過品質大盤全局的分析版本趨勢、執行次數等名額資料。

在版本內建階段和版本灰階階段持續跟蹤推進問題閉環,要達到閉環率100%,穩定性名額閉環名額作為版本品質準入評估名額。

用戶端Android穩定性測試實踐

版本品質準出

持續內建

依托于Jenkins開源持續內建工具,做任務排程、裝置執行節點。Jenkins 執行個體是安裝在獨立分隔的另一台裝置上,一般稱之為 Jenkins Controller 。

用戶端Android穩定性測試實踐

Android穩定性測試自動化分布式執行

Jenkins Agent 本身隻是一個編譯、打包、運作代碼的環境,并不包含 Jenkins 執行個體。在每一個Jenkins Agent 上可以挂在多台Android裝置。

在Jenkins中建立穩定性測試任務,編寫建構腳本和執行測試政策。

用戶端Android穩定性測試實踐

monkey執行任務清單

落地效果

過程資料:

  • 執行次數: Android 3500+
  • 執行機器: 多台裝置(小米、華為、鴻蒙、紅米) * 每天定時三次
  • 執行時長: 累計執行時間: Android 20w+分鐘 每單次執行 60 分鐘
  • 接入方: 知乎、知乎日報、知學堂

結果資料:

  • Android累計發現 75+ Bug

版本發現Bug趨勢

用戶端Android穩定性測試實踐

版本發現比例

用戶端 內建 / 灰階階段發現的Bug比例

用戶端Android穩定性測試實踐

階段發現比例

結語

用戶端穩定性建設不是一朝一夕的事,從分析線上問題、調研、實作、推廣等關鍵節點,最終配合嚴謹的發版流程嚴卡穩定性問題。

另外穩定性測試隻是穩定性治理的一小部分,從研發側可以從代碼編寫、架構設計、止損方案角度避免線上穩定性問題。

最後,一切技術專項都要有業務買單、解決實際問題。

作者:信希

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