Monkey测试工具简介

最近依然还是那么忙,只不过慢慢总结,好几天出一篇总结,那也是在努力,加油,打工人

一、Monkey 简介

monkey是Android SDK中自带的一个命令行工具,使用Java语言写成,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。它在Android文件系统中的存放路径是:/system/framework/monkey.jar;可以通过开发机器上的命令行或脚本来启动。Monkey表面上运行在开发机器上,其实是运行在模拟器/真实终端设备的adb shell中中,所以必须用其环境中的shell(/system/bin/monkey)来运行,可以通过在每条命令前加上adb shell来达到目的,也可以进入Shell后直接输入Monkey命令。

二、Monkey 操作

Monkey测试一般是在产品功能稳定之后进行,专擅于对APP作长稳测试。

通过monkey命令可以模拟用户向目标程序发送随机的事件流,效果等同于手动操作APP,并产生对应的日志,开发测试人可以通过分析monkey日志定位测试过程中出现的问题,实现对APP的自动化和压力测试。

2.1 Monkey支持的事件

Monkey支持11种事件,主要是以下5种…

Touch触摸事件-即点击,由屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作

Trackball滚动球事件-即轨迹 ,由一个或多个随机的移动事件组成,有时会伴随着点击事件

motion滑动事件,由屏幕上某处一个down事件、一系列随机的移动事件和一个up事件组成

nav基本导航事件,由方向输入设备的上下左右按键所触发的事件组成

majornav主要导航事件,通常会导致UI界面中的动作事件,如5-way键盘的中间键,回退 按键、菜单按键

2.2 Monkey 测试的特点

Monkey 测试,所有的事件都是随机产生的,不带任何人的主观性

测试的对象仅为应用程序包,有一定的局限性

Monky测试使用的事件数据流是随机的,不能进行自定义

可对MonkeyTest的对象,事件数量,类型,频率等进行设置

三、Monkey的基本用法

基本语法如下:

$ adb shell monkey [options]

如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:

$ adb shell monkey -p your.package.name -v 500

使用android自动化测试工具monkey启动应用时,需要填写被测程序的包名和启动的Activity

四、Monkey测试的一个实例

通过这个例子,理解Monkey测试的步骤以及如何知道哪些应用程序能够用Monkey进行测试

Windows下

1、通过eclipse启动一个Android的emulator

2、在命令行中输入:adb devices查看设备连接情况

C:\Documents and Settings\Administrator>adb devices

List of devices attached

emulator-5554   device

3、在有设备连接的前提下,在命令行中输入:adb shell 进入shell界面

C:\Documents and Settings\Administrator>adb shell

4、查看data/data文件夹下的应用程序包。注:我们能测试的应用程序包都在这个目录下面

C:\Documents and Settings\Administrator>adb shell

 ls data/data

ls data/data

5、以com.android.calculator2作为对象进行MonkeyTest

#monkey -p com.android.calculator2 -v 500

其中-p表示对象包 –v 表示反馈信息级别

运行过程中,Emulator中的应用程序在不断地切换画面。

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

五、使用monkey help 命令查看命令参数

5.1 参数: -p

用于约束限制,用此参数指定一个或多个包(Package,即App)。指定包之后,monkey将只允许系统启动指定的APP,如果不指定包,将允许系统启动设备中的所有APP.

* 指定一个包: adb shell monkey -p cn.emoney.acg 10

* 指定多个包:adb shell monkey -p cn.emoney.acg –p cn.emoney.wea -p cn.emoney.acg 100

* 不指定包:adb shell monkey 100

5.2 参数: -v

用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:

日志级别 Level0,说明缺省值,仅提供启动提示、测试完成和最终结果等少量信息

示例 adb shell monkey -p cn.emoney.acg –v 100

日志级别 Level 1,说明提供较为详细的日志,包括每个发送到Activity的事件信息

示例 adb shell monkey -p cn.emoney.acg –v -v 100

日志级别 Level 2,说明最详细的日志,包括了测试中选中/未选中的Activity信息

示例 adb shell monkey -p cn.emoney.acg –v -v –v 100

5.3 参数: -s

用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。

Monkey 测试1:adb shell monkey -p cn.emoney.acg -s 10  100

