一、Monkey 简介
Monkey 就是SDK中附带的一个工具。Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。
该工具用于进行压力测试。然后开发人员结合monkey 打印的日志和系统打印的日志,分析测试中的问题
Monkey 测试的特点:
Monkey 测试,所有的事件都是随机产生的,不带任何人的主观性。
1、测试的对象仅为应用程序包,有一定的局限性。
2、Monky测试使用的事件数据流是随机的,不能进行自定义。
3、可对MonkeyTest的对象,事件数量,类型,频率等进行设置。
二、具体操作:
adb devices
adb -s HJB117748HJB shell monkey #查看monkey命令操作
-p <allowed-package-name>:指定包
# 如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。 如果你的应用程序还需要访问其它包里的Activity(如选择取一个联系人),那些包也需要在此 同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个 包,需要使用多个 -p选项,每个-p选项只能用于一个包。
#事件:-s <seed>--伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey, 它将生成相同的事件序列。
# -v:命令行的每一个-v将增加反馈信息的级别。Level 0(缺省值)除 启动提示、测试完成和最终结果之外,提供较少信息。Level 1提供较为详细的测试信息,如逐个发送到Activity的 事件。Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。
–throttle:间隔时间
--hprof
设置此选项,将在Monkey事件序列之前和之后立即生成profiling报告。 这将会在data / misc中生成大文件(~5Mb),所以要小心使用它。
--ignore - crashes
通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。
--ignore - timeouts
通常,当应用程序发生任何超时错误(如“Application Not Responding”对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。
--ignore - security - exceptions
通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。
--kill - process - after - error
通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。注意,正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态。
--monitor - native - crashes
监视并报告Android系统中本地代码的崩溃事件。如果设置了 - -kill - process - after - error, 系统将停止运行。
--wait - dbg
停止执行中的Monkey,直到有调试器和它相连接。
通过 –v 参数。
通过-v参数可以指定打印信息的详细级别,多一个-v多一个级别!
级别 | 表示 | 描述 |
0 | -v | 打印最基本的事件 |
1 | -v-v | 更全面的信息,如增加了那些Activity被选中 |
2 | -v-v-v | 最全面的信息 |
5. Switch
表示跳转到com.android.calendar里的AllInOneActivity里。
6. //Allowing start of Intent
表示允许启动这个活动意图。
7. Sleeping
允许在发送各种随机事件时有一个延时。如果没有表示立即执行,不停顿。
8. Sending:
具体执行的随机事件。
9. injected
执行100次具体事件
10. rotation
屏幕旋转信息,角度和是否保持旋转状态。
11. Dropped
丢弃的事件。
12. 网络耗时
包括:手机占用的,wifi占用的,连接占用的。
aapt dump badging +package # package:即包名
]
adb -s HJB117748HJB shell monkey -v -p com.android.calendar -s 404 100
adb -s HJB117748HJB shell monkey --throttle 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -p com.android.calendar -s 404 100 >> monkey_calendar.txt
-
分析测试报告:
分析测试报告时,需要注意以下内容。
注意报告中的seed值:我们刚才执行monkey时,没有指定seed,在报告一开始,可以看到其自动生成的seed值,见下图红色部分。如果我们指定了seed,则可以使用相同的seed来生成相同的序列。
注意查找日志中的无响应问题和崩溃问题。无响应问题可以在日志中搜索 “ANR” ,崩溃问题搜索 “CRASH” ,内存泄露问题搜索"GC"(需进一步分析),异常问题搜索 “Exception”(如果出现空指针, NullPointerException,需格外重视)。
为了进一步分析问题的来源,可以找到Log中出现问题处的前一次Switch,随后根据Log主要是查看相关的Activity,下面的Log执行的就是LaunchActivity。
Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=android.zhibo8/.ui.contollers.main.LaunchActivity;end
补充问题
-
如何将测试报告记录在本地:
将命令改为
adb shell monkey –p android.zhibo8 –-throttle 100 –-pct-touch 50 –-pct-motion 50 –v –v 10 >c:\monkeylog.txt
待Monkey运行结束后,会在指定目录下生成指定文件。
-
Event percentage分析:
在上述过程中,使用了percent相关命令控制了事件类型,如果我们不指定事件类型。生成的报告中,事件占比大致如下:
// Event percentages:
// 0: 15.0% #0:触摸事件百分比,即参数--pct-touch
// 1: 10.0% #1:滑动事件百分比,即参数--pct-motion
// 2: 2.0% #2:缩放事件百分比,即参数--pct-pinchzoom
// 3: 15.0% #3:轨迹球事件百分比,即参数--pct-trackball
// 4: -0.0% #4:屏幕旋转事件百分比,
// 5: 25.0% #5:基本导航事件百分比,即参数--pct-nav
// 6: 15.0% #6:主要导航事件百分比,即参数--pct-majornav
// 7: 2.0% #7:系统事件百分比,即参数--pct-syskeys
// 8: 2.0% #8:Activity启动事件百分比,即参数--pct-appswitch
// 9: 1.0% #9:键盘翻转事件百分比,即参数--pct-flip
// 10: 13.0% #10:其他事件百分比,即参数--pct-anyevent
https://www.cnblogs.com/aland-1415/p/6949964.html