(一)Fastbot简介
Fastbot是一种自动化测试应用的工具,在指定的APP上自动进行大量的点击、滑动等事件序列,进行APP的稳定性、兼容性的测试。与Monkey相比,Fastbot能够基于AI和UI层次生成更有针对性和现实意义的测试事件序列,更加真实高效的模拟用户交互流程。
本文是Fastbot-Android在windows系统中的安装教程,已在windows系统中安装了安卓模拟器和adb,adb的安装教程可见:windows下载安装adb(极其简单)_adb工具下载windows-CSDN博客
(注:Fastbot在linux虚拟机中的安装会很麻烦,建议考虑安装在windows系统中)
(二)安装git
安装Fastbot工具首先需要安装git工具,如果已安装过的可以跳过本步骤
查询是否安装git:打开windows命令行,输入命令(查询git版本号)
git --version
如果有版本回复则说明已安装了git,如果显示git命令错误则说明尚未安装。
1.官网下载git安装包
访问官网 https://git-scm.com/
在浏览器中按顺序访问,最后点击弹窗下载。
2.安装git
下载后双击下载的exe文件安装,选择安装路径,默认安装选项,也可以根据需求自定义设置,最终完成安装。
利用windows的命令行查询git版本,可以看到查询结果为git version 2.xx.x
git --version
或者在任意文件夹中右击,打开git bash,可以正常打开,在git bash中也可以正常查询git版本,则说明git安装成功。
(三)安装Fastbot
1.克隆Fastbot项目
Git安装成功后,在项目文件夹中右击(克隆到本地的项目会保存在该文件夹中),打开git bash,利用git命令克隆Fastbot_Android项目到本地。
git clone https://github.com/bytedance/Fastbot_Android.git
2.push Fastbot文件到安卓模拟器
打开windows命令行,首先查看安卓模拟器是否正常连接:
adb devices
如果显示offline则说明设备处于未连接状态,显示device则说明正常连接。
如果显示未连接,则可以重启模拟器或者再执行一遍devices命令。
确认安卓模拟器正常连接以后,打开克隆到本地的Fastbot项目文件夹,右击使用命令行终端(注意不是git bash)打开,将Fastbot的文件push到安卓模拟器的系统文件夹中(分别执行以下命令):
adb push fastbot-thirdpart.jar /data/local/tmp/
adb push framework.jar /data/local/tmp/
adb push monkeyq.jar /data/local/tmp/
adb push libs/. /data/local/tmp/
其中/data/local/tmp/是安卓模拟器中保存该Fastbot项目的路径,可以通过安卓模拟器中的文件管理器查看,并选择合适的路径。
执行完上述命令后,利用ls命令以确定文件已经正确的推送到模拟器中:
adb shell ls /data/local/tmp/
终端中的执行结果如下所示:
> adb push fastbot-thirdpart.jar /data/local/tmp/
fastbot-thirdpart.jar: 1 file pushed, 0 skipped. 185.2 MB/s (85664 bytes in 0.000s)
> adb push framework.jar /data/local/tmp/
framework.jar: 1 file pushed, 0 skipped. 744.2 MB/s (1149240 bytes in 0.001s)
> adb push monkeyq.jar /data/local/tmp/
monkeyq.jar: 1 file pushed, 0 skipped. 196.7 MB/s (97209 bytes in 0.000s)
> adb push libs/. /data/local/tmp/
libs/.\: 4 files pushed, 0 skipped. 31.3 MB/s (7496356 bytes in 0.228s)
> adb shell ls /data/local/tmp/
fastbot-thirdpart.jar
framework.jar
monkeyq.jar
3.启动Fastbot
Fastbot工具需要利用APP的包名来自动打开安卓模拟器中的APP,并且随后进行自动点击等交互操作,因此需要先知道指定打开APP对应的包名是什么。
查看安卓模拟器中安装的APP对应包名的方法:
(1)使用安卓工具AAPT2提取测试软件的包名(比较麻烦,不建议)
(2)使用adb命令,列出安卓模拟器中安装的所有应用的包名,根据包名中的部分名称进行区分(一般包名的格式为com.xxx.xxx,例如微博com.sina.weibo,可以通过包名直接猜出对应的APP名称。同时包名形如com.android.xxx的一般是系统软件,不在软件检测范围内)
adb shell pm list packages
(3)直接百度或询问大模型需要测试的app对应的包名,可以直接得到结果(是否正确可以结合方法(2)进行验证)
博主验证过的一些APP的包名:
APP的包名 | APP名称 |
com.dragon.read | 番茄小说 |
com.tencent.mm | 微信 |
com.zhihu.android | 知乎 |
com.sina.weibo | 微博 |
com.taobao.taobao | 淘宝 |
tv.danmaku.bili | 哔哩哔哩 |
com.ss.android.ugc.aweme | 抖音 |
启动Fastbot需要的命令(2条):
adb shell CLASSPATH=/data/local/tmp/monkeyq.jar:/data/local/tmp/framework.jar:/data/local/tmp/fastbot-thirdpart.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p com.dragon.read --agent reuseq --running-minutes 10 --throttle 500 -v -v --output-directory /sdcard/fastbot_results
adb pull /sdcard/fastbot_results D:\aaaafiles\work\Fastbot_res
其中/data/local/tmp/是push步骤中将windows中文件推送到模拟器中的文件位置
-p:后面接着的com.dragon.read是APP的包名,根据需求进行更改
--running-minutes :运行时间,后面跟着自动点击的检测时间,以分钟为单位
--throttle :事件(点击、滑动等)之间的时间间隔,以毫秒为单位
--output-directory:fastbot运行结果会输出一个文件max.activity.statistics.log,后面跟着的地址是该文件的保存地址,可以在安卓模拟器的文件管理器中找一个合适的位置进行保存
pull命令:将安卓模拟器中保存的log文件拉到windows系统中,前者为fastbot运行结果保存位置,后者为windows项目文件夹中的合适位置,执行后会将log文件复制到windows中。
4.执行结果
可以看到执行完启动步骤后,有下列执行成果:
(1)控制台不断生成一些执行结果,其中包含标识符、时间戳、序号和activity的名称:
执行结束后还记录了最终执行结果,包括检测到的activity信息、error信息等:
(2)安卓模拟器中生成了一个log文件
(3)windows的项目文件夹中保存了相同的log文件
生成的max.activity.statistics.log中,保存了待测试APP中一些应用活动的名称(例如com.dragon.read.component.biz.impl.SearchActivity搜索界面、com.dragon.read.component. biz.impl.mine.LoginActivity登陆界面等),该文件中的字段主要包括TestedActivity(已测试的活动)和TotalActivity(全部活动)两部分。
Tested:这个字段记录了 Fastbot 在运行测试过程中访问过的 Android 应用活动(Activity)。这些活动代表了应用中的各个界面或功能模块,属于应用程序中不同的用户界面,Fastbot 在测试时遍历了这些界面,同时可能在执行事件过程中可能进行了一些交互。(博主眼睁睁的看着ta点开洋柿子小说然后举报了一条评论、、、,没来得及拦下来,对不起了兄弟TAT)
Total:这个字段记录了应用程序中的所有活动(Activity),包括那些未被 Fastbot 测试访问的活动。这些 Activity 可能是应用集成的第三方功能,尚未被 Fastbot 测试到(比如由于登陆或开通VIP需要输入个人信息,但是Fastbot不具备输入正确个人信息的能力,因此这些功能相关的界面Fastbot无法探索),但它们也是应用的一部分。
通过log文件可以观察到:Fastbot 测试覆盖了哪些界面;应用程序中包含哪些功能模块(即未测试到的 Activity 也被记录了)