前不久我转到一个本地化项目做安卓测试,还只有一个安卓测试那种。这要是测得不好就有点尴尬了,这么觉得的我于是想着虽然那种很洋气的自动化我还不会,但是至少跑个monkey还是没问题的!刚好今天比较闲于是就开始挤时间准备开始学学怎么跑monkey了!
【本次仅记录如何使用monkey各常用参数及对其的理解,脚本及报告分析放到下一篇。】
Monkey,顾名思义就是猴子,引申出来即是猴子瞎点能发现一些平时进行正常操作发现不了的问题。【纯属个人理解。_(:зゝ∠)_】
关于如何连上手机开启调试就略过不提,当连上需调试的手机后进入cmd的操作界面,使用adb shell进入shell端, 然后monkey+参数。即adb shell monkey+参数。
在命令最后加上的一个整数即为想要产生的随机事件数量。
Monkey的参数大致分为四类:General,Events,Constraints,Debugging。
一、General参数即是常规参数,一般指-v与--help。
按照我自己学习Linux的习惯就来先搞懂命令的缩写是什么意思。
1、-v即level,打印出的log的详细程度。详细程度一共有三级0/1/2,详细如下。
Level0(默认)-v,除了启动、测试完成和最终结果外只提供较少的信息。
Level1 -v -v,提供了较为详细的测试信息,如逐个发送到Activity的事件信息。
Level2 -v -v -v,提供了更多的设置信息,如测试中选中或未选中的Activity信息。
1_例子:adb shell monkey -v -v -v 1000
2、--help,关于help命令就不必多说了。
此外不知道大家有没有跟我一样的困惑:有的教程里写的是-help,而有的是--help,这两个命令有区别吗?
查询后得出的结论是--后一般接命令完整单词,-后一般接命令简写。比如--help与-h其实执行的是同一命令,但是有的参数只能使用完整单词比如后面将提到的--throttle。
【如有问题请在评论里给我提出,谢谢。】
二、Events参数即为操纵每个事件的参数,比如-s,--throttle等。
1、-s参数为seed,种子。种瓜得瓜种豆得豆,即我们可以根据出现错误时的seed值运行出相同的随机事件序列。【这个参数我其实没太明白如何使用,就是比如我想复现seed=12312时的事件序列,然后后面需要选择执行多少次呢?希望有人解答。】
2、--throttle 压制,节流阀即控制,我们可以通过这个参数操作每个事件的间隔时间来模拟用户的真实操作速度,比如一般取值为300ms。
2_例子:adb shell monkey -s 152342 --throttle 300 -v 1000
3、除了以上两个参数外还有一系列以--pct开头的控制每种事件百分比的参数,当测试不同类型APP时可以针对对应的事件百分比做调整。详细内容如下。
--pct-touch 指定触摸事件的百分比
--pct-motion (滑动事件)
--pct-trackball (轨迹球事件)
--pct-nav (导航事件 up/down/left/right)
--pct-majornav (主要导航事件 back key 、 menu key)
--pct-syskeys (系统按键事件 Home 、Back 、startCall 、 endCall 、 volumeControl)
--pct-appswitch (activity之间的切换)
--pct-anyevent (任意事件)
3_例子:adb shell monkey --pct-motion 30 --pct-touch 20 -v 1000(注意--pct数值后不用加百分号%)
三、Constraints约束参数,即对运行的随机事件范围等进行约束的参数,如-p。
1、-p package包,使用这个参数可以针对指定的包产生随机事件。并且可以指定多个包,一个包名对应一个-p参数。
1_例子:adb shell monkey -p xx.xxx.xxx -p zz.zzz.zzz -v 1000
2、-c category类别,这个参数只允许系统启动这些类别中某个类别列出的Activity。使用这个参数需要知道应用的activity名称。如不手动指定,monkey只会启动Intent.CATEGORY_LAUNCHER和Intent.CATEGORY_MONKEY的活动。【这个因为我没看到代码所以没有怎么尝试,感到遗憾,之后会好好看看这个参数。】
2_例子:adb shell monkey -p xx.xxx.xxx -c android.intent.category.LAUNCH -v 1000
四、Debugging调试参数,即用于调试的参数命令,如--hprof。
1、--dbg-no-events 使用此参数时monkey会启动待测应用,但不发送任何消息,建议与-v,-p,-throttle一起使用。
2、--hprof 这个参数生成的profiling报告可以由HPROF查看工具会列出类、类的实例和实例的引用树,以此来帮助你跟踪内存的使用情况,找出内存泄漏的地方。HPROF最初是由J2SE支持的一种二进制堆转储格式。
相对于静态代码分析,Profiling 是通过收集程序运行时的信息来研究程序行为的动态分析方法。其目的在于定位程序需要被优化的部分,从而提高程序的运行速度或是内存使用效率。
使用此参数时monkey会在发送事件前后生成性能报告(即内存的快照文件),一般在设备的/data/misc目录下生成一个hprof文件。【这个命令我今天还没试过,等明天试试看,看看打印出的报告。】
3、--kill-process-after-error 一般情况下,当monkey因为某个错误指定运行时,出问题的应用会留在系统上继续执行,这个选项通知系统当错误发生时杀掉进程。
注意:当monkey正常执行完毕后,它不会关闭所启动的应用,设备依然停留在最后接受到消息的状态。
4、--monitor-native-crashes 监视由Android C/C++代码部分(cpu计算部分)引起的崩溃,此时如果设置了“--kill-process-after-error”,整个系统会关机。【这个命令我今天还没试过,等试了看看能不能结合日志分析下原因。】
5、--wait-dbg 即我们启动monkey后,只有连上被测设备且打开调试时才继续进行monkey测试。
1-5_例子:adb shell monkey -p xx.xx.xx--dbg-no-events --hprof --kill-process-after-error --wait-dbg -v 1000
6、除了以上参数还有以ignore开头的一系列参数,可以便于在问题发生后继续进行monkey测试直到指定个数的消息全部发送完毕,而不会直接中断停止。
--ignore-crashes 忽略待测应用崩溃或发生异常的情况
--ignore-timeouts 忽略待测应用停止响应(如弹出“应用无响应”对话框)的情况
--ignore-security-exceptions 忽略待测应用碰到权限方面的错误的情况
6_例子:adb shell monkey -p xx.xx.xx --hprof --kill-process-after-error --wait-dbg --ignore-crashes --ignore-security-exceptions -v 1000
其中一些未尝试的参数我接下来会再试试,等尝试了继续更新或在更新下一篇关于脚本&报告分析的时候加在其中。
参考:
http://www.cnblogs.com/yajing-zh/p/4340795.html
http://www.cnblogs.com/wanqieddy/p/4312814.html
Submitted by 梅湖