Monkey 测试2:adb shell monkey -p cn.emoney.acg –s 10 100

两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。

5.4 参数: --throttle<毫秒>

用于指定用户操作(即事件)间的时延,单位是毫秒;

adb shell monkey -p cn.emoney.acg --throttle 5000 100

5.5 参数: --ignore-crashes

用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。

adb shellmonkey -p cn.emoney.acg --ignore-crashes 1000

测试过程中即使程序崩溃,Monkey依然会继续发送事件直到事件数目达到1000为止

adb shellmonkey -p cn.emoney.acg 1000

测试过程中,如果acg程序崩溃,Monkey将会停止运行

5.6 参数: --ignore-timeouts

用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。

adb shellmonkey -p cn.emoney.acg --ignore-timeouts 1000

5.7 参数: --ignore-security-exceptions

用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。

adb shellmonkey -p cn.emoney.acg --ignore-security-exception 1000

5.8 参数: --kill-process-after-error

用于指定当应用程序发生错误时,是否停止其运行。如果指定此参数,当应用程序发生错误时,应用程序停止运行并保持在当前状态

(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)。

adb shellmonkey -p cn.emoney.acg --kill-process-after-error 1000

5.9 参数: --monitor-native-crashes

用于指定是否监视并报告应用程序发生崩溃的本地代码。

adb shellmonkey -p cn.emoney.acg --monitor-native-crashes 1000

5.10 参数: --pct-{+事件类别}{+事件类别百分比}

用于指定每种类别事件的数目百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比)
示例:
–pct-touch{+百分比}
调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)

adb shell monkey -p cn.emoney.acg --pct-touch 10 1000

–pct-motion {+百分比}
调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随件机事和一个up事件组成)

adb shell monkey -p cn.emoney.acg --pct-motion 20 1000

–pct-trackball {+百分比}
调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)

adb shell monkey -p cn.emoney.acg --pct-trackball 30 1000

–pct-nav {+百分比}

调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)

adb shell monkey -p cn.emoney.acg --pct-nav 40 1000

–pct-majornav {+百分比}
调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)

adb shell monkey -p cn.emoney.acg --pct-majornav 50 1000

六、Monkey测试结果分析

6.1 初步分析方法

Monkey测试出现错误后,一般的查错步骤为以下几步:

1、找到是monkey里面的哪个地方出错

2、查看Monkey里面出错前的一些事件动作,并手动执行该动作

3、若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样–复现

一般的测试结果分析:

1、 ANR问题:在日志中搜索“ANR”

2、崩溃问题:在日志中搜索“Exception” Force Close

6.2 详细分析monkey日志

将执行Monkey生成的log,从手机中导出并打开查看该log;在log的最开始都会显示Monkey执行的seed值、执行次数和测试的包名

首先我们需要查看Monkey测试中是否出现了ANR或者异常

然后我们要分析log中的具体信息,方法如下:

查看log中第一个Switch,主要是查看Monkey执行的是哪一个Activity,如下面的log中,执行的是com.tencent.smtt.SplashActivity,在下一个swtich之间的,如果出现了崩溃或其他异常,可以在该Activity中查找问题的所在

一般的log中
Sending Pointer ACTION_DOWN和Sending Pointer ACTION_UP代表当前执行了一个单击的操作
Sleeping for 500 milliseconds这句log是执行Monkey测试时
throttle设定的间隔时间,每出现一次,就代表一个事件
SendKey(ACTION_DOWN) //KEYCODE_DPAD_DOWN 代表当前执行了一个点击下导航键的操作
Sending Pointer ACTION_MOVE 代表当前执行了一个滑动界面的操作

Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间;Monkey finished代表执行完成。Monkey执行中断,在log的最后也能查看到当前已执行的次数

七、总结

在monkey测试中常用的命令组合有:

1、monkey -p com.yourpackage -v 500//简单的输出测试的信息

2、monkey -p com.yourpackage -v -v 500 //以深度为二级输出测试信息

4、monkey -p com.yourpackage -s 数字 -v 500//为随机数的事件序列定一个值,若出现问题下次可以重复同样的系列进行排错

5、monkey -p com.yourpackage -v --throttle 3000 500//为每一次执行一次有效的事件后休眠3000毫秒

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试小姐姐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值