漫談:
從APP崩潰率標准,到Monkey介紹拓展Maxim,及Jenkins自動化配置,持續集成獲取崩潰日志
1、APP崩潰率標准
開發或測試app的同學,對於app崩潰肯定非常熟悉,頻繁的線上崩潰屬極度嚴重事故,肯定會給團隊和個人帶來KPI的低下,防患於未然就成了重中之重
1.1 常見的檢測崩潰手段
- 業務測試,普通測試,環境版本兼容性測試,開發調試中遇到
- 健壯性測試:【數據狀態異常、http請求狀態異常、網絡狀態異常(網絡波動)、大數據、特殊場景、等等】
- monkey測試
- 友盟等線上檢測工具監控錯誤率、錯誤日志
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快要成為主流,很多同學都在調整和轉崗,在變動階段需求少了不少,然后空下來有時間把東西整理一下了
最后,開發也好,運維也好,測試也好,一定要對質量有敬畏之心~~~