漫談:從APP崩潰率標準,到Monkey介紹擴充Maxim,及Jenkins自動化配置,持續整合獲取崩潰monkey日誌

木秀發表於2020-11-06

漫談:
從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>

官方文件:http://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:https://testerhome.com/topics/11719

github:https://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快要成為主流,很多同學都在調整和轉崗,在變動階段需求少了不少,然後空下來有時間把東西整理一下了

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

 

相關文章