简单介绍

顾名思义,Monkey就是猴子, Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试。 猴子什么都不懂, 只知道乱敲

Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上。 Monkey会发送伪随机的用户事件流,适合对app做压力测试

通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常

作用

Monkey 主要用于Android 的压力测试 自动的一个压力测试小工具, 主要目的就是为了测试app 是否会Crash

Monkey程序

  1. Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是: /system/framework/monkey.jar;
  2. Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey;

​如何找到monkey.jar​

  1. Monkey 命令启动方式:
    a)可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试

b)在PC上adb shell 进入Android系统,通过执行 monkey {+命令参数} 来进行Monkey 测试

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

Monkey 命令启动

启动模拟机

打开cmd命令行

前提是已经把adb.exe的目录添加到了环境变量
例如我的adb.exe在目录D:\Android\sdk\platform-tools下,那么我应该在环境变量中增加

Android Monkey 压力测试 介绍_monkey

输入命令

1、输入adb shell
然后用ls查看当前文件夹内容

C:\Users\00lix>adb shell
root@generic_x86:/ # ls
acct
cache
charger
config
d
data
default.prop
dev
etc
file_contexts
fstab.goldfish
fstab.ranchu
fstab.ranchu-encrypt
init
init.environ.rc
init.goldfish.rc
init.ranchu-common.rc
init.ranchu-encrypt.rc
init.ranchu.rc
init.rc
init.trace.rc
init.usb.rc
init.zygote32.rc
mnt
oem
proc
property_contexts
root
sbin
sdcard
seapp_contexts
selinux_version
sepolicy
service_contexts
storage
sys
system
ueventd.goldfish.rc
ueventd.ranchu.rc
ueventd.rc
vendor

2、应用程序包都在data下,我们输入cd data进入data文件夹

root@generic_x86:/ # cd data
root@generic_x86:/data # ls
adb
anr
app
app-asec
app-lib
app-private
backup
bootchart
bugreports
dalvik-cache
data
drm
local
lost+found
media
mediadrm
misc
nativetest
property
resource-cache
security
ss
system
tombstones
user

3、还有个data,所有的应用程序就在这个data下了,进入这个data,然后输入ls如下

root@generic_x86:/data # cd data
root@generic_x86:/data/data # ls
com.android.backupconfirm
com.android.backuptester
com.android.browser
com.android.calculator2
com.android.calendar
com.android.camera
com.android.captiveportallogin
com.android.carrierconfig
com.android.certinstaller
com.android.contacts
com.android.customlocale2
com.android.defcontainer
com.android.deskclock
com.android.development
com.android.development_settings
com.android.dialer
com.android.documentsui
com.android.dreams.basic
com.android.email
com.android.emulator.smoketests
com.android.exchange
com.android.externalstorage
com.android.fallback
com.android.gallery
com.android.gesture.builder
com.android.htmlviewer
com.android.inputdevices
com.android.inputmethod.latin
com.android.keychain
com.android.launcher3
com.android.location.fused
com.android.managedprovisioning
com.android.messaging
com.android.mms.service
com.android.music
com.android.netspeed
com.android.packageinstaller
com.android.pacprocessor
com.android.phone
com.android.printspooler
com.android.protips
com.android.providers.calendar
com.android.providers.calllogbackup
com.android.providers.contacts
com.android.providers.downloads
com.android.providers.downloads.ui
com.android.providers.media
com.android.providers.settings
com.android.providers.telephony
com.android.providers.userdictionary
com.android.proxyhandler
com.android.sdksetup
com.android.server.telecom
com.android.settings
com.android.sharedstoragebackup
com.android.shell
com.android.smoketest
com.android.smoketest.tests
com.android.soundrecorder
com.android.statementservice
com.android.systemui
com.android.vending
com.android.vpndialogs
com.android.wallpaper.livepicker
com.android.webview
com.android.widgetpreview
com.example.android.apis
com.example.android.livecubes
com.example.android.softkeyboard
com.google.android.apps.maps
com.google.android.apps.photos
com.google.android.gms
com.google.android.googlequicksearchbox
com.google.android.gsf
com.google.android.gsf.login
com.google.android.play.games
com.svox.pico
com.xy.test
jp.co.omronsoft.openwnn
jp.ne.neko.freewing.PinYinImePlus

4、com.xy.test是我们要测试的应用程序包
5、输入monkey -p com.xy.test -v 50

root@generic_x86:/data/data # monkey -p com.xy.test -v 50
:Monkey: seed=1500083557819 count=50
:AllowPackage: com.xy.test
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Event percentages:
// 0: 15.0%
// 1: 10.0%
// 2: 2.0%
// 3: 15.0%
// 4: -0.0%
// 5: -0.0%
// 6: 25.0%
// 7: 15.0%
// 8: 2.0%
// 9: 2.0%
// 10: 1.0%
// 11: 13.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.xy.test/.MainActivity;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.xy.test/.MainActivity } in package com.xy.test
:Sending Touch (ACTION_DOWN): 0:(993.0,681.0)
:Sending Touch (ACTION_UP): 0:(1002.1554,681.60016)
:Sending Touch (ACTION_DOWN): 0:(175.0,803.0)
:Sending Touch (ACTION_UP): 0:(178.15094,800.3044)
// Rejecting start of Intent { cmp=com.szy.yishopcustomer/.Activity.LoginActivity } in package com.szy.yishopcustomer
:Sending Flip keyboardOpen=false
:Sending Touch (ACTION_DOWN): 0:(961.0,1013.0)
:Sending Touch (ACTION_UP): 0:(960.958,1025.7177)
:Sending Touch (ACTION_DOWN): 0:(241.0,1270.0)
:Sending Touch (ACTION_UP): 0:(244.53517,1274.2416)
:Sending Touch (ACTION_DOWN): 0:(1003.0,1138.0)
:Sending Touch (ACTION_UP): 0:(1010.2556,1143.4761)
:Sending Touch (ACTION_DOWN): 0:(306.0,1059.0)
:Sending Touch (ACTION_UP): 0:(271.97604,1065.4177)
:Sending Trackball (ACTION_MOVE): 0:(-1.0,0.0)
Events injected: 50
:Sending rotation degree=0, persist=false
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=1830ms (0ms mobile, 0ms wifi, 1830ms not connected)
// Monkey finished

Monkey 命令 基本参数介绍

-p <允许的包名列表>

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

指定一个包:adb shell monkey -p com.shjt.map 100

指定多个包:adb shell monkey -p fishjoy.control.menu –p com.shjt.map 100

-v

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

Level 0 : adb shell monkey -p com.shjt.map -v 100 // 缺省值,仅提供启动提示、测试完成和最终结果等少量信息

Level 1 : adb shell monkey -p com.shjt.map -v -v 100 // 提供较为详细的日志,包括每个发送到Activity的事件信息

Level 2 : adb shell monkey -p com.shjt.map -v -v -v 100 // 最详细的日志,包括了测试中选中/未选中的Activity信息

-s(随机数种子)

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

monkey测试1:adb shell monkey -p com.shjt.map –s 10 100

monkey测试2:adb shell monkey -p com.shjt.map –s 10 100

–throttle <毫秒>

用于指定用户操作(即事件)间的时延,单位是毫秒;如果没有指定这个参数,monkey会尽可能快的 生成和发送消息。 示例:adb shell monkey -p com.shjt.map –throttle 3000 100