Android稳定性测试工具Monkey的使用

综述

   Monkey是一个命令行工具,它可以运行在我们的模拟器或者设备当中。它可以发送一些伪随机的用户事件流,例如点击、触摸、手势等。我们能够使用Monkey工具来对我们所开发的应用进行压力测试。Monkey测试是一种为了测试软件的稳定性,健壮性的快速有效的方法。

Monkey程序介绍

Monkey是Android自带的系统工具,是由java语言编写。它在Android文件系统存放的路径是:/system/framework/monkey.jar,启动monkey.jar的shell脚本文件在Android文件系统存放的路径为:/system/bin/monkey。打开这个monkey文件我们可以看一下这个脚本文件很简单。

Android稳定性测试工具Monkey的使用

我们可以看到它调用的是com.android.commands.monkey.Monkey包。

Monkey常用命令

下面我们就来执行这个monkey脚本。

我们执行如下命令:

Android稳定性测试工具Monkey的使用

这时候,monkey将义无反顾的模式进行启动,并把事件任意发送到安装在目标环境下的全部包。运行结果如下所示:

Android稳定性测试工具Monkey的使用

这时候可以看到monkey并没有运行起来,只是显示了usage,这是因为少了一个重要的参数,这是指发送的事件数。如果我们需要发送50个随机事件,执行如下命令:

Android稳定性测试工具Monkey的使用

这时候我们可以看到手机已经疯狂的运行起来了。monkey的基本语法为:

Android稳定性测试工具Monkey的使用

Monkey的option操作都是根据具体需求设定的,主要分为常规类,事件类,约束类和调试类。下面就对这些命令进行说明:

常规类:

--help

显示monkey参数帮助信息usage

-v

打印日志信息,每个-v将增加反馈信息的级别。-v越多日志信息将会越详细,不过目前最多支持三个-v。

Level0:一个-v,除启动提示、测试完成和最终结果之外,提供较少信息。

Level1:两个人-v,提供较为详细的测试信息,如逐个发送到Activity的时间。

Level2:三个-v,提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。

事件类:

-s <seed>

伪随机数生成器的seed值。如果用相同的seed值再次运行monkey,它将生成相同的时间序列。

--throttle <milliseconds>

后面接时间,单位为毫秒,表示时间之间的固定延时(即执行每一个指令的间隔时间),若不接这个选项,monkey则不会延时。

--pct—touch<percent>

后面接触摸事件的百分比。(触摸时间是一个down-up事件,它发生在屏幕上的某单一位置)

--pct—motion<percent>

后面接动作事件的百分比。(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件的组成)。

--pct—tracball<percent>

后面接轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。

--pct—nav<percent>

后面接“基本”导航事件百分比(导航事件主要来自方向输入设备的上、下、左、右事件)。

--pct—majornav<percent>

后面接“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5—way键盘中的中间按键、回退按键、菜单按键)。

--pct—syskeys<percent>

后面接“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、StarCall、EndCall及音量控制键)。

--pct—appswitch<percent>

后面接启动Activity的百分比。在随机间隔里,Monkey将执行一个starActivity()调用,作为最大程度覆盖中全部Activity的一种方法。

--pct—anyevent<percent>

调整其他类型事件的百分比。它包含了所有其他类型的事件,如:按键、其他不常用的设备按钮等等。

—p<allowed—package—name>

如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。如果你的应用程序还需要访问其他包里的Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个—p选项,每个—p选项只能用于一个包。

-c<main—category>

如果用此参数指定了一个或几个类别,Monkey将只允许系统启动被这些类别中的某个类别列出的Activity。如果不指定任何类别,Monkey将选择下列类别中列出的Activity:lntent.CATEGORY_LAUNCHER或lntent.CATEGORY_MONKEY。要指定多个类别,需要使用多个-c选项,每个-c选项只能用于一个类别。

调试类

--dbg-no-events

设置此选项,Monkey将执行初始启动,进入到一个测试Activity,然后不会再进一步生成事件。为了得到最佳结果,把它与-v、一个或几个包约束、以及一个保持Monkey运行30秒或更长时间的非零值联合起来,从而提供一个环境,可以监视应用程序所调用的包之间的转换。

--hprof

设置此选项,将在Monkey事件序列之前和之后立即生成profiling报告。这将会在data/misc中生成大文件(~5Mb),所以要小心使用它。

--ignore-crashes

通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。

--ignore-timeouts

通常,当应用程序发生任何超时错误

(如“Application Responding”对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成)

--ignore-security-exceptions

一条常用的Monkey命令

adb shell monkey -v -v -v -p [PackageName] --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes --ignore-native-crashes --throttle 1000 100000 > monkey.txt

执行这条命令后会在当前文件下面生成一个名为monkey.txt的日志文件,我们可以通过搜索exception和ANR来找到monkey测试中所出现的Crash和ANR。

总结

在这里介绍了Monkey的使用,对于我们的应用通过monkey进行压力测试,也能够发现众多的ANR以及Crash。对于Monkey也有一定缺点的,它是不支持截屏、录制、回放等操作的。

上一篇:axios post提交的Content-Type


下一篇:【poj1738】 An old Stone Game