本次分享《Monkey测试工具应用》实验中的Monkey高级应用,回顾本章节的前期分享,请点击
:
上述的Monkey测试是无法应用在实际测试中的,因为有太多的问题。比如它是针对整个操作系统,而没有锁定某个被测应用,同时日志输出不够详细,不便于分析判断。
当然,这些问题Monkey都已经帮我们想到了,并提供了足够多的参数选项帮助我们解决。先来看看一些常见的Monkey参数选项:
(1) adb shell monkey -p pkgname:只是对指定包名(pkgname)进行测试。
(2) adb shell monkey --throttle milliseconds:指定事件之间的间隔时间,单位是毫秒。
(3) adb shell monkey -s seed: 伪随机数生成器的seed 值,如果用相同的 seed 值再次运行 Monkey ,它将生成相同的事件序列。
(4) adb shell monkey -v [-v –v]:指定日志级别。
(5) adb shell monkey --pct-touch:指定触摸事件的百分比percent。
(6) adb shell monkey --pct-motion:指定动作事件的百分比percent。
(7) adb shell monkey --pct-trackball:指定轨迹球事件百分比percent。
(8) adb shell monkey --pct-nav:指定基本导航事件百分比percent。
(9) adb shell monkey --pct-majornav:设定主要导航事件百分比percent,兼容中间键,返回键,菜单按键。
(10) adb shell monkey --pct-syskeys:设定系统事件百分比percent,比如HOME,BACK,拨号及音量调节等事件。
(11) adb shell monkey --pct-appswitch:设定启动不同应用程序的事件百分比percent。
(12) adb shell monkey --pct-anyevent:设定不常用事件的百分比。
(13) adb shell monkey --ignore-crashes:忽略崩溃和异常事件。
(14) adb shell monkey --ignore-timeouts:忽略超时事件。
(15) adb shell monkey --pkg-blacklist-file:设置不需要进行测试的黑名单应用。
(16) adb shell monkey --pkg-whitelist-file:设置需要进行测试的白名单应用。
下面就一起来看看上述选项中的一些具体的使用方法。
1.通过指定包名来限定测试范围
是指只对指定的包名运行Monkey测试,这样就可以避免Monkey测试针对整个操作系统实施随机操作,而将操作锁定在某个指定包名的应用程序中。此处所谓的包名与我们在Java或者Python过程中理解的包名是类似的概念。
一个Android应用程序的开发过程中,也是按照包名+类名来组织源代码的,运行过程也是完全依赖于包名+类名,所以我们可以通过包名实现应用程序锁定。这一点与我们在前一章节中用Python开发Monkey测试脚本时指定窗口名称结合窗口大小区域进行限制是一样的道理。
比如,我们如果需要针对“一笔记账”进行Monkey测试,那么我们就需要知道“一笔记账”所在的包名。
那么如何查看应用程序的包名称呢?
通常我们使用aapt.exe应用程序即可完成查看。
该应用程序在Android SDK的build-tools目录或者夜神模拟器的bin目录下均可以找到该应用程序。然后合作如下命令形式完成查询“aapt dump badging filename.apk”,整个过程如下图所示。

从上图我们可以得知,“一笔记账”应用程序的主包名为“com.mobivans.onestrokecharge”,然后我们就可以通过指定这个包名来限制Moneky测试只能够针对当前的“一笔记账”进行测试而不会影响到其它操作系统里面的应用程序了。
另外,通过aapt命令我们还可以获取到应用程序的主类名(即可执行的Activity名),在aapt的上述输出中,仔细寻找“launchable-activity”,对应的值即是可执行的Activity,后续的测试我们将会使用到该值。读者朋友可以通过如下命令进行简单测试:
adb shell monkey -p com.mobivans.onestrokecharge 5000 |
上述命令表示针对“一笔记账”这个应用程序,运行5000次随机测试。在真实的Monkey测试过程中,建议将运行次数设置得更大一些,否则可能很难直接达到我们的可靠性测试目的。因为在这5000次运行过程中,有很多可能的事件,不一定会对程序的操作产品影响,比如滑动,比如切换等事件。
上述命令运行过程中,如果没有出现系统性异常,可能的正常输出如下图所示。

我们再一次对“一笔记账”进行了测试,结果运行过程便出现了异常,应用程序崩溃了,说明Monkey测试起到了一定的作用。如下图所示。

同时,在Monkey窗口中,也显示了不一样的日志输出,明确告知系统“CRASH”,即崩溃。整个日志出来容器如图所示。

但是,我们从上述的日志中,虽然知道了应用程序崩溃的事实结果,但是并不知道是什么原因,什么样的操作导致的崩溃。其原因是因为我们的日志级别设置得太低,运行过程中并没有为我们显示更详细的,有价值的日志信息,不方便我们对结果进行分析处理。
2.通过指定日志级别来获取详细结果
: