十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。

Monkey 测试

上一篇 / 下一篇  2011-08-20 22:33:00 / 个人分类:Android

文章来源
  • 文章来源:【转】

Monkey是一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。Monkey包括许多选项,它们大致分为四大类:51Testing软件测试网5k%k*x S5P1}@&BI)~.t
51Testing软件测试网$p.j~&bW{ `tO
· 基本配置选项,如设置尝试的事件数量。51Testing软件测试网`/TeX$LBzp
51Testing软件测试网*M3G+sA%})Q
· 运行约束选项,如设置只对单独的一个包进行测试。
-p/_rA.l-k}$]6{1d0
e.J+QIQ:iD0· 事件类型和频率。
.x?l vm9u)CE051Testing软件测试网o3q%k#rL6T
· 调试选项。51Testing软件测试网5xAaI#L*NBpjTk^
51Testing软件测试网wG1Po+U:CD,_ L6_
在Monkey运行的时候,它生成事件,并把它们发给系统。同时,Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理:
4A0^w%V G T9~e9o051Testing软件测试网f"S$[f1c4`
· 如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。
(Uy?0QK'JV051Testing软件测试网E8sV9Z^qiF
· 如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。
lM2G%O"CY4P@0
k3sL'U3^)g:M1@8E0· 如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。51Testing软件测试网v)tbi(FuuS'A

)?j"fs4BSC0按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。 
7yvn#ko {8t&g C-|:s7Ys0
(Z$W1[,O)X,~u`UbU051Testing软件测试网*M%c1\7Z Q:Xe1x1CX
51Testing软件测试网uM1Cp KG/V
Monkey基本用法 51Testing软件测试网 _%X)|(}9t;G
51Testing软件测试网_7}*n5SKn QK6o#L
可以通过开发机器上的命令行或脚本来启动Monkey。由于Monkey运行在模拟器/设备环境中,所以必须用其环境中的shell来进行启动。可以通过在每条命令前加上adb shell来达到目的,也可以进入Shell后直接输入Monkey命令。基本语法如下:
&| c\(w&U k EN_051Testing软件测试网J,|bs9n {
$ adb shell monkey [options] 
.xL.^W8s{051Testing软件测试网FC/HO9Gz
如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:
,u:GQ!~@Sfa051Testing软件测试网PmL~d0T
$ adb shell monkey -p your.package.name -v 500 51Testing软件测试网3\XzYo$e ag
51Testing软件测试网 E(ZX1cZ

2XCS%A7C_,ZP#p i7y0
C*q!b2?Ack{RHP1y0命令选项参考
%]i.d'o"Y)pa(_c0
G(fe"t C5U5H%R0下表中列出了Monkey命令行可用的全部选项。
51Testing软件测试网6N:S:h'bC

类别
D6_d7Z&KR0选项
;|0|-qS2c0说明51Testing软件测试网5]8yi ldf^_b9W
51Testing软件测试网` v1X B$Z
常规51Testing软件测试网7y5mgsV)g
--help51Testing软件测试网XXIA.x~ I
列出简单的用法。51Testing软件测试网*xDz$DQOy8HuIs.C

E+fU$xB0-v
t B3T]!o K0命令行的每一个-v将增加反馈信息的级别。Level 0(缺省值)除启动提示、测试完成和最终结果之外,提供较少信息。Level 1提供较为详细的测试信息,如逐个发送到Activity的事件。Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。51Testing软件测试网y d5h0gB/?w/P

-C"RCb?5D0事件51Testing软件测试网:q"M.ep\*I.K ~t
-s <seed>51Testing软件测试网tZQ1p+^1m b|
伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件序列。51Testing软件测试网1E;L9}E'E1h:?
51Testing软件测试网+ql(tM)f:j)ya0r
--throttle <milliseconds>51Testing软件测试网:dp[$H5P!_1O${
在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定该选项,Monkey将不会被延迟,事件将尽可能快地被产成。51Testing软件测试网*Bg.I o v2@

&liU;y*};sL0--pct-touch <percent>
Wxk#R\'EK [0调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。51Testing软件测试网#X*}$sC BS r
51Testing软件测试网\%^3RY:A
--pct-motion <percent>51Testing软件测试网)G(a0w)ah^Lk
调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)。51Testing软件测试网3ZwvV:o\

7}-kZ BKJZ0--pct-trackball <percent>51Testing软件测试网ZB#\k!M'Yd^ [P
调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。51Testing软件测试网@:hN D6^'G3lNuY

