Monkey介绍

Monkey是由Android系统自带,基于Android设备的,模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常和Crash。

Monkey虽然可以根据一个指定的命令脚本发送按键消息,但不支持条件判断,也不支持读取待测界面的信息来执行验证操作。因此具有Monkey的随机性。这种随机给我们带来了一些困扰:

  • 手机困在一个界面出不去,导致测试重点偏移
  • 手机系统设置被调起,比如wifi被关掉,导致APP联网业务测不到
  • 手机在跑Monkey的时候锁屏,导致无法操作了
  • 手机跑Monkey时的运行状态无法查看比如内存

如何优化呢,可以在后面的文章中分析。

Monkey 前提

前提一:搭建Android SDK环境

因为monkey是Android SDK里自带的一个工具,因此搭建好adb环境是运行monkey的前提。

搭建的步骤可以参考这篇文章:https://blog.csdn.net/alice_tl/article/details/78363978

前提二:获取待测试APP的包名

获取APP包名的方式有多种,可以参考这篇文章:https://blog.csdn.net/alice_tl/article/details/87094030

Monkey 启动

Monkey程序在Android文件系统中的存放路径是:/system/framework/monkey.jar

Monkey.jar程序由一个名为monkey的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey

因此:

PC终端窗口:执行adb shell monkey {+命令参数}来进行Monkey测试

Android机或者模拟器上:执行monkey 命令,可以在Android机上安装Android终端模拟器

Monkey 命令

默认使用adb shell monkey -p 包名 次数来启动monkey

示例:adb shell monkey -p com.al.office 100

即:对com.al.office的包monkey随机运行一百次

可以通过参数控制测试的APP对象、每个随机操作之间的延迟时间、日志的详尽程度、以及随机数序列。

示例:adb shell monkey –p com.al.office –-throttle 100 –-pct-touch 50 –-pct-tracball 50 –v –v 1000

即:对com.al.office的包monkey执行1000次,其中触摸50%,

monkey的命令参数如下:

-p:允许的包名列表

用此参数指定一个或多个包之后,monkey将只允许系统启动指定的app。如果不指定包,monkey将允许系统启动设备中的所有app。

  • 指定一个包:adb shell monkey -p 包名 100
  • 指定多个包:adb shell monkey -p 包名1 –p包名2 100

-v:指定反馈信息级别,即日志的详细程度

总共分3个级别,分别对应的参数如下:

  • 缺省值,仅提供启动提示、测试完成和最终结果等少量信息:adb shell monkey -p 包名 -v 100
  • 提供较为详细的日志,包括每个发送到Activity的事件信息:adb shell monkey -p 包名 -v -v 100
  • 最详细的日志,包括了测试中选中/未选中的Activity信息:adb shell monkey -p 包名 -v -v -v 100

-s:随机数种子

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

  • monkey测试1:adb shell monkey -p 包名 –s 10 100
  • monkey测试2:adb shell monkey -p 包名 –s 10 100

--throttle:毫秒

指定用户操作(即事件)间的时延,单位是毫秒;如果不指定这个参数,monkey会尽可能快的生成和发送消息。

  • adb shell monkey -p 包名 --throttle 3000 100

随机事件类型

虽然monkey中输入的事件是随机产生的,但是可以指定输入事件类型的百分比,让其控制在我们需要的范围内。可以设定的事件类型有:

--pct-motion <percent>

指定滑动事件的百分比

--pct-trackball <percent>

指定轨迹球事件的百分比

--pct-nav <percent>

指定导航事件中,up、down、left、right等事件的百分比

--pct-majornav <percent>

指定导航事件中,back、menu等事件的百分比

--pct-syskeys <percent>

指定系统按键的百分比,包括HOME、Back、音量等。

--pct-appswitch <percent>

指定Activity之间切换的比例。

--pct-anyevent<percent>

指定任意事件的百分比

Monkey 日志分析

正常情况,如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间。如图所示:

(base) alicedembp:~ alice$ adb shell monkey -p com.al.office --pct-motion 15 --pct-trackball 30 -v -v  10 >/Users/alice/Downloads/output.txtbash arg: -pbash arg: com.al.officebash arg: --pct-motionbash arg: 15bash arg: --pct-trackballbash arg: 30bash arg: -vbash arg: -vbash arg: 10
args: [-p, com.al.office, --pct-motion, 15, --pct-trackball, 30, -v, -v, 10]arg: "-p"arg: "com.al.office"arg: "--pct-motion"arg: "15"arg: "--pct-trackball"arg: "30"arg: "-v"arg: "-v"arg: "10"
data="com.al.office"
arg="--pct-motion" mCurArgData="null" mNextArg=3 argwas="--pct-motion" nextarg="15"
data="15"
arg="--pct-trackball" mCurArgData="null" mNextArg=5 argwas="--pct-trackball" nextarg="30"
data="30"
:Monkey: seed=1558282689229 count=10
:AllowPackage: com.al.office
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER
//   + Using main activity com.al.fstandard.activity.SplashActivity (from package com.al.office)
// Selecting main activities from category android.intent.category.MONKEY
// Seeded: 1558282689229
// Event percentages:
//   0: 11.0%
//   1: 15.0%
//   2: 1.4666667%
//   3: 30.0%
//   4: -0.0%
//   5: -0.0%
//   6: 18.333334%
//   7: 11.0%
//   8: 1.4666667%
//   9: 1.4666667%
//   10: 0.73333335%
//   11: 9.533334%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.al.office/com.al.fstandard.activity.SplashActivity;end// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.al.office/com.al.fstandard.activity.SplashActivity } in package com.al.office
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 21    // KEYCODE_DPAD_LEFT
:Sending Key (ACTION_UP): 21    // KEYCODE_DPAD_LEFT
Sleeping for 0 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(-3.0,3.0)
:Sending Trackball (ACTION_MOVE): 0:(4.0,-1.0)
:Sending Trackball (ACTION_MOVE): 0:(0.0,-1.0)
:Sending Trackball (ACTION_MOVE): 0:(-1.0,4.0)
:Sending Trackball (ACTION_MOVE): 0:(-3.0,-2.0)
:Sending Trackball (ACTION_MOVE): 0:(2.0,-4.0)
:Sending Trackball (ACTION_MOVE): 0:(-1.0,0.0)
Events injected: 10
:Sending rotation degree=0, persist=false
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=19ms (0ms mobile, 0ms wifi, 19ms not connected)
// Monkey finished

