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. PhoenixFD插件流体模拟——UI布局【Splash | Mist】详解

    液体飞溅 | 水雾 本文主要讲解Splash | Mist折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Splash+ ...

  2. 微信小程序记账本进度七

    最后大体上完成了,但是好像少了点功能,整体并不是特别华丽

  3. Linux-Centon7安装以及配置

    环境:MacOS 10.13.6 虚拟机:VirtualBox6.0(VirtualBox-6.0.4-128413-OSX.dmg) Linux:Centos7(CentOS-7-x86_64-Mi ...

  4. ES查询-term VS match (转)

    原文地址:https://blog.csdn.net/sxf_123456/article/details/78845437 elasticsearch 中term与match区别 term是精确查询 ...

  5. @RefreshScope 配置方法

    <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> < ...

  6. Linux查看机器负载

    负载(load)是linux机器的一个重要指标,直观了反应了机器当前的状态.如果机器负载过高,那么对机器的操作将难以进行. Linux的负载高,主要是由于CPU使用.内存使用.IO消耗三部分构成.任意 ...

  7. vue实例的生命周期

    Vue实例的生命周期也就是这个实例从出生到死亡的过程,所以我在文档原图上把这个周期大致分为创建过程 | 运行过程 | 销毁过程三个阶段,不同结果或又分为一些小的阶段 在第一个阶段,创建阶段,会完成Vu ...

  8. Vim 入门:基础

    为工作或者新项目学习足够的 Vim 知识. -- Bryant Son 我还清晰地记得我第一次接触 Vim 的时候.那时我还是一名大学生,计算机学院的机房里都装着 Ubuntu 系统.尽管我在上大学前 ...

  9. google搜索引擎正确打开姿势

    Google搜索引擎 原文来自黑白之道微信公众号       https://mp.weixin.qq.com/s/Ey_ODP_mG00of5DPwcQtfg   这里之所以要介绍google搜索引 ...

  10. jquery取每个li元素下的第三个a元素

    $('li').find('a:eq(2)');