Fastbot_Android介绍
基于model-based testing 结合机器学习、强化学习的APP 稳定性测试工具。
详情请访问:Fastbot:行进中的智能 Monkey - 掘金
优势:
- Android多os兼容:
同时兼容Android5-12,兼容国内各厂商定制化的Android系统及原生Android系统
- 事件快速注入:
继承原生Monkey的优势,快速点击,每秒最高可发送12个事件
- 专家系统:
不同业务线支持不同的个性化需求,业务深度定制化
- 智能化测试:
基于model-based 边遍历边建模,利用强化学习等算法做高收益决策
- 跨平台:
支持非标准化控件,YOLOv3、ocr、cv分割等UI图像识别能力
2021.09 更新
- 模型复用
支持模型复用,模型文件会自动存储在 /sdcard/fastbot_[包名].fbm,启动 fastbot 时如果此文件存在则默认加载模型,运行过程中每隔十分钟会覆盖存储一次,用户可根据需求删除或拷贝此文件
2021.11 更新
- 支持 android 12
- 添加部分 fuzz 和 mutation能力
本地接入
环境预备
- 支持 Android 5,6,7,8,9,10,11,12 真机及模拟器
- 将framework.jar fastbot-thirdpart.jar monkeyq.jar push 到手机上某个目录中,建议/sdcard,push
libs/* 到/data/local/tmp/
adb push *.jar /sdcard adb push libs/* /data/local/tmp/
shell运行
- 添加限定词,可提升模型,aapt2 可根据本机环境替换为 aapt,如果提示不可用,需要添加到 PATH 环境变量中, 示例具体路径为 ${ANDROID_HOME}/build-tools/28.0.2/aapt2
aapt2 dump --values strings [install_package_path.apk] > max.valid.strings adb push max.valid.strings /sdcard
启动 Fastbot
adb -s 设备号 shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar:/sdcard/fastbot-thirdpart.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p 包名 --agent reuseq --running-minutes 遍历时长 --throttle 事件频率 -v -v
参数说明
- -s 设备号
多个设备需要指定设备号,单独设备无需此-s参数
- -p 包名
遍历app的包名,-p+包名
- --agent reuseq
遍历模式,无需更改
- --running-minutes 遍历时长(分钟) # 遍历时间:--running-minutes 时间
- --throttle 事件频率 遍历事件频率,建议为500-800
- 可选参数
-
- --bugreport 崩溃时保存bug report log
- --output-directory /sdcard/xxx log/crash 另存目录
以ApiDemos应用(io.appium.android.apis)为例:
adb -s 8BF4C20825006913 shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar:/sdcard/fastbot-thirdpart.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p io.appium.android.apis --agent reuseq --running-minutes 3 --throttle 500 -v -v --bugreport --output-directory /sdcard/crash-dump.log
结果说明
- Crash、ANR 捕获
-
- 捕获到Java Crash、ANR、Nativie Crash会以追加方式写入/sdcard/crash-dump.log文件
- 捕获的Anr 同时也会写入/sdcard/oom-traces.log 文件
- Activity覆盖率统计
-
- 正常跑完Fastbot会在当前shell中打印totalActivity(总activity列表),ExploredActivity(遍历到的activity列表)以及本次遍历的总覆盖率
- 总覆盖率计算公式: coverage = testedActivity / totalActivities * 100
注意事项
totalActivities:通过framework接口 PackageManager.getPackageInfo 获取,这包含app中所有的Activity,其中也包含了很多废弃、不可见、不可达等Activity。
【常见问题】启动fastbot提示ava.lang.UnsatisfiedLinkError: dlopen failed: library "/data/local/tmp/arm64-v8a/libfastbot_native.so" not found。
【解决方法】未将libs下的文件push到手机/data/local/tmp目录下。
用adb push libs\arm64-v8a libs\armeabi-v7a libs\x86 libs\x86_64 /data/local/tmp/推送到对应目录下,再次启动fastbot就正常了。
以上来自:Fastbot_Android/handbook-cn.md at main · bytedance/Fastbot_Android · GitHub