稳定性测试之Monkey简介(二)
好了,让大家久等了吧。这次给大家介绍MonkeyScript和其中应用的一个框架
MonkeyScript使用
总概
主要还是基于坐标点的操作,包含常用的:点击、长按、输入、等待等操作
- 通过坐标来实现;
- 可以针对某一个操作进行重复压力测试;
- 会以
.script
或者.mks
、.txt
作为后缀、标记他是一个MonkeyScript
语法
通过控制monkey发送消息的monkey头
adb shell monkey -f <MonkeyScript> <EventCount>
通过-f
参数即可用于指定一个MS脚本进行执行.
常用API
点击事件(DispatchPointer)
- 用于向一个指定的坐标位置,发送单个手势消息;
DispatchPointer ( downTime , eventTime , action , x , y , pressure , size , metaState , xPrecision , yPrecision , device , edgeFlags)
action
:事件按下还是抬起,0表示按下,1表示抬起;-
x,y
:表示当前事件触发的X轴和Y轴的坐标 - 两个 DispatchPointer 命令加在一起,分别表示 按下 和 抬起 ,这表示一次点击操作,其余的参数,统一设置为 0 即可。
按键消息(DispatchKey)
DispatchKey 消息的方法前面和 DispatchPointer 一样,所以同样也只需要关注 action、x、y 三个参数即可。
开启关闭软键盘(DispatchFIip)
DispatchFlip 命令用于打开或者关闭软键盘。
DispatchFlip (keyboardOpen)
- 其中的参数,true 表示打开,false 表示关闭。
打开指定的Activity(LaunchActivity)
- LaunchActivity 命令用于打开任意应用的一个页面,但是前提条件是打开的Activity 需要属性 android:exported 被设定为true,才可以通过 LaunchActivity 打开。
LaunchActivity ( pkg_name , act_name )
——分别表示打开的 App 的包名和打开的 Activity 的名称。
等待(UserWait)
- UserWait 命令用于让脚本中断执行一段时间
UserWait ( sleepTime )
单位是毫秒
输入字符串(DispatchString)
DispatchString( input_string )
运行Shell命令(RunCmd)
RunCmd (cmd)
cmd 就是需要执行的 shell 命令。
键盘事件(DispatchPress)
DispatchPress(keyName)
命令用于模拟敲击键盘;
案例
# Start of Script
type= user (指明类型)
count= 49 (说明执行次数,但是改成任何职都执行1次,monkey命令里面可以指定执行次数)
speed= 1.0 (命令执行种子,改动无影响,可以通过monkey命令指定)
start data >> (相当于一个入口,说明脚本从下面开始执行)
LaunchActivity(com.asn.nuonuo,com.asn.nuonuo.home.activity.SplashActivity2)
UserWait(100)
# 点击"我的“
DispatchPointer(10000,10000,0,1000,1800,0,0,0,0,0,0,0)
DispatchPointer(10000,10000,1,1000,1800,0,0,0,0,0,0,0)
UserWait(100)
# 点击"首页“
DispatchPointer(10000,10000,0,200,1800,0,0,0,0,0,0,0)
DispatchPointer(10000,10000,1,200,1800,0,0,0,0,0,0,0)
后续
- 编写好脚本,保存为
monkey.mks
文件,并通过adb push
将其上传到待测试的设备中.adb push monkey.mks /data/local/tmp/
- 然后通过monkey -f 执行此脚本,例如下面执行100次;
adb shell monkey -f /data/local/tmp/monkey.mks 100
应用框架
Maxium
https://github.com/zhangzhao4444/Maxim
Maxium是基于遍历规则的高性能Android Monkey,适用于真机/模拟器的APP 稳定性测试; 直接运行命令进行稳定性测试,错误日志会直接显示到命令行;当然可以通过命令输出到Log文件查看稳定结果; 框架的基本原理:基于源生Android Monkey做的二次开发定制;
安装
adb push framework.jar /sdcard
adb push monkey.jar /sdcard
DEMO
命令行:
adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin com.kubi.kucoin.debug -p com.kubi.kucoin.debug --uiautomatormix --running-minutes 60 -v -v
命令行展示:
从结果上可以看出我们这次我们运行稳定性测试一共持续了1分钟,遍历检查了3个功能页面分别是KuCoinMainActivity
,KuCoinMarketActivity
,KlineLandscapeActivity
,均没有崩溃和错误发生;同时框架支持其他的遍历方式和命令组合方式,可以根据自己的测试策略做不同的转换,这里就不一一介绍了。有兴趣的同学可以了解一下;
命令解读
--uiautomatordfs
—— 增加深度遍历算法(模式 DFS)--uiautomatormix
——直接使用底层accessibiltyserver
获取界面接口 解析各控件,随机选取一个控件执行touch操作;(模式Mix);默认70%控件解析随机点击,其余30%按原Monkey事件概率分布)--pct-uiautomatormix n
可自定义混合模式中控件解析事件概率accessibilityserver action
占比50%,其余各action分剩余的50%;accessibilityserver action
占比可配置--pct-uiautomatormix n;
--running-minutes 3
——总运行时长,运行3分钟--act-whitelist-file /sdcard/xxx.strings
定义白名单--act-blacklist-file /sdcard/xxx.strings
定义黑名单--uiautomatortroy
TROY模式(支持特殊事件、黑控件等) 配置max.xpath.selector troy
控件选择子来定制自有的控件选择优先级- Max.config :(高速截图 及 dump xml)
/sdcard/
将该文件push到/sdcard/max.config;--output-directory /sdcard/max1/
会自动保存到max1中.(每分钟100-200截图,故因大量截图对手机空间要求较高,仅为复现崩溃时建议开启截图) --imagepolling
开启崩溃回澍截图、关闭原截图逻辑