Monkey测试结果分析

一、什么是monkey

  Monkey 测试是 Android 自动化测试的手段之一,它通过模拟用户的按键输入、触摸屏输入等,测试设备多长时间出现异常。Monkey 是一个命令行工具,可以运行在模拟器或实际设备中,通过向系统发送伪随机的用户事件流,实现对全系统或某个应用程序进行压力测试。

二、操作

  真机连接电脑,启动cmd执行命令:

  (如果是复制下面的命令,容易出错,命令是不能换行的。可以先复制到QQ对话框,修改后复制到adb中运行)

adb devices  //查看是否连接正常

adb shell monkey -p com.komect.community -s 3156  --hprof
--pct-touch 18
--pct-anyevent 0
--pct-motion 18
--pct-trackball 18
--pct-majornav 10
--pct-nav 0
--pct-syskeys 18
--pct-flip 0
--pct-pinchzoom 0
--pct-appswitch 18
-v -v -v --throttle 800 250000 > D:/monkey_test.log

三、指定测试的约束选项

1、指定测试的包

  对某一个具体的应用进行测试,可指定具体的包名。可以在系统目录/data/data下查找对应的包名:

//在cmd中执行
adb shell
su
cd /data/data
ls //找到自己的那个包名 //或者
adb shell
pm list package –f

  查找到对应的包名后,使用 monkey 时可用“-p”参数进行指定,此外还可以使用“-v”参数指定测试中反馈的信息。常用格式如下:

  monkey –p (指定的包名) –v 50

  注意:每个“-p”只能指定一个包,若需指定对多个包进行测试,则要用多个“-p”参数进行指定。

2、指定测试的类

  若需对某个具体类进行测试,可以使用“-c”参数指定,若需指定多个类别,则要用多个“-c”参数选项分别指定,每个“-c”只能指定一个类别。其使用的命令格式为:

  monkey –c (类名) -v 50

  注意:想要查看手机中所有包名及类名,需要有root权限。

3、指定测试的时间类型和频率

  Monkey 命令提供了众多选项用于指定事件的类型和发生频率, 例如触摸事件、 导航事件、轨迹事件(由一个或多个随机的移动组成,有时还伴随有点击)。有时为了测试某个具体应用,需要通过“事件”的反复发生来进行专项的功能测试,此时即可通过 monkey 的“--pct”选项来进行指定具体事件及其发生的频率。

1)命令使用格式如下示例:

  monkey --pct-syskeys 18 –v 1000

  以上命令表示系统按键事件的发生率为 18%,共测试 1000 次。

  注意:“pct”前面是英文输入状态下两个杠“-”。

2)还可以分别指定两个事件的发生频率,命令使用方式如下所示:

  monkey --pct-touch 18 --pct-trackball 18 –v 1000

  以上命令表示触摸事件和轨迹事件发生概率分别为 18%和 18%,共测试 1000 次。

3)通过“--throttle”指定事件间的间隔,可以延缓事件的发生,如:

  monkey --pct-nav 80 --throttle 1000 1000

  指定导航事件发生概率为 80%,每次事件相隔 1 秒中发生,共测试 1000 次。

Monkey运行结果中对应的事件为:

0:--pct-touch

//touch events percentage触摸事件百分比(触摸事件是一个在屏幕单一位置的按下-抬起事件)

1:--pct-motion

//motion events percentage手势事件百分比

(手势事件是由一个在屏幕某处的按下事件、一系列的伪随机移动、一个抬起事件组成)即一个滑动操作,但是是直线的,不能拐弯

2:--pct-pinchzoom

//pinch zoom events percentage二指缩放百分比,即智能机上的放大缩小手势操作

3:--pct-trackball

//trackball events percentage轨迹球事件百分比

(轨迹球事件包括一个或多个随机移动,有时还伴有点击。轨迹球现在智能手机上已经没有了,就是类似手柄的方向键一样)

4:--pct-rotation

//screen rotation events percentage屏幕旋转百分比,横屏竖屏

5:--pct-nav

//nav events percentage”基本”导航事件百分比

(导航事件包括上下左右,如方向输入设备的输入)老手机的上下左右键,智能机上没有

6:--pct-majornav

//major nav events percentage”主要”导航事件百分比

(这些导航事件通常会引发UI的事件,例如5-way pad的中间键、回退键、菜单键)

7:--pct-syskeys

//system(key) operations percentage”系统”按钮事件百分比

(这些按钮一般专供系统使用,如Home, Back, Start Call, End Call,音量控制)

8:--pct-appswitch

//app switch events percentage启动activity事件百分比。在随机的间隔里,Monkey会执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法

9:--pct-flip

//keyboard flip percentage键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回

10:--pct-anyevent

//anyevents percentage其他类型事件百分比。包括了其他所有的类型事件,如按键、其他不常用的设备上的按钮等等。

4、指定测试的调试选项

  Monkey 命令提供了若干用于控制测试过程的调试选项。例如参数“--ignore-crashes” ,将忽略应用程序崩溃或发生的任何异常,继续向系统发送事件,直到计数完成。使用命令格式如下:

  monkey --ignore-crashes -v 5000

