Monkey,也就是猴子,hin皮,所以Monkey测试,顾名思义也就像猴子一样在软件上乱敲按键来测试。猴子什么都不懂,只知道乱按。Monkey原理也是类似,通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对应用程序的测试。
我相信,大多数测试员都知道Monkey测试,甚至都用过,但是你可能不敢说自己对Monkey测试有多熟悉。看着好像很简单,但是我们如何快速的去熟悉Monkey测试呢?
一、Monkey测试的基本方法
今天,想简单地分享点Android的Monkey测试。亲测了一波,Monkey测试作为辅助测试,还是可以用用的,简单不费力。
Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。只要安装了adb,就可以进行Monkey测试了。
在做Monkey测试前,需要先安装adb(adb的环境配置,网上有很多教程,此处不做详细描述)。然后手机连接上电脑,打开菜单,输入“cmd”打开,输入命令行“adb devices”来确定设备是否连接成功。若连接成功,会显示设备序列号,参考下图。
还有,测试人员需要知道测试app的包名。可以通过使用“uiautomatorviewer.bat”工具(后期文章中描述)来获取包名,也可以直接询问提供app的开发人员,或者直接使用adb命令获取包名。
简单地介绍一种:通过adb命令获取包名。首先要先打开手机中需要获取包名的app。然后分别输入命令即可。如下图,该app的包名是“com.screeclibinvoke”。
adb shell
dumpsys activity | grepmFocusedActivity
然后输入一句简单的Monkey命令,即可开始测试。
adb shell monkey -p com.screeclibinvoke 1000 (指定包名是“com.screeclibinvoke”的应用,随机执行1000个模拟事件)。
二、Monkey的常用命令
下面列出了Monkey可以使用的参数。
基本参数
--help打印帮助文档
-v命令行中的每一个-v将增加反馈信息的级别。Level 0(也是默认值)除启动提示、测试完成和最终结果之外,其他的信息很少。Level 1提供较为详细的测试信息,如逐个发送到Activity的事件。Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity,例子adb shell -v -v 500
-s伪随机生成器的种子。如果seed值一样,那么产生的monkey事件,序列也是一样的
--throttle <毫秒>在事件之间加入固定时间延迟,单位毫秒。如果不加,monkey会尽可能快地产生事件
--pct-touch调整触摸事件的百分比(触摸就是一个点击事件)
--pct-motion调整动作事件的百分比,(动作事件指一个down事件,一系列随机事件,然后一个up事件)
--pct-trackball调整轨迹事件的百分比,(轨迹事件由一个或多个移动组成,有时伴随点击事件)
--pct-nav调整基本导航事件的百分比,(导航事件就是方向键,上下左右)
--pct-majornav调整主要导航事件的百分比(这些导航事件通常引发图形界面中的动作,如5-way键盘的中间按键,回退按键,菜单按键)
--pct-syskeys调整系统按键事件的百分比(这些事件由系统保留,如Home、Back、Start、Call、End Call及音量控制键)
--pct-appswitch调整启动activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖保重全部Activity的一种方法。
--pct-anyevent调整其他类型事件的百分比。包含了所有其他类型的事件,如按键、其他不常使用的设备按键、等。
操作约束
-p如果使用该参数指定了一个或几个包,monkey将只允许启动这些包中的activity。如果你的程序,需要访问别的activity(如联系人界面),那必须将联系人的包也指定一下,否则无法访问。如果没有指定包名,monkey将允许启动安装在手机上的所有包。如果要指定多个包,需要多个-p选项,每个-p指定一个包。
-c如果使用此参数指定了一个或多个类别,Monkey将只允许系统启动被这些类别中的某个类别列出的Activity,如果不指定任何类别,Monkey将选择下列类别中列出的Activity:
Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多个类别,需要多个-c选项。
调试选项
--dbg-no-event设置此选项,Monkey将执行初始启动,进入到一个测试Activity,然后不再产生事件。为了得到最佳结果,把它与-v,一个或几个包约束,以及一个保持Monkey运行30秒或更长事件的非零值联合起来,从而提供一个环境,可以监视应用程序所调用的包之间的转换。
--hprof设置此选项,将在Monkey事件序列之前和之后立即生成profiling报告。这将会在data/misc中生成大文件(5M),所以小心使用。
--ignore-crashes通常,当被测app崩溃或者发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey会继续向系统发送事件,直到计数完毕。
--ignore-timeouts通常,当被测程序出现未响应时,Monkey会停止运行。如果设置此选项,Monkey会继续运行,直到结束。
--ignore-security-excuptions通常,当被测程序发生可允许错误(如启动一个需要授权的Activity)时,Monkey将停止运行。如果设置此选项,Monkey将继续运行,直到结束。
--kill-process-after-error通常,当Monkey由于一个错误而停止运行时,出错的应用程序将继续运行。如果设置此选项,将会通知系统停止发送错误的进程。注意:程序正常结束,该程序并没有被停止。设备只是在结束事件后,简单保持在最后的状态。
--monitor-native-chrashes监视并报告Android系统中本地代码的崩溃事件。如果设置了–kill-process-after-error,系统将停止运行。
--wait-dbg停止执行中的Monkey,直到有调试器和它相连。
三、Monkey的实例
我使用如下命令做一波Monkey测试,最终在电脑D盘生成a.log日志文件。
adb shell monkey -p com.screeclibinvoke --throttle300 --ignore-crashes --ignore-timeouts --ignore-security-exceptions--ignore-native-crashes --monitor-native-crashes -v -v -v 10000>D:\a.log
在Monkey测试过程中可能会出现程序崩溃(CRASH)和程序无响应的情况(ANR)。CRASH即崩溃信息,程序在运行中非正常退出。设置忽略crashes等情况,当运行如上命令之后,在生成的日志中搜索关键字“CRASH”或“NAR”,可直接根据log日志定位bug并修复,也可根据seed值来完成bug的复现。
欢迎加入 51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ 群: 755431660