Fastbot:行進中的智能 Monkey
背景:
Fastbot是字節跳動基於Monkey進行二次開發的一款工具,相對與Monkey來說會更加智能。
原理和源文件參考:
傳送:https://juejin.cn/post/6877360102123241480#heading-0
https://github.com/bytedance/Fastbot_Android
隨機方法:
使用方法:
1.模擬器或者真機連接電腦,用adb devices檢測是否連接成功;
下面是基於真機(小米)模擬
C:\Users\Administrator>adb devices List of devices attached 0a1e0f3d5 device
注意:手機需要開啟開發者模式和usb授權;手機連接為文件夾模式
2.把兩個附件: framework.jar , monkeyq.jar push 到手機上某個目錄中,建議/sdcard
adb push framework.jar /sdcard
adb push monkeyq.jar /sdcard
備注:真機可能會有權限問題,提示無權限;
解決:使用adb命令:adb shell ls /sdcard 打印所有文件,發現這個文件夾就是與電腦傳送默認文件夾;
可以通過手機連接電腦,設置為:文件模式,右鍵兩個附件選擇發送到手機,就默認到sdcard這目錄
不知道adb 命令可以參考adb日常使用方法 :https://www.cnblogs.com/shoebill/p/14430554.html
C:\Users\Administrator>adb shell ls /sdcard
3. 運行隨機腳本命令:
adb -s 設備號 shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p 包名 --agent robot --running-minutes 遍歷時長 --throttle 事件頻率 -v -v
實例
adb shell CLASSPATH=/data/monkeyq.jar:/data/framework.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p com.test.today --agent robot --running-minutes 10 --throttle 500 -v -v
包需要特別打才能運行執行正常;
建議:執行命令前,先進行登錄,隨機的場景遇到需要登錄的功能,基本跳不過去,登錄后可覆蓋的功能點能加大,相對Monkey隨機覆蓋,此工具覆蓋更大;
自定義腳本:
腳本的設計也是基於xpath,結合每個activity,定位到當前的xpath,最后結果發現並不能按照自定義的腳本執行,更加偏向於隨機跑,
把自定義命名為:並放到sdcard 目錄,執行命令:
adb shell CLASSPATH=/data/monkeyq.jar:/data/framework.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p com.test.today --agent robot -v 1#1代表執行次數
分析:
通過打印每個頁面的activity和元素發現,發現有些頁面的activity不一樣的,還是id,name等元素的clickable = false,
懷疑以上兩個原因導致自定義腳本不能如實跑,例如:activity跟腳本不一致,xpath的元素是不可點擊導致,
反思:如果是元素不可點擊,隨機腳本應該也不能正常跑,這里有點矛盾,
有哪位大神有研究,並能正常執行,請指點一下迷津,跪謝!!!
教程的列子:

實際:

遇到查找activity 與 定位元素問題,可以使用下面命令:
#找activity的方法: #能找到包名和activities,但activities可能是廣告的 aapt dump badging D:news.apk #在啟動app過程 執行下面命令能提過廣告的activities #例如有啟動頁的情況下,需要那打開a跳過該廣告頁,可以在跳過廣告頁,執行下面的命令即可 adb shell dumpsys window w | findstr \/ | findstr name= #下載當前頁面的定位和activity信息 adb shell uiautomator dump
總結:
通過fastbot 結合手機的性能監控工具,可以運用於穩健性測試與偶現的閃退問題(配合日志捕捉)的發現;
