Fastbot稳定性测试

目录

一、引言

二、工具对比

1、Google Monkey

2、Fastbot 稳定性测试工具

三、Fastbot 介绍

3.1 FASTBOT 优点:

3.2 工具的使用:

3.3FABOT 特色功能

3.3.1.高速截图

3.3.2 自定义事件序列

3.3.3 屏蔽控件或区域 (自定义事件序列功能使用方法类似)

3.3.4 场景细粒度控制

3.3.5 自定义输入法(自动输入+屏蔽输入栏)

3.3.6 权限自动授予

四、Fastbot 使用

4.1 直接在命令行窗口输入命令

4.2 写入自动化脚本,定时流水线运行

五、Fastbot 总结


一、引言

        一个 App 安装在一台设备上,总是闪退、屏幕热、机身热、设备卡死甚至崩溃等现象,直接影响用户使用功能或者用户卸载 App,最终的结果是流失用户群体。项目迭代中,一般会对每个版本的App 进行稳定性测试,在正式发布前拦截 Crash。而稳定性测试方案中对于测试工具的选型方案是决定了发现 Crash 问题的可能性。
        下面介绍新一代稳定性测试利器 Fastbot 如何在项目中使用。

二、工具对比

1、Google Monkey

        首先来看业界用的较早也是我们经常听过的一款工具—— Monkey。这是 Android 官方提供的一个工具。谷歌原本设计这款工具是为了对 App 进行压力测试的。
        Monkey 在测试过程中的的操作具有很强的” 随机 ”性,恰巧可以被用来做自动遍历测试,但是 monkey 的缺点很明显,不支持业务行为定制,无法灵活的控制,经常会点到外部的 App 无法回归原测试 App;或者点击到注销和退出,造成无法继续后面的测试;

2、Fastbot 稳定性测试工具

        Fastbot 是字节跳动的 QualityLab 团队开发的一款融合了机器学习与强化学习的基于模型测试的工具。
        Fastbot 可以理解为 monkey 的升级版,为了增强覆盖,融合了多种机器学习、强化学习等相关的算法。执行速度很快 ,并显著提升了 测试覆盖度 。应用的效果也是非常不错的。

三、Fastbot 介绍

3.1 FASTBOT 优点:

Android 多 os 兼容: 同时兼容 Android5-12,兼容国内各厂商定制化的 Android 系统及原生 Android 系统。
事件快速注入: 继承原生 Monkey 的优势,快速点击,每秒最高可发送 12 个事件。
专家系统:不同业务线支持不同的个性化需求,业务深度定制化
智能化测试: 基于 model-based 边遍历边建模,利用强化学习等算法做高收益决策

3.2 工具的使用:

