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

Monkey 测试

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

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

Monkey是一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。Monkey包括许多选项,它们大致分为四大类:
F*q6A8H/F0z6m [;c.oV051Testing软件测试网,~8JM7M'[x
· 基本配置选项,如设置尝试的事件数量。51Testing软件测试网_ cT3dn2?l2hY I
51Testing软件测试网l3M%TZ{)@Ol
· 运行约束选项,如设置只对单独的一个包进行测试。51Testing软件测试网,cb \{ F$?iG
51Testing软件测试网6U7L$f8z,K
· 事件类型和频率。51Testing软件测试网 jW%XJD T.l#a
51Testing软件测试网Y6MI4hln
· 调试选项。51Testing软件测试网VE5_k_!OO
51Testing软件测试网xa%x,K:p3{~;X
在Monkey运行的时候,它生成事件,并把它们发给系统。同时,Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理:
:V3B.mij`^'`0
ol(d\Z;K_0· 如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。51Testing软件测试网"DH D~xe P

{ [5{ RZ"E0· 如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。
Z!}F_@e051Testing软件测试网}@_4L;m-D
· 如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。51Testing软件测试网2x\]4S(F!l@t
51Testing软件测试网-w6~mb AN
按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。 51Testing软件测试网&Bw;zxg A7C5v.F h

N E)o ?0V.[0
g)Ur*^q(C0
WbWy*B L0Monkey基本用法 
Q;Wv7p,l`f051Testing软件测试网 z2u$e(Hz2q O
可以通过开发机器上的命令行或脚本来启动Monkey。由于Monkey运行在模拟器/设备环境中,所以必须用其环境中的shell来进行启动。可以通过在每条命令前加上adb shell来达到目的,也可以进入Shell后直接输入Monkey命令。基本语法如下:
M0B#tn[-FB b+m1?051Testing软件测试网(x.xH+j(E~mi7Gx3G
$ adb shell monkey [options] 51Testing软件测试网4bo)} z$`j

FGnq'] zq0如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:51Testing软件测试网4YVi6yd:IA%y

Vrz)C{la3V:Y0$ adb shell monkey -p your.package.name -v 500 51Testing软件测试网8eg(q\1`q&hR
51Testing软件测试网u0iZ}#j*}
51Testing软件测试网lRI2OJ^ tZl \
51Testing软件测试网$w,[P){R,ME$i
命令选项参考
^%f"GQR051Testing软件测试网9P*j QM s*S
下表中列出了Monkey命令行可用的全部选项。
51Testing软件测试网ZYqU)~3a"Vk

类别
1q v9Zc7_+m0选项51Testing软件测试网P"Ob@#a@8`#c
说明51Testing软件测试网A,a k2HTc

QFP*\'K%iS0常规51Testing软件测试网t/Ku{CO
--help51Testing软件测试网L#g'K.^i C)?&p E
列出简单的用法。51Testing软件测试网(M-w,r3D$j].S;E;{iz4j
51Testing软件测试网yvwH m ul
-v
0\&gs EFW0命令行的每一个-v将增加反馈信息的级别。Level 0(缺省值)除启动提示、测试完成和最终结果之外,提供较少信息。Level 1提供较为详细的测试信息,如逐个发送到Activity的事件。Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。
VIs'Ui0
SS"M#K+NI0事件
u+U3N,B/U mr4HV0-s <seed>
M!B1m'J!w c4wsD ^9S0伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件序列。
%LB,wU9{0
{0vF1v$n0--throttle <milliseconds>51Testing软件测试网Ni7A-g_.] gK7_
在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定该选项,Monkey将不会被延迟,事件将尽可能快地被产成。51Testing软件测试网$f8iNb r%lr
51Testing软件测试网%X K?oB-tF
--pct-touch <percent>
!T&e pP'x*o2J l+d0调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。51Testing软件测试网9beR&Z;M5`0U+e1L

8nwU)t$e!nN0--pct-motion <percent>51Testing软件测试网_w$n7jm1}!n
调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)。51Testing软件测试网N C MHH9R
51Testing软件测试网r#S6C]fx
--pct-trackball <percent>
0N$Ve.xBTP2i0调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。
o O&}-E6HX~Pe5p051Testing软件测试网3e ]8iB1{1N0n0E_ b6?
--pct-nav <percent>
E+x3ccS7KO0调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)。51Testing软件测试网'R-yd`4P?:RP#U#Ry
51Testing软件测试网8\0N*Uy5GN
--pct-majornav <percent>51Testing软件测试网&_q3p)U g1`,{`
调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)51Testing软件测试网 Y^ bl)C*AS|z8B

