背景
做这个主要为了发版之前提前发现崩溃,风险前置。适合客户端很重的业务。
优点:你不改动也能用, 维护成本不高。
缺点:容易进入H5页面无法返回,效果有限。
备注:我这边接手别人维护,公司降本把测开工作给到我这边了。
一.Fasbot本地搭建环境
1.定制化修改点:
-
test目录放了相关的各个包定向配置文件(具体查看 push定向配置部分)。需要针对不同的进行定制,对应包的配置值在运行服务器上存放,没有添加git代码中
-
相关的jar需要人工手动的push到 手机的/sdcard 目录中, test目录下的相关配置文件java程序每次安装新包的时候,会重新push到手机/sdcard 目录中
-
fastbot的程序启动是在java 程序中进行启动的。
fastbot源代码地址如下:
https://github.com/bytedance/Fastbot_Android
https://github.com/bytedance/Fastbot_iOS
2.Android手机运行
Push 程序 -手工push
将 framework.jar fastbot-thirdpart.jar monkeyq.jar
push 到 /sdcard (官方建议放到该路目下),push libs/*
to /data/local/tmp/
(实际操作控制都是通过这些 java 程序运行)
java程序中有检测,如果/sdcard 目录中有对应的*.jar 那么就跳过,如果没有会去push对应的*.jar到/sdcard 文件夹。
adb push *.jar /sdcard
adb push libs/* /data/local/tmp/
Push 定向配置
java 程序每次都会强制push Fastbot_Android/test目录到对应的手机中
2.1【有使用】添加限定词,用来提升模型
Mac 本地需要安装aapt的环境变量
➜ build-tools vim ~/.bash_profile
➜ build-tools source ~/.bash_profile
➜ build-tools aapt -v
APPT_HOME=/Users/Library/Android/sdk/build-tools/31.0.0
export APPT_HOME
export PATH=$PATH:$APPT_HOME
然后根据对应的安装包执行命令,将生成的max.valid.strings 文件push到手机的/sdcard 中( 拉取的项目里有 max.valid.strings 文件,在test目录下)
aapt dump --values strings [install_package_path.apk] > max.valid.strings
eg:
aapt dump --values strings "/Users/Downloads/Web_4.6.36(46361011).apk" > max.valid.strings
adb push max.valid.strings /sdcard
注: 每个新包首次接入fastbot的时,都需要生成一次max.valid.strings文件、
2.2【暂未使用】白名单添加
-
在PC端新建
awl.strings
文件(名称固定为:awl.strings)(拉取的项目里有 awl.strings 文件,在test目录下),填写完后即可,注意不是填写白名单就只跑白名单页面,因为测试会建立模型,模型完善后会尽可能对这几个页面进行测试 -
在文件中写入Activity的名称,例如
com.app.live.activity.VideoListActivity com.app.letter.view.chat.LetterChatAct com.app.live.activity.UpLiveActivity com.app.live.boost.view.BoostListActivity
-
将
awl.strings
文件push到手机端的sdcard目录下, 目录必须为sdcard
adb push awl.strings /sdcard
-
运行命令时添加以下参数:
--act-whitelist-file /sdcard/awl.strings
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 --act-whitelist-file /sdcard/awl.strings --running-minutes 遍历时长 --throttle 事件频率 -v -v
2.3【暂未使用】黑名单添加
-
在PC端新建
abl.strings
文件(名称固定为:abl.strings)(拉取的项目里有 abl.strings 文件,在test目录下) -
在文件中输入Activity的名称,同白名单方法一致
com.app.live.activity.VideoListActivity com.app.letter.view.chat.LetterChatAct
-
将
abl.strings
文件push到手机端的sdcard目录下, 目录必须为sdcard
adb push abl.strings /sdcard
-
运行命令时添加以下参数:
--act-blacklist-file /sdcard/abl.strings
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 --act-blacklist-file /sdcard/abl.strings --running-minutes 遍历时长 --throttle 事件频率 -v -v
注意: 白名单和黑名单不能同时设置,按照非白即黑的原则,即设置了白名单则白名单外的都为黑名单。通过hook 可以监控activity 启动和切换,如果启动的是黑名单中的activity,就拒绝启动该activity,从ui上看就是点了跳转没效果
2.4【有使用】添加屏蔽控件
手动配置需要屏蔽的控件或区域
适用需求: 测试过程中“半路”中途退出登录,屏蔽退出登录按钮
-
在PC端新建
max.widget.black
文件(名称固定为:max.widget.black),文件内容配置格式如下: -
匹配条件activity:当activity与currentactivity一致时执行如下匹配
-
屏蔽控件或区域共有三种方式:
-
配置bounds:屏蔽某个区域,在该区域内的控件或坐标不会被点击,bounds 为 0.0~1.0 之间的一个百分比值。
-
配置xpath:查找匹配的控件,屏蔽点击该控件。
-
配置xpath+bounds:查找匹配的控件,当控件存在时屏蔽指定的区域,bounds 为 0.0~1.0 之间的一个百分比值。
-
-
将max.widget.black文件push到手机端的sdcard目录下,目录必须为sdcard。
-
adb push max.widget.black /sdcard
-
剪枝屏蔽
-
在PC端新建
max.tree.pruning
文件(名称固定为:max.tree.pruning),文件内容配置格式如下: -
匹配条件activity:当activity与currentactivity一致时执行如下匹配
-
剪枝方式:
-
配置xpath:查找匹配的控件,改变控件属性,从而使控件屏蔽
-
-
将
max.tree.pruning
文件push到手机端的sdcard目录下, /sdcard # 目录必须为sdcard
-
adb push max.tree.pruning /sdcard