环境预备:
fastbot 所需依赖:jar.7z libs.7z
下载上述的依赖项,安装进入手机内,安装命令如下:
linux系统:
adb push *.jar /sdcard
adb push libs/* /data/local/tmp/
windows系统:
进入 jar 路径,执行: adb push fastbot-thirdpart.jar /sdcard
                                    adb push framework.jar /sdcard
                                    adb push monkeyq.jar /sdcard
进入 libs 路径,执行: adb push arm64-v8a /data/local/tmp/
                                     adb push armeabi-v7a /data/local/tmp/
                                     adb push x86 /data/local/tmp/
                                     adb push x86_64 /data/local/tmp/
运行 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
参数说明:
  1. -s 设备号  多个设备需要指定设备号(adb devices 可以查出),单独设备无需此 -s
  2. 参数
  3. -p 包名 遍历 app 的包名,例如浏览器包名为 com.heytap.browser (可以通过 adb shell ps 查出)
  4. --agent reuseq 遍历模式,无需更改
  5. --running-minutes 遍历时长(分钟) ,遍历时间:--running-minutes 20 即运行 20 分钟
  6. --throttle 事件频率,遍历事件频率,建议为 500-800
  7. 可选参数:
    • --bugreport 崩溃时保存 bug report log
    • --output-directory /sdcard/xxx log/crash 另存目录
在命令行页面中,运行上述命令,页面中出现以下场景,则代表启动成功

程序运行完后,会打印出崩溃 carsh,anr 以及 monkey 事件的数量,如果有崩溃,可以 cd 到手机/sdcard/crash-dump.log 文件中查看(需要注意的是 crash-dump.log 文件是每次增量写入的,所以需求每次执行前把 crash-dump.log 清空再执行),捕获的 Anr 同时也会写入 /sdcard/oom-traces.log 文件在执行完成后,会打印出来执行覆盖过的页面。

Activity 覆盖率统计:
  • 正常跑完 Fastbot 会在当前 shell 中打印 totalActivity(总 activity 列表), ExploredActivity(遍历到的 activity 列表)以及本次遍历的总覆盖率
  • 总覆盖率计算公式:coverage = testedActivity / totalActivities * 100

3.3FABOT 特色功能

3.3.1.高速截图

新增一个文件名为:max.config 在文件中写入
max.takeScreenshot = true
max.takeScreenshotForEveryStep = true
max.saveGUITreeToXmlEveryStep =true
然后将 max.config 文件 push 到手机端/sdcard,--throttle 参数要 >200 才会截图
adb push max.config /sdcard
运行过程中,会对运行过程进行高速截图,结果保存到 /sdcard/fastbot-包名 -running-minutes-运行时间的文件夹中,谨慎使用该功能,运行时间过长,会占用手机大量内存。

3.3.2 自定义事件序列

手动配置 Activity 的路径(UI 自动化用例)
适用需求: 场景覆盖不全,通过 人工配置到达 Fastbot 遍历不到的场景 , 或 自定义操作 序列 (例如前置登录等),也可用于 定向探索某个页面
1、在 pc 端新建 max.xpath.actions 文件( 文件名称不可更改
2、编写事件序列配置(case):
  • prob:发生概率,"prob":1,代表发生概率为 100%
  • activity:所属场景,详见:三.获取当前页面所属的 Activity (输入命令行:adb shell dumpsys activity top | grep ACTIVITY,dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p' ,adb shell dumpsys window | grep mCurrentFocus
  • times:重复次数,默认为 1 即可
  • actions:具体步骤的执行类型
  • throttle:action 间隔事件(ms)
  • action 支持以下类型:(必须大写 )
    • CLICK:点击,想要输入内容在 action 下补充 text,如果有 text 则执行文本输入
    • LONG_CLICK:长按
    • BACK:返回
    • SCROLL_TOP_DOWN:从上向下滚动
    • SCROLL_BOTTOM_UP:从下向上滑动
    • SCROLL_LEFT_RIGHT:从左向右滑动
    • SCROLL_RIGHT_LEFT:从右向左滑动
3、定位当前页面的控件

        使用 Android SDK 自带的页面属性检查工具 UiAutomatorViewer(需提前配置好 Android SDK)

# 点击浏览器我的tab-我的小说
[
{
"prob":1,
"activity":"com.android.browser.BrowserActivity",
"times":100000,
"actions":[
{
"xpath":"//*[@text='我的']",
"action":"CLICK",
"throttle":2000
},
{
"xpath":"//*[@text='我的小说']",
"action":"CLICK",
"throttle":2000 }
]
}
]
编写好文件后,可在 json.cn 中检查无误后,推送到手机端中,adb push max.xpath.actions /sdcard

3.3.3 屏蔽控件或区域 (自定义事件序列功能使用方法类似)

        手动配置需要屏蔽的控件或区域
        适用需求:测试过程中“半路”中途退出登录,屏蔽退出登录按钮
1. 黑控件、黑区域
  • 在 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 目录下
        adb push max.widget.black /sdcard
2. 树剪枝屏蔽
  • 在 PC 端新建 max.tree.pruning 文件(名称固定为:max.tree.pruning),文件内容配置格式如下:匹配条件 activity,当 activity 与 currentactivity 一致时执行如下匹配
  • 剪枝方式:
    • 配置 xpath:查找匹配的控件,改变控件属性,从而使控件屏蔽
    • 将 max.tree.pruning 文件 push 到手机端的 sdcard 目录下
    • adb push max.tree.pruning /sdcard

3.3.4 场景细粒度控制

手动配置  黑、白名单配置
适用需求: 单独覆盖几个场景或屏蔽一些不必要场景
1.Activity 白名单配置 (只覆盖白名单内的 activity)
        在 PC 端新建 awl.strings 文件(名称固定为:awl.strings )在文件中写入 Activity
的名称;将 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.Activity 黑名单配置 (黑名单内的 activity 不覆盖)
        在 PC 端新建 abl.strings 文件(名称固定为:abl.strings )在文件中输入 Activity 的名称,同白名单方法一致将 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 上看就是点了跳转没效果。

3.3.5 自定义输入法(自动输入+屏蔽输入栏)

ADBKeyBoard(点我下载)在输入栏自动输入内容,屏蔽 UI 输入法
适用需求: 遇到搜索栏乱输入,想要输入指定字符
环境准备: 下载 ADBKeyBoard,并在手机端中设置为默认输入法 ADBKeyBoard 下载地址 , 生效后 , 当遇到输入栏 ADBKeyBoard 不会弹起 ui 输入栏 ,会显示 ADB Keyboard{ON} tarbar
1. 随机输入字符串:
        配置 max.config 中 max.randomPickFromStringList = false
        在 pc 端新建 max.config 文件(文件名称不可更改)
        输入 max.randomPickFromStringList = false
        通过以下命令将 max.config 文件 push 到手机端,adb push max.config /sdcard
2. 从文件中随机读取字符串输入
        在 pc 端新建 max.strings 文件(文件名称不可更改)
        输入想要输入的字符串,字符串结束要换行
        通过以下命令将文件 push 到手机端,adb push max.strings /sdcard,配置 max.config 中         max.randomPickFromStringList = true

3.3.6 权限自动授予

        app 的权限弹窗处理,默认启动 app 前会自动授予 app 所需的所有权限,但如果想测试 app 运⾏过程中的动态权限弹窗, 在 max.config 配置: max.grantAllPermission = false,此时 Fastbot 启动后不会⾃动授予各种权限;

四、Fastbot 使用

4.1 直接在命令行窗口输入命令

        通过填写相应参数配置,对某个 app 或某个 app 的具体页面进行探索,运行结果现在命令行窗口中显示,对应的 CRASH 与 ANR 结果保存在手机日志中
        适用场景:测试频次不高的场景,快速定向探索等
直接在命令行窗口运行 fastbot :
adb -s 设备号 shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar:/sdcard/fastbo
t-thirdpart.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p 包名 --agent reuseq --running-minutes 遍历时长 --throttle 事件频率 -v -v

4.2 写入自动化脚本,定时流水线运行

        通过编写自动化脚本,将 fastbot 每天定时运行在多台设备中,通过Jenkins加入定时任务
        适用场景:app 稳定性测试

五、Fastbot 总结

        相对于现有都 app 遍历工具,Fastbot 的特点主要在于:使用简单,可快速上手操作,其探索过程中其对探索应用的深度和范围都比现有的 monkey 要更好,同时也可以满足对特定的业务进行定向测试的需求。
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值