K\;^ J&E!WN0--pct-syskeys <percent>
gc i+?E|_T0调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)。51Testing软件测试网jq:nR#C.P9`.O6M
51Testing软件测试网xyc!PM}
--pct-appswitch <percent>51Testing软件测试网3^c%f {s&j#q\
调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法。51Testing软件测试网4n |0RJ4a
51Testing软件测试网4L+qXq {,E+N
--pct-anyevent <percent>
r8R5?1Qzr"B0调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。
_ u0pYa v[&Y*BI0
#l|3`g}J%F0约束限制51Testing软件测试网vl!n od I
-p <allowed-package-name>51Testing软件测试网y_4hd)[R!z Ip
如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。如果你的应用程序还需要访问其它包里的Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个 -p选项,每个-p选项只能用于一个包。51Testing软件测试网n ~ c?I$p&z5d+r
51Testing软件测试网C2Eu\|$J v.o&Ex
-c <main-category>51Testing软件测试网IDh2]]
如果用此参数指定了一个或几个类别,Monkey将只允许系统启动被这些类别中的某个类别列出的Activity。如果不指定任何类别,Monkey将选 择下列类别中列出的Activity: Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多个类别,需要使用多个-c选项,每个-c选 项只能用于一个类别。51Testing软件测试网Z~%]#maT e
51Testing软件测试网2`F6i B Cc
调试
[W1X X:g9F})?gA v0--dbg-no-events
0`9Mo.N,Gj0|*j)S6F0设置此选项,Monkey将执行初始启动,进入到一个测试Activity,然后不会再进一步生成事件。为了得到最佳结果,把它与-v、一个或几个包约 束、以及一个保持Monkey运行30秒或更长时间的非零值联合起来,从而提供一个环境,可以监视应用程序所调用的包之间的转换。51Testing软件测试网*A+an-W)?&Gt v)I

