基于monkey的二次开发,约束monkey的行为,比monkey更智能。
写在开始
monkey测试的随机性概率过大,导致其效率并不能达到预期。有时可能遍历了很久,依旧与最有可能发生问题的部分擦肩而过。
Fastbot_Android介绍
基于model-based testing 结合机器学习、强化学习的APP 稳定性测试⼯具
优势
1.模拟机和真机均可以
2.继承原⽣Monkey的优势,快速点击,每秒最⾼可发送12个事件
3.可以根据自己的不同需求去定制,约束其行为。
4.基于model-based 边遍历边建模,利⽤强化学习等算法做⾼收益决策
算法原理
1.APP的UI相当于一个特别大的层级树。每一个页面就是一个Activity,每个Activity包含很多布局,布局下又存在很多控件,之间都存在父级关系,全部展开就是一个有很多条分支的大树,走每一个分支都有可能产生不同的结果,但是要遍历全部树可能会花费许多时间,所以需要这种边遍历边学习的算法帮助我们更快的找出最有可能发生问题的那条分支。
2.在app遍历过程边遍历边⾃学习,学习app ui transition model同时结合强化学习算法决策出最优路径,提⾼单位时间遍历效率,通常⽤Activity覆盖率或代码覆盖率来衡量效率。
一行adb命令
adb shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p tv.danmaku.bili --agent robot --act-blacklist-file /sdcard/abl.strings --running-minutes 1 --throttle 800 -v -v -v --output-directory /sdcard/picture-fastbot&adb pull /sdcard/picture-fastbot F:\picture-fastbot
命令解析:
-p 包名 # 遍历app的包名,-p+包名
--agent robot # 遍历模式,⽆需更改
--running-minutes 遍历时⻓(分钟) # 遍历时间
--throttle 事件频率 # 遍历事件频率,建议为500-800,--throttle参数要>200才会截图
(可选参数)
--bugreport #崩溃时保存bug report log
--output-directory /sdcard/xxx #log\crash 另存⽬录
约束条件
预置条件:
1.屏蔽UI输⼊法
2.权限自动授予
3.黑名单配置(场景细粒度控制)⽩名单和⿊名单不能同时设置,按照⾮⽩即⿊的原则,即设置了⽩名单则⽩名单外的都为⿊名单。
4.屏蔽退出登录按钮
5.屏蔽控件或区域
6.树剪枝屏蔽
自定义事件序列:
在max.xpath.actions⽂件中写入json格式配置实现对fastbot的约束性操作
prob:发⽣概率,"prob":1,代表发⽣概率为100%
activity:所属场景,详⻅:三.获取当前⻚⾯所属的Activity
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:从右向左滑动