漫談:從APP崩潰率標準,到Monkey介紹拓展Maxim,及Jenkins自動化配置,持續集成獲取崩潰monkey日誌

漫談:
從APP崩潰率標準,到Monkey介紹拓展Maxim,及Jenkins自動化配置,持續集成獲取崩潰日誌

1、APP崩潰率標準

開發或測試app的同學,對於app崩潰肯定非常熟悉,頻繁的線上崩潰屬極度嚴重事故,肯定會給團隊和個人帶來KPI的低下,防患於未然就成了重中之重

1.1 常見的檢測崩潰手段

  1. 業務測試,普通測試,環境版本兼容性測試,開發調試中遇到
  2. 健壯性測試:【數據狀態異常、http請求狀態異常、網路狀態異常(網路波動)、大數據、特殊場景、等等】
  3. monkey測試
  4. 友盟等線上檢測工具監控錯誤率、錯誤日誌

1.2 崩潰率標準

 

 這是聽雲2016年提出的移動應用崩潰率標準,也是行業目前參考最多的標準

2、Monkey介紹拓展Maxim

常規的測試並不能完全使app的崩潰率達標時,這時候往往需要藉助monkey進行一些壓力測試

2.1 Monkey介紹

Monkey是android系統自帶的一個測試小工具,原理是存在一個事件庫,並隨機進行對事件進行隨機操作

Monkey 程式是由 Android 系統自帶,使用 Java 語言寫成。在Android文件系統中的存放路徑是: /system/framework/monkey.jar;

Monkey.jar程式是由一個名為「monkey」的Shell腳本來啟動執行,shell腳本在Android文件系統中 的存放路徑是:/system/bin/monkey;

執行命令

$ adb shell monkey [options] <event-count>

官方文檔://www.android-doc.com/tools/help/monkey.html   官網描述部分截圖如下 

 常用參數:

$ adb shell monkey -p packagename -s 12345 --throttle 500 -v -v  500
-p 包名-s 隨機生成器seed值--throttle 每個事件固定延遲毫秒-v -v 日誌級別 500:500次

其他參數和調試見官方文檔

 2.2 Monkey拓展Maxim

Maxim是基於 Android Monkey 二次開發,實現高速點擊的 Android Monkey 自動化工具 fastmonkey – 代號 Maxim,maxim介紹地址

testhome://testerhome.com/topics/11719

github://github.com/zhangzhao4444/Maxim

2.2.1 對比monkey優勢特性

a. 速度快 每秒10-15個Action事件

b. Android全平台兼容

c. 防跳出

d. 防休眠

e. 熔斷機制

f. 場景細粒度

g. 隨機自動輸入

h. 崩潰堆棧自動保存

2.2.2 運用使用

1、環境預備: 在github上下載framework.jar , monkey.jar 這兩個文件

  • 支援 Android 5,6,7,8,9,10真機及模擬器; Android 5不支援 dfs mode
  • 將 framework.jar , monkey.jar push 到手機上某個目錄中,建議/sdcard
adb push framework.jar /sdcard
adb push monkey.jar /sdcard

2、執行

cmd 命令 : 
adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.panda.videoliveplatform --uiautomatormix --running-minutes 60 -v -v tv.panda.test.monkey.Monkey: monkey入口類,不要修改 com.panda.videoliveplatform: 被測app包名,需要修改 --uiautomatormix: 遍歷策略

 

 註:Maxim實質還是monkey,所以很多monkey的基礎參數同樣適用

 

3、Jenkins自動化配置持續集成獲取崩潰日誌

通過伺服器遠程adb connect ip 連接到手機,將新包安裝到該手機,並執行monkey腳本後,將崩潰日誌上傳到workspace,生成構建後文檔,直接下載此文件即可獲得崩潰日誌

3.1 關於伺服器遠程adb connect ip連接到手機

先本地通過usb連接到手機,

運行 adb devices {查詢是否usb連接到該手機,請打開手機調試開關}當能夠獲取到devices id時

運行 adb tcpip 5555  {重置埠5555}  重置後 斷開usb數據線

運行 adb connect 10.180.xx.xx:5555 {通過wifi區域網網連接adb 連接該手機,必須手機的wifi和執行命令的電腦在同一區域網} 連接成功後下方會提示

運行 adb disconnect 10.180.xx.xx:5555 {斷開adb 遠程連接,方便伺服器連接,一個埠只能連接一個,伺服器同時連接需要輸入其他埠}

#連接設備
device_ip=10.180.xxx.xxx:5556

#檢查adb
echo -e "--->檢查adb"
which adb
adb kill-server
adb start-server

#wifi連接設備
echo -e "--->wifi連接設備"
adb connect ${device_ip}
adb devices | grep ${device_ip}
exitCode=$?
if [[ $exitCode -ne 0 ]]; then
    echo -e "設備${deivce_ip}連接失敗,請檢查設備無線調試狀態"
    echo -e "設備${deivce_ip}連接失敗,請檢查設備無線調試狀態" > ${WORKSPACE}/results.txt
    exit 1
fi

# 喚醒螢幕&解鎖螢幕
echo -e "--->喚醒螢幕&解鎖螢幕"
adb shell input keyevent 224
sleep 3

 

3.2 關於測試包的卸載安裝及初始化處理

1、最好選用提供android打包的那台機器,比較容易獲取到打出來的測試包,也可通過其他方式運行前去取最新的測試包

2、adb 卸載老app,並安裝新的app

3、可以直接使用現有的自動化腳本啟動app後的一系列數據準備工作:如登錄帳號,許可權確認,自定義協助進入目標模組

3.3 執行Maxim的monkey命令腳本

拿QQ app舉個例子

com.tencent.mobileqq

adb shell "CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.tencent.mobileqq --running-minutes 30 --throttle 200  --pct-uiautomatormix 80 --uiautomatormix -v -v  --output-directory /sdcard/max-output"
--output-directory /sdcard/max-output  這是崩潰日誌的輸出路徑,每次拿這個目錄即可,歷史的文件會自動變成max-output1,不用擔心重複還是歷史文件
adb pull /sdcard/max-output/ $WORKSPACE 將崩潰日誌上傳到工作空間

 

 3.4 上傳日誌

Jenkins配置

 

最後下次文件即可獲取到崩潰日誌

這樣每次想獲取崩潰日誌時,無論身邊有沒有測試手機都可以獲取到崩潰日誌,但必須有一部測試手機一直充電放在公司,最好是設置定時任務,隔一段時間就跑一次。

4、寫在最後

這篇部落格只是非常簡單的拋磚引玉把一系列串聯整合起來了,並沒有任何難點,各個環境詳細了解需查看官方文檔或其他資料,歡迎大家一起討論和交流一些新的idea

科技飛速發展的今天,公司的競爭壓力也會越來越大,app的穩定性尤為重要,出現崩潰的差評很是刺眼

除了跑monkey預防還需要靠周期性獲取線上崩潰靠前的日誌排名,將崩潰修復,如果那個迭代放鬆,就很有可能崩潰率上升明顯,影響kpi,這是一個漫長持續的過程,所以將腳本配置到Jenkins非常合拍。

 

最近團隊變化有點多,線上問題層出不窮,團隊的APP結合了Native、H5、RN、Flutter、mPaaS小程式,目前mPaaS快要成為主流,很多同學都在調整和轉崗,在變動階段需求少了不少,然後空下來有時間把東西整理一下了

最後,開發也好,運維也好,測試也好,一定要對品質有敬畏之心~~~