常用的调试选项及说明如下:

--dbg-no-events

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

--ignore-crashes

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

--ignore-timeouts

通常,当应用程序发生任何超时错误(如“Application Not Responding”对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继 续向系统发送事件,直到计数完成。

--ignore-security-exceptions

通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。

--kill-process-after-error

通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。注意,正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态。

--monitor-native-crashes

监视并报告Android系统中本地代码的崩溃事件。如果设置了--kill-process-after-error,系统将停止运行。

--wait-dbg

停止执行中的Monkey,直到有调试器和它相连接。

5、monkey测试的停止条件

  Monkey Test执行过程中在下列三种情况下会自动停止:

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

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

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

  通过多次并且不同设定下的Monkey测试才算它是一个稳定性足够的程序。

  强制停止monkey测试的方法:

  • adb shell
  • ps | grep monkey(找到monkey对应的进程ID)
  • kill pid (返回的第一个数字就是pid)

6、执行monkey测试的关注点

 1)monkey只支持activity。App项目工程的manifest.xml中可以看到所有的activity,service。

  2)在跑的过程中,绝对不要使用两个不同版本的sdk、adb。绝对不要去使用阿德巴deivces,killserver。如果使用,会将服务终止。手机的monkey不会停止,但是log就没有了

  3)monkey本身虽然是一个random压力,性能测试工具,但是我们在做测试之前也需要做一些准备。

  4)monkey test和logcat是同步的。一般来讲,跑monkey的时间,RC版本之后,relaease之前,每天都需要去跑,一般一个应用上线前25w次。0 null point exception。

四、Monkey测试结果分析

1、日志保存操作

日志保存的操作方法:

//cmd命令中

Adb shell
cd sdcard
mkdir monkey
cd monkey (monkey主要内容) > monkey_test.txt //一般将日志导入电脑: D:/monkey_test.txt

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

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

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

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

3、一般的测试结果分析:

  搜索关键词:ANR、 Exception、 Null、 Error、 crash(Fatal)

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

  ANR=Application Not Responding
  在Android上,如果你的应用程序有一段时间响应不够灵敏(5秒内没有输入响应事件),系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。

  (2) 崩溃问题:在日志中搜索“Exception”

  Null 指针异常:空指针异常主要是有 NullPointerException 异常提示
  debug 异常:出现的是 IllegalStateException 异常
  低内存异常:出现的是 OutOfMemoryError 异常
  操作无响应异常:TimerOut(KeyDispatchingTimedOut 提示)
  RuntimeException 异常(操作无响应或应用的服务无法启动或连接)
  StaleDataException/readException 异常(android 数据库出现异常)
  IllegalArgumentException 异常(向函数传递了一个不正确或不合法的参数)

4、详细分析monkey日志

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

  首先我们需要查看Monkey测试中是否出现了ANR或者异常,具体方法如上述。

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

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

:Switch:#Intent;
action=android.intent.action.MAIN;
category=android.intent.category.LAUNCHER;
launchFlags=0x10000000;component=com.tencent.smtt/.SplashActivity;end
// Allowing start of Intent {act=android.intent.action.MAIN
cat=[android.intent.category.LAUNCHER]
cmp=com.tencent.smtt/.SplashActivity } in package com.tencent.smtt

  在下面的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 //代表当前执行了一个滑动界面的操作。
  :Sending Pointer ACTION_DOWN x=47.0 y=438.0
  :Sending Pointer ACTION_UP x=47.0 y=438.0
  Sleeping for 500 milliseconds
  :SendKey (ACTION_DOWN): 20 //KEYCODE_DPAD_DOWN
  :SendKey (ACTION_UP): 20 //KEYCODE_DPAD_DOWN
  Sleeping for 500 milliseconds
  :Sending Pointer ACTION_MOVE x=-2.0 y=3.0
  :Sending Pointer ACTION_MOVE x=4.0 y=-3.0
  :Sending Pointer ACTION_MOVE x=-5.0 y=-3.0
  :Sending Pointer ACTION_MOVE x=3.0 y=4.0
  :Sending Pointer ACTION_MOVE x=-4.0 y=1.0
  :Sending Pointer ACTION_MOVE x=-1.0 y=-1.0
  :Sending Pointer ACTION_MOVE x=-2.0 y=-4.0

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

  1)Monkey执行完成的log具体如下:

Events injected: 5000
:Sending rotation degree=0, persist=false
// Generated profiling reports in /data/misc
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=805050ms
(0ms mobile, 0ms wifi, 805050ms not connected)
// Monkey finished

  2)Monkey执行典型崩溃日志情况如下:

    // Injection Failed
** Monkey aborted due to error.
Events injected: 101
:Sending rotation degree=0, persist=false
// Generated profiling reports in /data/misc
:Dropped: keys=0 pointers=1 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=14710ms
(0ms mobile, 0ms wifi, 14710ms not connected)
** System appears to have crashed at event 101 of 3000 using seed 3156

  注:如果出现monkey崩溃,可以抓取手机系统日志分析:adb logcat -v time >D:/test_log.txt

  

  谢谢查看,继续努力。

