官方文档链接:https://developer.android.com/studio/test/monkey.html
概览
Monkey在设备上模拟用户行为,随机生成点击、滑动等事件,帮助开发者进行压力测试。
基本语法
$ adb shell monkey [options] <event-count>
对于一般开发者来说,我们只关心自己app的稳定性,所以需要指定包名:
$ adb shell monkey -p com.sina.weibo -v 1000
以上这条命令的意思是:对 [新浪微博app] [输出基本日志信息] <执行1000个随机操作>
常用Options
事件间隔时间(throttle)
$ adb shell monkey -p com.sina.weibo -v --throttle 500 1000
翻译:[新浪微博app] [输出基本日志信息] [两次随机事件间间隔] <500ms> <执行1000个随机操作>
忽略异常(ignore)
app很难做到不出现crash和ANR问题,我们希望monkey在执行过程中不会因为遇到异常而停下来。
$ adb shell monkey -p com.sina.weibo -v --throttle 500 --ignore-crashes --ignore-timeouts 1000
翻译:[新浪微博app] [输出基本日志信息] [两次随机事件间间隔] <500ms> [出现crash不阻塞monkey] [出现ANR不阻塞monkey] <执行1000个随机操作>
各事件比例(pct)
monkey会随机生成事件,在一些测试场景中,我们希望测试控件被点击的效果,而另一些场景中,可能我们会更看重列表滑动的性能。
$ adb shell monkey -p com.sina.weibo -v --throttle 500 --ignore-crashes --ignore-timeouts --pct-touch 100 1000
翻译:[新浪微博app] [输出基本日志信息] [两次随机事件间间隔] <500ms> [出现crash不阻塞monkey] [出现ANR不阻塞monkey] [touch事件比例] <100%> <执行1000个随机操作>
事件种类还包含:motion-滑动操作,syskeys-系统键等等。
日志输出
终端有显示限制,假如跑了10W个事件,过程中遇到的crash和ANR等日志如何记录呢?
$ adb shell monkey -p com.sina.weibo -v --throttle 500 --ignore-crashes --ignore-timeouts --pct-touch 100 1000 > /Users/haitong/monkey_log_1009.txt
翻译:[新浪微博app] [输出基本日志信息] [两次随机事件间间隔] <500ms> [出现crash不阻塞monkey] [出现ANR不阻塞monkey] [touch事件比例] <100%> <执行1000个随机操作> [把日志记录在monkey_log_1009.txt里]
停止Monkey
记得有一次测试,随便写了100W个事件,结果发现拔了手机还是在不停的点。。
停下来的方法很简单,monkey也是运行在手机上的一个进程,把进程杀掉就可以了。
$ adb shell
$ ps | grep monkey
找到monkey的pid
$ kill pid 23371
Warning
monkey高频模拟用户事件,对手机的损耗较大,谨慎使用。