首页 > 代码库 > Android测试命令行工具Monkey使用教程【转】

Android测试命令行工具Monkey使用教程【转】

Monkey是什么

Monkey是可以运行在模拟器里或实际设备中的程序。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。

Monkey简介

Monkey是一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。Monkey包括许多选项,它们大致分为四大类:

· 基本配置选项,如设置尝试的事件数量。

· 运行约束选项,如设置只对单独的一个包进行测试。

· 事件类型和频率。

· 调试选项。

在Monkey运行的时候,它生成事件,并把它们发给系统。同时,Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理:

· 如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。

· 如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。

· 如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。

按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。  

Monkey的基本用法 

可以通过开发机器上的命令行或脚本来启动Monkey。由于Monkey运行在模拟器/设备环境中,所以必须用其环境中的shell来进行启动。可以通过在每条命令前加上adb shell来达到目的,也可以进入Shell后直接输入Monkey命令。基本语法如下:
$ adb shell monkey [options] 
如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:
$ adb shell monkey -p your.package.name -v 500 

命令选项参考 

CategoryOption描述
General
常规
--help列出简单的用法。
-v命令行的每一个-v将增加反馈信息的级别。Level 0(缺省值)除启动提示、测试完成和最终结果之外,提供较少信息。Level 1提供较为详细的测试信息,如逐个发送到Activity的事件。Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。
Events
事件
-s <seed>伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件序列。
--throttle <milliseconds>在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定该选项,Monkey将不会被延迟,事件将尽可能快地被产成。
--pct-touch <percent>Adjust percentage of touch events. (Touch events are a down-up event in a single place on the screen.)
调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。
--pct-motion <percent>调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)。
--pct-trackball <percent>调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。
--pct-nav <percent>调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)。
--pct-majornav <percent>调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)
--pct-syskeys <percent>调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)。
--pct-appswitch <percent>调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法。
--pct-anyevent <percent>调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。
Constraints
约束限制
-p <allowed-package-name>如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。如果你的应用程序还需要访问其它包里的Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个 -p选项,每个-p选项只能用于一个包。

使用Monkey流程

总的来说使用monkey进行测试是比较简单的,只是需要做一些比较复杂的准备工作。下面详解测试步骤(很简单的哦),所讲内容是建立在已经配置好ADB环境的基础上(如果这部分不清楚请先google一下先配置好环境,这里不做描述)。

1、ADB连接Android测试设备。

2、确定你要测试的应用的PackageName。

3、使用Monkey发一条测试命令。 

步骤详解

步骤确实很简单吧。不敢保证读者都明白如何去完成上面的步骤,这里讲讲每步如何做。

1、ADB连接Android测试设备。

如果你用的是模拟器,那么启动后通常是已经连在ADB上了。对于真机来说两种方式都可以:

方式一:使用USB把Android设备接到PC上,然后装上驱动(不好找驱动的话就用豌豆荚吧)。

方式二:首先得确保你的Android已经成功root了,那么可以使用wifi无线连接。①下载一个wifi adb应用装在你的android设备上;②在android上打开wifi adb;③在pc上的命令行中输入wifi adb中显示的那部分内容:adb connect 192.168.x.x,命令行中显示connected 192.168.x.x那么说明连接好了。

我比较喜欢方式二,这样可以不用去下载驱动(主要是驱动很多都不稳定),而且不伤害电池。长时间插在USB上对电池始终是不好的。只不过这种方式设备一旦休眠那么就可能需要重连。

2、确定你要测试的应用的PackageName。

先说明一下这里讲的方法是通用的,而网上其他方法获取PackageName不然不通用(因为他是建立在root的基础上的,我不敢保证你的设备已经root)。

①在android设备上点击一下你要测试的设备,然后就不用操作设备了。

②在PC上的命令行输入:adb logcat>D:/log.txt *:I 

在这里的D:/log.txt你可以改成其他的路径,但是一定要先确保路径下没有这个文件,不然的话你以前的文件就被改掉了,一定要小心。

③按下Ctrl+c先停掉(为了避免过多的新信息)。打开刚刚的那个文件D:/log.txt。从文件最下面开始找下面格式的信息

I/ActivityManager( 数字): Displayed 包名/类名: +数字ms

例如我的信息如下:

I/ActivityManager(  272): Displayed com.vane/.act.ActLauncher: +315ms

不过你可能会发现有很多这种格式的信息,到底哪个才是你需要的呢,如果你严格按照刚刚的步骤做的话,那么很可能是最下面那条信息,即使不是那么也肯定是最下面几条信息中的某一条,这需要你根据应用进行辨别。

④记下你刚刚得到的包名,例子中的包名为“com.vane”。马上就会用。

3、使用Monkey发一条测试命令。

这一步就比较简单了。直接在pc上的命令行输入:adb shell monkey -p com.vane -v 50

备注:上面命令中的com.vane就是之前获得的包名;命令中的参数你可以自己根据需要参考上面的参数文档进行修改。

4、观察android设备,直到Monkey停止。

5、如果应用崩溃的话就好分析一下Monkey中的信息。

总结

Monkey的使用确实比较简单,但是在测试中确有不小的作用,值得使用。

Android测试命令行工具Monkey使用教程【转】