Monkey简介(猴子测试)
●monkey是运行在你的程序模拟器或设备,并生成用户事件的伪随机流,例如点击,触摸,或手势,以及若干系统级事件。
●可以使用monkey对应用程序进行压力测试、稳定性测试,不做功能测试。
●Monkey 测试所有的事件都是随机产生的,不带任何人的主观性。
●Monkey测试的时候,需要长时间、大量的操作事件。.
Monkey的特征
●测试的对象仅为应用程序包,有一-定局限性
●Monkey测试使用的事件随机流是随机的,不能进行自定义
●可对MonkeyTest的对象,事件数量,类型,频率等进行设置
运行结束的特征
● Monkey所有的事件运行结束
● APP崩溃,闪退
●APP死机、无响应
●人工干预,强制结束
Monkey的使用
1、首先检测android真机/模拟器是否已经连接: adb devices
;
2、然后选取一个设备来进入shell: adb shell -s 设备名
,或如果只有一个设备,可以写adb shell
;
● 查看应用程序列表: pm list packages
●参数-p
用于约束限制,用此参数指定-个或多个包(Package, 即App)。指定包之后,Monkey将只允许系统启动指定的APP。如果不指定包,Monkey将允许系统启动设备中的所有APP。
●不指定包:
adb shell monkey 100
●指定一个包:
adb shell monkey -p com.htc.Weather 100
说明: com.htc.Weather为包名,100是事件计数(即让Monkey程序模拟100次随机用户事件)●指定多个包:
adb shell monkey -p com.htc.Weather -p com.htc.pdfreader -p com.htc. photo.widgets 100
●参数-v
用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:
●级别一 :
示例:adb shell monkey -p com.htc.Weather -v 100
( 说明缺省值,仅提供启动提示、测试完成和最终结果等少量信息)
●级别二 :
示例:adb shell monkey -p com.htc.Weather -v -v 100
(说明提供较为详细的日志,包括每个发送到Activity的事件信息)
●级别三 :
示例:adb shell monkey -p com.htc.Weather -v -v -v 100
(说明最详细的日志,包括了测试中选中/未选中的Activity信息)
●参数-s
用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
●Monkey测试1:
adb shell monkey -p com.htc.Weather -s 10 100
●Monkey测试2:adb shell monkey -p com.htc.Weather -s 10 100
●两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即-一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;这个-s就是指定了操作的顺序!
●参数- -throttle
用于指定用户操作(即事件)间的时延,单位是毫秒;
示例: adb shell monkey -p com.htc.Weather --throttle 3000 100
●参数- -pct
adb shell monkey -p com.tmall.wireless -v --pct-touch 50 --pct-trackball 30 --throttle 300 100
(说明:用monkey测试天猫的这个包触摸操作(-touch)百分之50,轨迹球操作(-trackball)百分之30,其它操作百分之20,总共进行100次随机点击,事件之间间隔300ms)
Monkey测试中,APP 异常情况的分析出现异常情况的原因:
1)随机的各种操作,没有任何逻辑和流程;
2)长时间的操作,功能和界面之间互相调用,消耗大量的系统资源;
3)操作之间的时间间隔太短会造成异常。
常见的异常及对应策略:
1、NullPointerExcoption (空指针异常)。对比APP运行日志记录,分析代码找出原因。
2. Debug 异常(IllegalStateException). 一般常见于程序代码本身的错误。
3.低内存异常(OutOfMemerfror)。 内存空间不足的时候。
4、操作无响应异常(TimerOut). 频繁的操作导政某些功能无响应。
5、系统重启异常(RostarSytem)。 可能是误操作,也可能是系统崩溃。
6、运行时异常(RunTimeException)。 一般在无响应之后。
7.数据读取异常(RoadExcoption)。 数据库数据读取异常。
8、非法参数异常(legalArgumentException). 方法调用时参数传递非法。
在使用Monkey测试的时候,如何更好的提交bug:
1、首先要阅读和分析APP测试的日志。找出问题(哪里有问题)。
2.结合提交bug的流程。将所需的日志内容截图,原文照搬。
3.如果能力或者权限足够,可以通过阅读代码的方法,进行bug的追根。