Monkey测试结果分析的更多相关文章

  1. Monkey测试3——Monkey测试结果分析

    Monkey测试结果分析 一. 初步分析方法: Monkey测试出现错误后,一般的差错步骤为以下几步: 1. 找到是monkey里面的哪个地方出错 2. 查看Monkey里面出错前的一些事件动作,并手 ...

  2. Monkey测试结果分析【转】

    转自[http://www.douban.com/note/257030241/] Monkey测试结果分析 一. 初步分析方法: Monkey测试出现错误后,一般的差错步骤为以下几步: 1. 找到是 ...

  3. monkey测试===Monkey测试结果分析(系列三)转

    Monkey测试结果分析 一. 初步分析方法: Monkey测试出现错误后,一般的差错步骤为以下几步: 1. 找到是monkey里面的哪个地方出错 2. 查看Monkey里面出错前的一些事件动作,并手 ...

  4. 【转】Monkey测试3——Monkey测试结果分析

    Monkey测试结果分析 一. 初步分析方法: Monkey测试出现错误后,一般的差错步骤为以下几步: 1. 找到是monkey里面的哪个地方出错 2. 查看Monkey里面出错前的一些事件动作,并手 ...

  5. Android Monkey测试

    Monkey测试1——Monkey的使用 原文地址: http://www.douban.com/note/257029872/ (转自豆瓣,版权属于豆瓣及豆瓣网友,如有冒犯请见谅并联系我们) Mon ...

  6. android之monkey测试

    本文同时发表于本人个人网站 www.yaoxiaowen.com monkey测试算是android自动化测试当中最简单的一种工具了.虽然简单,不过对于测试app的稳定健壮,减少崩溃还是比较有用的.所 ...

  7. monkey测试===Android测试工具Monkey用法简介(转载)

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

  8. 手机monkey测试BUG重现及解决方法

    目录 1.1 Monkey测试简介...1 1.2 Monkey程序介绍...1 1.3 Monkey命令的简单帮助...2 1.4 Monkey命令参数介绍...2 1.5 Monkey测试步骤.. ...

  9. Monkey测试的策略和分析

    Monkey测试针对不同的对象和不同的目的采用不同的测试方案,首先测试的对象.目的及类型如下: 测试的类型分为:应用程序的稳定性测试和压力测试 测试对象分为:单一apk和apk集合 测试的目的分为:解 ...

随机推荐

  1. cs架构与bs架构的对比

    主要区别: Client/Server是建立在局域网的基础上的.Browser/Server是建立在广域网的基础上的. 1.硬件环境不同 C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网 ...

  2. 云笔记项目-Spring事务学习-传播NEVER

    接下来测试事务传播属性NEVER Service层 Service层中设置事务传播属性都为NEVER. LayerT层代码 package LayerT; import javax.annotatio ...

  3. win10卸载IE11后从新安装

    win10卸载IE11后想要从新安装,运气不好的话各种坑安装不上,运气好就不说了.这里笔者在知乎看到一种方法,亲测可用,记录如下: 设置--应用--应用和功能--管理可选功能--添加功能--Inter ...

  4. 每月IT摘录201904

    技术 1.项目,相比数量,规模更重要. 毫无疑问,在实际工作中,积极参与实际工程项目是快速积累经验最好的办法. 相对于项目的数量,项目的规模更加重要.项目的规模是可以比较容易判断的.实际服务用户的数量 ...

  5. snmp监控f5

    1.硬盘各分区使用情况 2.pool数量.vs数量 3.cpu使用率 4.内存使用率 5.电源 6.风扇 7.端口状态及流量 8.HA状态(主备情况及HA是否处于建立状态) 9.主备机同步状态

  6. unity 傅老师学习

    辅助插件 I tweeen anmition 补充valueto       https://www.bilibili.com/read/cv103358 开关门 iTween event脚本  iT ...

  7. rabbitmq 启动报错 Failed to get nic info

    这个报错 基本搜索不到什么有效信息 解决办法: hostnamectl set-hostname xxx.local # 先把rabbitmq进程杀掉$ ps -ef | grep rabbitmq ...

  8. Vue添加请求拦截器

    一.现象 统一处理错误及配置请求信息 二.解决 1.安装 axios  , 命令: npm install axios --save-dev 2.在根目录的config目录下新建文件 axios.js ...

  9. 使用 python 操作 mongodb 常用的操作

    pymongo 的安装命令 pip install pymongo. import pymongo 数据库及集合查询(创建) 连接数据库 查询数据库中的数据库 查询数据库中的集合 创建数据库和集合只需 ...

  10. python数据库进阶

    第1节 MySQL基础 一,说明 1,认识MySQL与创建用户 MySQL是最流行的关系型数据库管理系统之一,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL是一种关联数据管理系统 ...