Monkey测试常用来做Android应用健壮性测试的一种手段。
通过它可模拟向设备/模拟器随机的发送一系列的伪随机指令,以此来检验测试应用/系统的稳定性
常见操作:
基础参数
-s 种子序列,可获得指定随机序列
-p 指定事件的包名
-v日志级别
--throttle事件间隔
事件类型
--pct-touch触摸事件,手指按下并抬起的手势
--pct-motion滑动事件,在某个位置手指按下,滑动一段距离后再抬起
--pct-pinchzoom放缩事件
--pct-trackball轨迹球事件,一系列随机移动和单击事件
--pct-syskeys系统导航事件,HOME、BACK、拨号及音量键
--pct-nav基本导航事件,输入设备的上下左右
--pct-majornav主要导航事件(软键盘),兼容中间键、返回键、菜单按键
--pct-appswitch启动Activity
--pct-anyevent不常用事件
调试选项
--ignore-crashes忽略崩溃和异常
--igonre-timeouts忽略超时事件
优点:简单易操作
缺点:不能定向执行某种固定操作,跟用户使用习惯相差较远
使用方法:adb shell monkey -p 包名 随机操作 次数
Monkey script它是一组可以被Monkey识别的命令集合,可以通过它完成重复的固定操作。
常见操作如下:
- DispatchTrackball轨迹球事件
- DispatchPointer点击事件
- DispatchString输入字符串事件
- LaunchActivity启动应用
- UserWait等待事件
- DispatchPress按下键值
优点:可重复完成固定操作
缺点:不能进行截图操作,脚本不可调试
使用方法:adb shell monkey -f 文件 次数
简单小实例:
#启动activity
LaunchActivity()
UserWait()
#模拟点击事件
DispatchPointer()
DispatchPointer()
UserWait()
#输入字符串
DispatchString()
UserWait()
#模拟按下键
DispatchPress()
UserWait()
DispatchPointer()
DispatchPointer()
UserWait()
常见问题:
- 运行时需要先将Monkey script文件导入到连接设备中,因为Monkey script是一组被monkey识别的操作,monkey是在手机系统里。
- LaunchActivity()启动应用时,前提是应用允许被外界调用,可在设置文件AndroidMainfest.xml中添加
android:exported="true"
Monkeyrunnner提供了3大API,通过API可以完成模拟事件及截图操作
可用来进行多设备测试,功能测试,回归测试,3大API如下:
MonkeyRunner:连接设备或模拟器
MonkeyDevice:提供安装,卸载应用,发送模拟事件
MonkeyImage:完成图像保存,及对比操作
优点:
缺点:
使用方法:monkeyrunner 文件名
常见API:
- MonkeyRunner API -alert
void alert(string message,string tittle,string okTittle)- MonkeyRunner API-waitForConnection
等待设备连接,有多个device id,需要指明具体哪个设备
waitForConnection(float timeout,string deviceid)
- MonkeyDevice API -drag拖动
drag(tuple start,tuple end,float duration,integer steps)
start 起点位置
end 终点位置
duration 手势持续时间
steps 插值点的步数,默认10- MonkeyDevice API -press按键
press(string keycode,dictionary type)
keycode值,Down、UP、DOWN_AND_UP- MonkeyDevice API -startActivity启动应用
startActivity(package+‘/’+activity)- MonkeyDevice API -touch点击
touch(integer X,integer y,intefer type)- MonkeyDevice API -type输入
type(string message)- MonkeyDevice API -takeSnapshot截屏
MonkeyImage takeSnapshot()
- MonkeyImage API -sameas图像对比
boolean sameas(MonkeyImage other,flost percent)- MonkeyImage API -writetoFile保存图像图片
void writeToFIle(String path,string format)
说明:
monkeyrunner在%Android SDK%/tools下,故运行的时候需要先将打开其所在位置或者将其路径设置为环境变量
Monkey与Monkeyrunner区别
Monkey:在adb shell中,生成用户或系统的伪随机事件
MonkeyRunner:通过API定义特定命令和事件控制设备