IV L S-Rm'A0--hprof
Btg%N%N8Es1e0设置此选项,将在Monkey事件序列之前和之后立即生成profiling报告。这将会在data/misc中生成大文件(~5Mb),所以要小心使用它。51Testing软件测试网nx)RD$mMI1Q

)z(L8M*a Lg;m[0--ignore-crashes
X(fxtIh0e0通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。
3p:B'm8[+e0
?xm3\,N!t6C0--ignore-timeouts51Testing软件测试网8XB$qs6G E
通常,当应用程序发生任何超时错误(如“Application Not Responding”对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。
\9} }uWc~,jgJ0
n@4M{3h#fd3E9f0--ignore-security-exceptions51Testing软件测试网F nc+Zu1[ l\5n3f^
通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。51Testing软件测试网+e!tY8q!T%q:lV
51Testing软件测试网4~(I\4s*apy0|R%b
--kill-process-after-error
6p+Z p-\3w e X$p0通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。注意,正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态。
q:Y A [aEh V0
*]` }:C c0--monitor-native-crashes
5x5vPP@0|mx0监视并报告Android系统中本地代码的崩溃事件。如果设置了--kill-process-after-error,系统将停止运行。51Testing软件测试网]4My%d1Lp.b9A

Ds!OD*v%j;^ Z7nf0--wait-dbg
7D0yi$J-s)f'g:h0停止执行中的Monkey,直到有调试器和它相连接。
51Testing软件测试网 V4L.~(m/~\5|;i

51Testing软件测试网S nIk*yXsd{

接下来看一个实例

m/^;K U _PC0

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

假如我们想对SDK中的APIDemos做压力测试,51Testing软件测试网/bq9w(jFs)}

1.在Eclipse中新建工程,将

"UuH5}'~b7XR{0

F:\android-sdk-windows\platforms\android-2.0\samples\ApiDemos添加到工程中点击运行,此时,他的APK应该加载到了Emulator上

|2[ EZT1[X0

2.在命令行输入adb shell51Testing软件测试网G-w$_(w/z$j3m*l

3.输入ls查看当前文件夹下的目录,执行结果如下51Testing软件测试网9J@%HM$V.B~D

C:\Documents and Settings\Administrator>adb shell
p:f o x h0]:g0# ls
I2LZzr0ls
)Q0iPu"e ]o0sqlite_stmt_journals51Testing软件测试网)]Q'Z\;d ~
config51Testing软件测试网zo'lpyBc
cache
~/{YD }'j#k0sdcard51Testing软件测试网#Z#k'?Y [(]!]&_
d51Testing软件测试网Lv8C#aJ;K^
etc51Testing软件测试网zWB$|'q*c6dX6Fu+Z
system
s3|2F}-?0sys
;Q0M||z$e0sbin
k7Ra+@1z$| J2Cy0proc51Testing软件测试网R$`%z?'I` gzc!y
init.rc
#cQ5_w.G)~ hb0init.goldfish.rc
?;R.EF+O;P4Q0init51Testing软件测试网c0qx ^ g Nywj
default.prop
[Ml4D8a6u0data51Testing软件测试网-hE Q0]z+N/]l
root
h,W:V1c-o&\\0T _0dev

Y3u$D5`VN0

4.应用程序包都在data下,我们输入cd data进入data文件夹,如下51Testing软件测试网*i#H/c |"i4T-E

# cd data51Testing软件测试网-]m8j B{9S xV
cd data

d2O*ZS+U9O0

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

DO)_Y_jeQ0

# ls51Testing软件测试网*KP ]|] chF
ls51Testing软件测试网 i%jc2`)I wpHRs
misc
%Jb9gnu'XI%_ I)?0local
2k!}V1l I \-@ [v,t0data
*{y(NY'\ m P0app-private
X+\~!zJU0app
sEZFK n2R;tq p!x0property51Testing软件测试网wG,?8NE#n
anr
u.Q6b x| |.O9W-I0backup
`1CBsS B0dontpanic51Testing软件测试网N5`^$IA1fW
dalvik-cache
%z9n"jv5f DK4gm5V0system51Testing软件测试网d gD5u4{LK
lost+found

E0Tb#bl&O~8gM0

6.还有个data,所有的应用程序就在这个data下了,进入这个data,然后输入ls如下:51Testing软件测试网r wi4L_5t5y

# cd data51Testing软件测试网(^e)LF(Zvt~1bAK
cd data
#^:ruL lE0# ls51Testing软件测试网qG.c,f,ks#c
ls51Testing软件测试网#A b&j4yH
com.android.mms51Testing软件测试网.mhQP.y?
com.android.providers.applications
Lx:N5h;jo#UmB0com.android.globalsearch
YC"l/K i ^^0com.android.calculator2
M*skZ ~y0com.android.spare_parts
Vk*S%? aC ^ dX0com.android.gesture.builder
[Jlp(j)SHC0com.android.music
`4L?m\ o(Rsn0com.android.sdksetup51Testing软件测试网4I%Uh dcB
com.android.packageinstaller
(cA4UEP6A0com.android.fallback51Testing软件测试网o5W1kE{
com.android.providers.settings
$E"h0W+lC Ld0com.android.providers.drm
T/Qr H!nHWY^D0com.android.development
k*cJ(lh/\%n1fw:L T0com.android.providers.telephony
us2~ C(~6q3I0com.android.inputmethod.pinyin51Testing软件测试网b8c_d5V GN
com.android.htmlviewer51Testing软件测试网P pO tT3t
com.android.settings
J"I:?6Km@+\0com.android.netspeed
U+a^u6Iub5EF0com.android.providers.userdictionary
'f? |YuC/zWW/gB0com.android.browser51Testing软件测试网;G_p L5YJp nX
com.android.contacts
V,@ ct v lL^0O0com.android.alarmclock
JO f c l$N Ze0com.android.camera51Testing软件测试网Z,u`K!w
com.android.providers.contacts
7l:Y T5T5x"w9Bmz0jp.co.omronsoft.openwnn51Testing软件测试网NT L-cl(k6v
com.android.launcher
!Alk'G;e.u5\2g M;C9g0com.android.phone51Testing软件测试网GJm9o S$o1yk*lF%k0~
com.android.soundrecorder51Testing软件测试网AnaR2n\&` M
com.google.android.providers.enhancedgooglesearch
0kkHuD0com.svox.pico
G7~L_n n8wuu0com.android.customlocale
^hLb-X f*u0com.android.term
m1^LR |,k0com.android.providers.downloads
:O Yg5ye]b2?1] } X0com.android.providers.media51Testing软件测试网 oP8yc}8r \*k%[
com.android.email
}J H`%z0android.tts51Testing软件测试网Q\Z'yU$w']'S
com.android.inputmethod.latin51Testing软件测试网$`R3j%N9G3c
com.android.server.vpn
2?P;x&Or0com.example.android.apis
51Testing软件测试网s uA _ Gi

a|y/u0sp%i d;m;bO0

7.最后一个就是我们刚才加载的APIDemo的应用程序包

I)w$` n-O1C0

51Testing软件测试网1[CyU N es]Fl

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

| N;r'[!S0u0

8m-w:q*DY0

# monkey -p com.example.android.apis -v 50
3qr"vz\9Z0monkey -p com.example.android.apis -v 50
$G$E.]E&AJ(` K3E0:Monkey: seed=0 count=50
V+IEqW0:AllowPackage: com.example.android.apis
n#x&YRy"HI?0:IncludeCategory: android.intent.category.LAUNCHER51Testing软件测试网*K}1E9b@4L
:IncludeCategory: android.intent.category.MONKEY
/LB8B-q0w9fK g0// Event percentages:
H {A(^2?0//   0: 15.0%
F}k'`"e2\J0//   1: 10.0%51Testing软件测试网1]m df;jg$q^
//   2: 15.0%
V^~x.D {-^Vm0//   3: 25.0%
iZ3w ]]/L-L&P/X0//   4: 15.0%51Testing软件测试网p)cIja"c
//   5: 2.0%
;aY^Gj o0//   6: 2.0%
O U'w)zIH&b0//   7: 1.0%
7VE#q\lx?0//   8: 15.0%
;JE.ob4k-i#K)j@b0:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.categ51Testing软件测试网m&gA-h/\&H?i&N
ory.LAUNCHER;launchFlags=0x10000000;component=com.example.android.apis/.ApiDemos
I;E#He4M`0;end51Testing软件测试网;~c;^4je([m{[xS
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.in
V@G4] ^rr L2p m4Q0tent.category.LAUNCHER] cmp=com.example.android.apis/.ApiDemos } in package com.
#c\$kf/e:tV-d M0example.android.apis
}4E'ixy7Qc'J Q!f0:Sending Pointer ACTION_MOVE x=-4.0 y=2.051Testing软件测试网(L/nW"e,o h5^t
:Sending Pointer ACTION_UP x=0.0 y=0.0
Z`vc3P f!g0    // Allowing start of Intent { cmp=com.example.android.apis/.ApiDemos } in pa51Testing软件测试网:YV5{W Q-WiR~[
ckage com.example.android.apis51Testing软件测试网8J5SX.zN L,F1qu
:Sending Pointer ACTION_DOWN x=207.0 y=282.051Testing软件测试网 d)XI8u!@ H7v]
:Sending Pointer ACTION_UP x=189.0 y=289.0
h8i|t YG_3L x9@p0    // Allowing start of Intent { cmp=com.example.android.apis/.app.Intents } in
HC/P#a J0package com.example.android.apis51Testing软件测试网&Q"t*K7nU L1e
:Sending Pointer ACTION_DOWN x=95.0 y=259.0
0iso }3lUP0:Sending Pointer ACTION_UP x=95.0 y=259.0
#O$Z.NK}B&t9m0:Sending Pointer ACTION_DOWN x=295.0 y=223.0
C7h8rOAB0:Sending Pointer ACTION_UP x=290.0 y=213.051Testing软件测试网LOf1x2fI6Z7@
:Sending Pointer ACTION_MOVE x=-5.0 y=3.0
7z$|Cpfr$K2[\hM0:Dropped: keys=0 pointers=0 trackballs=0 flips=051Testing软件测试网A8v)YJvP5b%s-l
## Network stats: elapsed time=3799ms (3799ms mobile, 0ms wifi, 0ms not connecte51Testing软件测试网vf8m&@%r1@~R
d)
m)j#`Q4c WCl#j0// Monkey finished

G'l EoM&?3q)weY$fK}0

TAG: Android Monkey

 

评分:0

我来说两句

Open Toolbar