#d3v ~2W+Hd(lk0--pct-nav <percent>
g6?\ s$hb0调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)。51Testing软件测试网2K|GF]3K |?

%Oi[%o|]0--pct-majornav <percent>
4@q}$[-Y`0调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)51Testing软件测试网']TXf1X

-|0~*Q8F9a D;D4y0--pct-syskeys <percent>
7If6pRNn1Q0调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)。51Testing软件测试网 H0k3},rk{ K
51Testing软件测试网X*f/Tp,}U0E!Q
--pct-appswitch <percent>51Testing软件测试网` z3|%u,z0xH_#~#v'i/YK
调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法。
c'dE8xYp(FRz%W0
+{YJ M3V+o3S0--pct-anyevent <percent>
H;W(yZ9f@7i/\0调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。
|g-uy#f2ztd0
uVU&I q-Xe2qk0[0约束限制
F3~.ejY:@x+S0-p <allowed-package-name>51Testing软件测试网 eP[ r+ds:wE"X
如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。如果你的应用程序还需要访问其它包里的Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个 -p选项,每个-p选项只能用于一个包。51Testing软件测试网 Z6ycuT,o9T

'j$zpu+Ta4[0-c <main-category>51Testing软件测试网MA k#v }J8FG[
如果用此参数指定了一个或几个类别,Monkey将只允许系统启动被这些类别中的某个类别列出的Activity。如果不指定任何类别,Monkey将选 择下列类别中列出的Activity: Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多个类别,需要使用多个-c选项,每个-c选 项只能用于一个类别。51Testing软件测试网X c+CCJm{)p

G&E}/H l0调试
{$y(gZ |/p0--dbg-no-events
A(A/jq {Mm`0设置此选项,Monkey将执行初始启动,进入到一个测试Activity,然后不会再进一步生成事件。为了得到最佳结果,把它与-v、一个或几个包约 束、以及一个保持Monkey运行30秒或更长时间的非零值联合起来,从而提供一个环境,可以监视应用程序所调用的包之间的转换。51Testing软件测试网[~"D:W"l*|2}

b c.}r["guzv"K0--hprof51Testing软件测试网5j8{w6YL'e
设置此选项,将在Monkey事件序列之前和之后立即生成profiling报告。这将会在data/misc中生成大文件(~5Mb),所以要小心使用它。51Testing软件测试网.E p:i b`B I2Z

{ Js0oDN0--ignore-crashes51Testing软件测试网:m9e4s2c!Pset4k
通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。51Testing软件测试网3mJ#h mC!aQ,bvE

4z$k2F+Yx#Rw$e0--ignore-timeouts51Testing软件测试网[5dmp(O P w/s
通常,当应用程序发生任何超时错误(如“Application Not Responding”对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。51Testing软件测试网6Q C!~Vf"@'D`

H-RJN!mj0--ignore-security-exceptions51Testing软件测试网S'Fwj%g8\~S
通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。51Testing软件测试网hD`.ID.Mc2bdc
51Testing软件测试网]mj#xn k
--kill-process-after-error51Testing软件测试网&E|T-FV
通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。注意,正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态。
1gl]/tr2B`K5g0
B"_ S@X8x\)O[!X0--monitor-native-crashes51Testing软件测试网g$a:C0G ~hQH
监视并报告Android系统中本地代码的崩溃事件。如果设置了--kill-process-after-error,系统将停止运行。
+@TFt [0
yaxWk}0--wait-dbg51Testing软件测试网a h [!kDj'\
停止执行中的Monkey,直到有调试器和它相连接。

_'^D o$JG0

Uh;^2sPur;RW%_:t0

接下来看一个实例51Testing软件测试网#xjV6@ VR^;R7r R

Monkey的用法是$ adb shell monkey -p your.package.name -v 500 ,首先,我们要找到应用程序在Emulator中所对应的包名,我一开始是一个个目录找得,前7步完成了这项工作,最终发现应用程序包都在data/data下,你可以在shell中cd data/data,然后ls查看当前Emulator中的所有应用程序包。51Testing软件测试网 i6}CAcz1XC9R!M)X7d

假如我们想对SDK中的APIDemos做压力测试,51Testing软件测试网(G-Pr#N;qI6~d \

1.在Eclipse中新建工程,将

[ M"TnmM0

F:\android-sdk-windows\platforms\android-2.0\samples\ApiDemos添加到工程中点击运行,此时,他的APK应该加载到了Emulator上51Testing软件测试网 Uk G Q#DH2\7s

2.在命令行输入adb shell

wmk.w!Z$F)U1e9G7I:g0

3.输入ls查看当前文件夹下的目录,执行结果如下

%R)shDn}b/d0

C:\Documents and Settings\Administrator>adb shell
L;x`~l+aI$?0# ls
4Y SD#KC`uJ0ls51Testing软件测试网O3v)U9O7oq0ma
sqlite_stmt_journals
l qVh%~!f%H#^0config
+M%\sI"F8j(M T4y0cache51Testing软件测试网@-NX,hQ:T
sdcard51Testing软件测试网zW b?#c&jH
d51Testing软件测试网;rv#m`/aH
etc
3xNsDY'h2~8LC0system51Testing软件测试网B1Mz:?uUKNb
sys51Testing软件测试网Yc Q HW Y$o
sbin51Testing软件测试网)r,A%G A'b7GW
proc
.kN RphM0init.rc51Testing软件测试网Q5x,j;J,` ?
init.goldfish.rc51Testing软件测试网2g\:L-SI{ u
init
dB#S.S} F^0default.prop
k SD9{fb _g'm8oM{;W0data
xn!Q3plBj$p s0root
1vRF&XSds0dev

&l"d m\5Y]0

4.应用程序包都在data下,我们输入cd data进入data文件夹,如下51Testing软件测试网 |3tq$K _%w8wwqI

# cd data51Testing软件测试网4S$@E1UoE~\
cd data
51Testing软件测试网EM2ICB}6H

5.输入ls查看文件夹下的内容,如下所示:

` u FHO`1m#TV0

# ls
X%m5c9Gyk?[e0ls
EeFp_L~,h0misc51Testing软件测试网 R0Lv:r#V
local
!y"IQp IqR(mo;TH Q0data51Testing软件测试网5O3Ro lx'U
app-private51Testing软件测试网9C5HDB(Z
app
0L5E R%Vwe2D2O_0property
"Q:LtHv` P$F2d0anr
P9v^D.Yz3JC0r0backup
p.u7UO5e9S#j0dontpanic51Testing软件测试网#ifr*s l@d|3Q
dalvik-cache51Testing软件测试网qpH#W%kuOeF$F&]x
system
bzY;a:~2^R6gDm0lost+found
51Testing软件测试网4DZgtA*n!h8|;Rm

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

i6c`3wjR2FU)u0T0

# cd data
)s9` E8b?g0cd data
4a,~9O4s@m+[5ri0# ls
3l"QY[d{0ls
4Gm,A$T['zZR0com.android.mms
#]G,PY/e\5t2RcJ0com.android.providers.applications
meak\IAW!^0com.android.globalsearch51Testing软件测试网5J0en[`
com.android.calculator2
a7@-C1Rr};^+W0com.android.spare_parts
u;H[NS7{.Rc4x0com.android.gesture.builder51Testing软件测试网$h0Ro IEe6s*l6QX6Q V
com.android.music51Testing软件测试网iq2zt O6POw4~2Q
com.android.sdksetup
OMi4i1?9R?0com.android.packageinstaller51Testing软件测试网D,B P"`1dP{5t W
com.android.fallback
7MeUQ{A!IHF0com.android.providers.settings
+M-M(NX*j7nu0O0com.android.providers.drm51Testing软件测试网7]UKi.\%Q.g
com.android.development
hZ6RN h%fob9a0com.android.providers.telephony
!H*qp];B}&y'r0com.android.inputmethod.pinyin51Testing软件测试网 Z2cNF Y
com.android.htmlviewer51Testing软件测试网5e Z a2oc q
com.android.settings
D F+KAO0com.android.netspeed51Testing软件测试网W2AB1?9Kbo4Q
com.android.providers.userdictionary
wow-HyT0com.android.browser51Testing软件测试网:jcsW W jO%x
com.android.contacts
-D5fU)t9aM0com.android.alarmclock
'? S&QH)mpU4Y0com.android.camera
SB.hHY*A5Po:}0com.android.providers.contacts51Testing软件测试网X c4}Ey5}"\3j
jp.co.omronsoft.openwnn
/b?5a eo(C&F_ t0com.android.launcher
'q:mH1EGr0com.android.phone51Testing软件测试网*T+Np5Ls^s
com.android.soundrecorder
q7T(Su|!Q9B0com.google.android.providers.enhancedgooglesearch51Testing软件测试网-V/X"\`1g
com.svox.pico
r\d(]$u BB,QM0com.android.customlocale
eN'@v[YR0com.android.term51Testing软件测试网a.B-I/g6n(hd r
com.android.providers.downloads51Testing软件测试网#qg][ q
com.android.providers.media51Testing软件测试网,bEL F(hObg-|
com.android.email
VN6V5A7Uxs0android.tts
"w E5m3X,B0com.android.inputmethod.latin
.Qbv2G&W N0com.android.server.vpn51Testing软件测试网1E)x/[+bl2\`
com.example.android.apis
51Testing软件测试网3rs;G[2bq

51Testing软件测试网S3s E OG5d

7.最后一个就是我们刚才加载的APIDemo的应用程序包51Testing软件测试网0zNP/Ym Jit#c

51Testing软件测试网 pi2Z"l]

8.可以直接输入monkey -p com.example.android.apis -v 50,结果如下,也可以退出shell,在命令行输入,adb shell monkey -p com.example.android.apis -v 500 ,运行过程中,Emulator中的应用程序在不断地切换画面,可以看一下,呵呵:)51Testing软件测试网tpBmI"t

51Testing软件测试网*rf0t"R(s,L'x

# monkey -p com.example.android.apis -v 5051Testing软件测试网'W-QC'w)IQ#j_l5@Q&t
monkey -p com.example.android.apis -v 50
B@1r*f5_F[r0:Monkey: seed=0 count=50
8~K4xvyw:g6\0:AllowPackage: com.example.android.apis51Testing软件测试网bt d7w6HmJTn^
:IncludeCategory: android.intent.category.LAUNCHER51Testing软件测试网/z A9ppXC2Y6RB*xL
:IncludeCategory: android.intent.category.MONKEY
nK6dZ me}h}0// Event percentages:
6Y _L\,\0//   0: 15.0%
\:sRY V L0M&l;c1r`0//   1: 10.0%
]/}9S\Mh0//   2: 15.0%51Testing软件测试网I7EE_*v~1j
//   3: 25.0%51Testing软件测试网v W/n1@!t N%kt+C T
//   4: 15.0%
ZQ@9F$w7x&voj&Y0//   5: 2.0%
gfE!qU0//   6: 2.0%
'b8kW k(v+W0//   7: 1.0%51Testing软件测试网2O vNdU
//   8: 15.0%51Testing软件测试网7F e@5bc6nmG[
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.categ51Testing软件测试网 d(P1_u&cV/aO
ory.LAUNCHER;launchFlags=0x10000000;component=com.example.android.apis/.ApiDemos
qqP#l:_0;end51Testing软件测试网|~.X;t^.y!?v z+r
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.in51Testing软件测试网-G7^L;Q-Y`-iQ+B
tent.category.LAUNCHER] cmp=com.example.android.apis/.ApiDemos } in package com.
SYdUEB V:Al.y-w0example.android.apis
:g0Mw#T!W9xq%I_$o ?0:Sending Pointer ACTION_MOVE x=-4.0 y=2.0
1uw z~jI TL K0:Sending Pointer ACTION_UP x=0.0 y=0.051Testing软件测试网Z1lA;w,f7f3TE5g
    // Allowing start of Intent { cmp=com.example.android.apis/.ApiDemos } in pa
t)w$ye9H"T:_LV0ckage com.example.android.apis
s8h"f[-v\ f0:Sending Pointer ACTION_DOWN x=207.0 y=282.051Testing软件测试网'|g6m:DB
:Sending Pointer ACTION_UP x=189.0 y=289.0
-t,^]2h2fbF0    // Allowing start of Intent { cmp=com.example.android.apis/.app.Intents } in
ZO,}6Y:ab1kj0package com.example.android.apis
#u E7WY_*h3e[,V:s0:Sending Pointer ACTION_DOWN x=95.0 y=259.0
,FI:D%w |W0:Sending Pointer ACTION_UP x=95.0 y=259.0
q;ZO(z's0:Sending Pointer ACTION_DOWN x=295.0 y=223.0
bCSr2n"?OaJ$N0:Sending Pointer ACTION_UP x=290.0 y=213.0
`%q(}~D.i/i E m0:Sending Pointer ACTION_MOVE x=-5.0 y=3.051Testing软件测试网 ~ TD[D8PP'v
:Dropped: keys=0 pointers=0 trackballs=0 flips=051Testing软件测试网 ^!U-Ss JW:Z G7`
## Network stats: elapsed time=3799ms (3799ms mobile, 0ms wifi, 0ms not connecte
e8H`Q'Wy Ii0d)51Testing软件测试网;Ja.TVoU
// Monkey finished
51Testing软件测试网C+u a2q k+lt*_4^&c


TAG: Android Monkey

 

评分:0

我来说两句

Open Toolbar