Monkey finished 代表执行完成

这时查看 >/Users/alice/Downloads/output.txt 文件中已经有日志了~,即使Monkey 执行中断, 在log最后也能看到当前执行次数
测试结果分析:

  • ANR问题(程序无响应):在日志中搜索“ANR"(application no response)
  • 闪退问题:在日志中搜索"crash"
  • 异常:搜索"Exception",如果出现空指针,"NullPointerException"肯定是有bug
  • 强制退出:搜索"force closed"

Android Monkey入门及使用相关推荐

  1. Android Monkey测试入门:安装sdk、studio、模拟器,并分析monkey日志

    Android Monkey测试入门:安装sdk.studio.模拟器,并分析monkey测试报告结果 1. 安装Java JDK和android SDK 2. 安装Andriod studio及模拟 ...

  2. Android Framework入门介绍

    Android Framework入门介绍 https://blog.csdn.net/fu_kevin0606/article/details/79532710 framework概述 Androi ...

  3. monkey入门_Monkey 测试一 Monkey 入门

    Monkey 测试一 Monkey 入门 android SDK里自带的现成的测试工具有monkey 和 monkeyrunner两个.总的来说,monkey主要应用在压力和可靠性测试上,运行该命令可 ...

  4. [原创]Android Monkey 在线日志分析工具开发

    [原创]Android Monkey 在线日志分析工具开发 在移动App测试过程中,Monkey测试是我们发现潜在问题的一种非常有效手段,但是Android原生的Monkey有其天然的不足,数据不能有 ...

  5. 《Android 开发入门与实战(第二版)》——6.6节配置改变

    本节书摘来自异步社区<Android 开发入门与实战(第二版)>一书中的第6章,第6.6节配置改变,作者eoe移动开发者社区 组编 , 姚尚朗 , 靳岩,更多章节内容可以访问云栖社区&qu ...

  6. Android Volley入门到精通:初识Volley的基本用法

    1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...

  7. android+studio入门指南+pdf,android+studio使用指南v0.1.pdf

    androidstudio使用指南v0.1 <Android Studio入门指南>作者:毕小朋 博客:/wirelessqa Android Studio入门指南v0.1 作者:毕小朋 ...

  8. [原创]Android Monkey测试工具使用介绍

    [原创]Android Monkey测试工具使用介绍 1 Android Monkey介绍 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件 ...

  9. Android Monkey(转载)

    这两天在读Android Monkey的源代码.代码不多,放出分享. 我现说一下,Monkey是干什么的:简单的说就是,模拟用户的touch screen和keyboard的输入.其实这个功能就已经很 ...

最新文章

  1. OPPOr7sm恢复出厂设置一直卡在开机界面
  2. Django Bakend--后台管理插件开发-01
  3. 如何更改PostgreSQL用户密码?
  4. ARC中的三个关键字
  5. 将矩阵转为一行_LeetCode1253:矩阵重构
  6. Angular里遇到的一个依赖注入问题以及解决办法
  7. Java对象内存图一
  8. 具备什么样的能力,才能在人工智能企业中获得一席之地
  9. spring5.x cxf3.4.x 服务端和客户端 非maven版本
  10. 《Android 应用测试指南》——第2章,第2.4节包浏览器
  11. windows下安装TensorFlow(Win8 + Anaconda4.4 python3.6)
  12. C++程序设计必知:多文件结构和编译预处理命令
  13. 基于 ARIMA-GARCH 模型人名币汇率分析与预测[论文完整][2020年]
  14. 保定市2017年计算机高考试题,保定三中名师第一时间点评2017年高考理综试卷
  15. 【在野利用】Apple Mail多个严重漏洞在野利用通告
  16. 在线网校教育平台的开发,题库的搭建必不可少
  17. Oracle中 to_date()函数用法详解
  18. 经历与价值(刘学愚)
  19. 如何用python求解方程组_用Python的Numpy求解线性方程组
  20. NLI:Natural Language Inference

热门文章

  1. 使用命令修改linux的时间,Linux使用date命令修改日期时间详解
  2. Vue公共组件的封装
  3. Multiple comparisons problem
  4. js对象深拷贝(深克隆)
  5. 隐藏video的各种控件
  6. 3分钟,教你画三种软软萌萌的小熊猫~超详细教程,看完即可上手哦~
  7. icloud空间小,使用其他云作存储
  8. poj 2244 最短路 和 poj 1874 畅通工程续 dijkstra(迪杰斯特拉)
  9. iOS打包IPA教程
  10. python 将三维数据转为二维_python将三维数组展开成二维数组的实现