Mokey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。当应用程序崩溃(CRUSH)或产生了程序不响应(ANR)的错误时,Monkey将会停止并报错。Monkey 测试的对象仅为应用程序包,测试使用的事件流数据流是随机的,不能进行自定义,但可对测试对象进行事件类型,数量,频率进行设置。
Monkey源码
adb shell monkey [options]
options:配置monkey的设置,例如:指定启动哪个包,不指定将会随机启动所有程序。
event-count :让monkey发送事件的次数。
例如:启动指定的应用程 序,并向其发送100个伪随机事件
adb shell monkey -p your.package.name -vvv 100 > monkeytest.txt
-v 是信息级别即日志的详细程度,3个v就是输出等级1至3的所有事件
注:获取app包名:
adb shell 进入monkey命令行
logcat | grep START 再点击要测试的app,然后查看cmp= xx.xx.xx/可得到包名
通过ls data/data 可查看Android 设备的所有应用包
关于如何获取APP的包名和启动页Activity 各种方法请参考这篇文章
后面跟每次执行事件间隔时间(毫秒)
seed的作用,就是建立一个flag,确保每次monkey 命令运行所跑的事件顺序一致,这样若出现问题可以复现。
Monkey的随机操作是基于一个seed 值产生,每一个seed值都会产生唯一的操作序列,只要每次seed值一样,
操作的随机序列也一样。
测试1:adb shell monkey -p com.android.calculator2 -s 100 20
测试2:adb shell monkey -p com.android.calculator2 -s 100 20
两次操作的结果一样。
monkey 设定触摸事件百分比
adb shell monkey --pct-touch
0代表touch事件。
不指定点击事件的百分比
adb shell monkey --pct-touch
adb shell monkey --ignore-crashes
adb shell monkey --ignore-timeouts
adb shell monkey --ignore-security-exceptions
通过脚本来实现可重复的固定事件操作
adb shell monkey -f
LaunchActivity(pkg_name, cl_name): 启动应用的Activity。参数:包名和启动的Activity,Activity名前用. 连接包名。
DispatchPointer(downtime,eventTime,action,x,y,xpressure,size,metastate,xPrecision,yPrecision,device,edgeFilags) 点击事件。主要是action(0按下,1弹起),x,y (点击控件的坐标)3个参数
Tap(x, y, tapDuration): 模拟一次手指单击事件。参数:x,y为控件坐标,tapDuration为点击的持续时间,此参数可省略。
DispatchPress(keycode) :按下键值,如66回车键
DispatchTrackball: 模拟发送轨迹球事件
DispatchFlip(true/false): 打开或者关闭软键盘。
DispatchString(input): 输入字符串。
UsrWait(sleepTime): 等待时间
ProfileWait():等待5s
LongPress(): 长按2秒。
PressAndHold(x, y, pressDuration): 模拟长按事件
type=user
count=10
speed=1.0
start data>>
LaunchActivity(com.Android.browser,com.android.browser.BrowserActivity)//启动APP
UserWait(2000)
Tap(100,100) //点击搜索输入框
DispatchString(test) //输入搜索字符串
UserWait(1000)
DispatchPress(66) //点击回车键搜索
ProfileWait() //等待5s
Tap(100,100) //点击搜索输入框
DispatchPress(112) //点击删除清空输入框
UserWait(1000)
DispatchPress(KEYCODE_HOME)//退出APP回到主页
adb push D:\test.script /data/local/tmp/
adb monkey shell -f /data/local/tmp/test.script -v 5