志在指尖
用双手敲打未来

monkey命令解析详解

我面试时遇到过几回让背个monkey指令的,能够这样简单说一个:adbshellmonkey-p(束缚包名)-s200-v-v–throttle3001500000>e:\001.txt(日志保存路径)
一、monkey简介:
Monkey便是SDK中顺便的一个东西。Monkey是Android中的一个指令行东西,能够运转在模拟器里或实践设备中。它向体系发送伪随机的用户事情流(如按键输入、接触屏输入、手势输入等),实现对正在开发的运用程序进行压力测验。Monkey测验是一种为了测验软件的稳定性、健壮性的快速有效的办法。
该东西用于进行压力测验。然后开发人员结合monkey打印的日志和体系打印的日志,剖析测验中的问题
Monkey测验的特点:
Monkey测验,所有的事情都是随机发作的,不带任何人的主观性。
1、测验的方针仅为运用程序包,有必定的局限性。
2、Monky测验运用的事情数据流是随机的,不能进行自定义。
3、可对MonkeyTest的方针,事情数量,类型,频率等进行设置。Android
二、Monkey的基本用法
基本语法如下:
$adbshellmonkey[options]
假如不指定options,Monkey将以无反应模式发动,并把事情恣意发送到安装在方针环境中的全部包。下面是一个更为典型的指令行示例,它发动指定的运用程序,并向其发送500个伪随机事情:
$adbshellmonkey-pyour.package.name-v500
运用android自动化测验东西monkeyrunner发动运用时,需求填写被测程序的包名和发动的Activity,以下有两种检查运用包名package和入口activity称号的办法:
办法一:运用aapt//aapt是sdk自带的一个东西,在sdk\builds-tools\目录下
1.以ES文件浏览器为例,指令行中切换到aapt.exe目录履行:aaptdumpbadgingE:\apk\es3.apk
2.
注:在androidsdk目录查找能够找到aapt.exe,假如没有能够下载apktool。
三、Monkey测验的一个实例
通过这个实例,咱们能了解Monkey测验的过程以及如何知道哪些运用程序能够用Monkey进行测验。
Windows下(注:2—4步是为了检查咱们能够测验哪些运用程序包,可省掉):
1、通过eclipse发动一个Android的emulator
2、在指令行中输入:adbdevices检查设备连接情况
C:\DocumentsandSettings\Administrator>adbdevices
Listofdevicesattached
emulator-5554device
3、在有设备连接的前提下,在指令行中输入:adbshell进入shell界面
C:\DocumentsandSettings\Administrator>adbshell
#
4、检查data/data文件夹下的运用程序包。注:咱们能测验的运用程序包都在这个目录下面
C:\DocumentsandSettings\Administrator>adbshell
#lsdata/data
lsdata/data
5、以com.android.calculator2作为方针进行MonkeyTest
#monkey-pcom.android.calculator2-v500
其间-p表明方针包–v表明反应信息等级
运转过程中,Emulator中的运用程序在不断地切换画面。
按照选定的不同等级的反应信息,在Monkey中还能够看到其履行过程报告和生成的事情。
四、运用monkeyhelp指令检查指令参数
C:\Users\chenfenping>adbshellmonkey-help
usage:monkey[-pALLOWED_PACKAGE[-pALLOWED_PACKAGE]…]
[-cMAIN_CATEGORY[-cMAIN_CATEGORY]…]
[–ignore-crashes][–ignore-timeouts]
[–ignore-security-exceptions]
[–monitor-native-crashes][–ignore-native-crashes]
[–kill-process-after-error][–hprof]
[–pct-touchPERCENT][–pct-motionPERCENT]
[–pct-trackballPERCENT][–pct-syskeysPERCENT]
[–pct-navPERCENT][–pct-majornavPERCENT]
[–pct-appswitchPERCENT][–pct-flipPERCENT]
[–pct-anyeventPERCENT][–pct-pinchzoomPERCENT]
[–pkg-blacklist-filePACKAGE_BLACKLIST_FILE]
[–pkg-whitelist-filePACKAGE_WHITELIST_FILE]
[–wait-dbg][–dbg-no-events]
[–setupscriptfile][-fscriptfile[-fscriptfile]…]
[–portport]
[-sSEED][-v[-v]…]
[–throttleMILLISEC][–randomize-throttle]
[–profile-waitMILLISEC]
[–device-sleep-timeMILLISEC]
[–randomize-script]
[–script-log]
[–bugreport]
[–periodic-bugreport]
COUNT
1参数:-p
用于束缚限制,用此参数指定一个或多个包(Package,即App)。指定包之后,monkey将只答应体系发动指定的APP,假如不指定包,将答应体系发动设备中的所有APP.
*指定一个包:adbshellmonkey-pcn.emoney.acg10
*指定多个包:adbshellmonkey-pcn.emoney.acg–pcn.emoney.wea-pcn.emoney.acg100
*不指定包:adbshellmonkey100
2参数:-v
用于指定反应信息等级(信息等级便是日志的具体程度),一共分3个等级,别离对应的参数如下表所示:
日志等级Level0
示例adbshellmonkey-pcn.emoney.acg–v100
阐明缺省值,仅供给发动提示、测验完结和最终成果等少量信息
日志等级Level1
示例adbshellmonkey-pcn.emoney.acg–v-v100
阐明供给较为具体的日志,包括每个发送到Activity的事情信息
日志等级Level2
示例adbshellmonkey-pcn.emoney.acg–v-v–v100
阐明最具体的日志,包括了测验中选中/未选中的Activity信息
3参数:-s
用于指定伪随机数生成器的seed值,假如seed相同,则两次Monkey测验所发作的事情序列也相同的。
Monkey测验1:adbshellmonkey-pcn.emoney.acg-s10100
Monkey测验2:adbshellmonkey-pcn.emoney.acg–s10100
两次测验的作用是相同的,因为模拟的用户操作序列(每次操作按照必定的先后顺序所组成的一系列操作,即一个序列)是一样的。
4参数:–throttle<毫秒>
用于指定用户操作(即事情)间的时延,单位是毫秒;
adbshellmonkey-pcn.emoney.acg–throttle5000100
5参数:–ignore-crashes
用于指定当运用程序溃散时(Force&Close过错),Monkey是否中止运转。假如运用此参数,即便运用程序溃散,Monkey仍然会发送事情,直到事情计数完结。
adbshellmonkey-pcn.emoney.acg–ignore-crashes1000
测验过程中即便程序溃散,Monkey仍然会继续发送事情直到事情数目达到1000中止
adbshellmonkey-pcn.emoney.acg1000
测验过程中,假如acg程序溃散,Monkey将会中止运转
6参数:–ignore-timeouts
用于指定当运用程序发作ANR(ApplicationNoResponding)过错时,Monkey是否中止运转。假如运用此参数,即便运用程序发作ANR过错,Monkey仍然会发送事情,直到事情计数完结。
adbshellmonkey-pcn.emoney.acg–ignore-timeouts1000
7参数:–ignore-security-exceptions
用于指定当运用程序发作许可过错时(如证书许可,网络许可等),Monkey是否中止运转。假如运用此参数,即便运用程序发作许可过错,Monkey仍然会发送事情,直到事情计数完结。
adbshellmonkey-pcn.emoney.acg–ignore-security-exception1000
8参数:–kill-process-after-error
用于指定当运用程序发作过错时,是否中止其运转。假如指定此参数,当运用程序发作过错时,运用程序中止运转并保持在当时状况
(留意:运用程序仅是停止在发作过错时的状况,体系并不会完毕该运用程序的进程)。
adbshellmonkey-pcn.emoney.acg–kill-process-after-error1000
9参数:–monitor-native-crashes
用于指定是否监督并报告运用程序发作溃散的本地代码。
adbshellmonkey-pcn.emoney.acg–monitor-native-crashes1000
10参数:–pct-{+事情类别}{+事情类别百分比}
用于指定每种类别事情的数目百分比(在Monkey事情序列中,该类事情数目占总事情数目的百分比)
示例:
–pct-touch{+百分比}
调整接触事情的百分比(接触事情是一个down-up事情,它发作在屏幕上的某单一位置)
adbshellmonkey-pcn.emoney.acg–pct-touch101000
–pct-motion{+百分比}
调整动作事情的百分比(动作事情由屏幕上某处的一个down事情、一系列的伪随件机事和一个up事情组成)
adbshellmonkey-pcn.emoney.acg–pct-motion201000
–pct-trackball{+百分比}
调整轨道事情的百分比(轨道事情由一个或几个随机的移动组成,有时还随同有点击)
adbshellmonkey-pcn.emoney.acg–pct-trackball301000
–pct-nav{+百分比}
调整“基本”导航事情的百分比(导航事情由来自方向输入设备的up/down/left/right组成)
adbshellmonkey-pcn.emoney.acg–pct-nav401000
–pct-majornav{+百分比}
调整“主要”导航事情的百分比(这些导航事情通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)
adbshellmonkey-pcn.emoney.acg–pct-majornav501000
七、输出monkeylog
跑monkey的时候或许想抓程序log导出时,有时会提示:cannotcreateD:monkeytest.txt:read-onlyfilesystem
为什么有时候能够有时候不能够?
后来发现跟运用运用习惯不一样,一会是先进入adbshell再用指令,一会是直接指令进入。
进入adbshell后再用指令就会失利~
正确办法:退出shell或许履行指令时先不要进shell
C:\DocumentsandSettings\Administrator>adbshellmonkey-p包名
-v300>e:\text.txt
进入adbshell后就相当于进入linux的root下面,没有权限在里边创立文件~
五、Monkey测验成果剖析
一.开端剖析办法:
Monkey测验出现过错后,一般的查错过程为以下几步:
1、找到是monkey里边的哪个当地出错
2、检查Monkey里边出错前的一些事情动作,并手动履行该动作
3、若以上过程还不能找出,能够运用之前履行的monkey指令再履行一遍,留意seed值要一样–复现
一般的测验成果剖析:
1、ANR问题:在日志中查找“ANR”
2、溃散问题:在日志中查找“Exception”ForceClose
二.具体剖析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
//AllowingstartofIntent{act=android.intent.action.MAINcat=[android.intent.category.LAUNCHER]cmp=com.tencent.smtt/.SplashActivity}inpackagecom.tencent.smtt
鄙人面的log中,SendingPointerACTION_DOWN和SendingPointerACTION_UP代表当时履行了一个单击的操作;
Sleepingfor500milliseconds这句log是履行Monkey测验时,throttle设定的间隔时刻,每出现一次,就代表一个事情。
SendKey(ACTION_DOWN)//KEYCODE_DPAD_DOWN代表当时履行了一个点击下导航键的操作;
SendingPointerACTION_MOVE代表当时履行了一个滑动界面的操作。
:SendingPointerACTION_DOWNx=47.0y=438.0
:SendingPointerACTION_MOVEx=-2.0y=-4.0
ANR
假如Monkey测验顺畅履行完结,在log的最后,会打印出当时履行事情的次数和所花费的时刻;//Monkeyfinished代表履行完结。Monkey履行中断,在log的最后也能检查到当时已履行的次数。Monkey履行完结的log具体如下:
Eventsinjected:6000
:Dropped:keys=0pointers=9trackballs=0flips=0
##Networkstats:elapsedtime=808384ms(0msmobile,808384mswifi,0msnotconnected)
//Monkeyfinished
典范:
Monkey测验成果:
#monkey-pwfh.LessonTable-v-v-v200
:Monkey:seed=0count=200
:AllowPackage:wfh.LessonTable
:IncludeCategory:android.intent.category.LAUNCHER
:IncludeCategory:android.intent.category.MONKEY
//Selectingmainactivitiesfromcategoryandroid.intent.category.LAUNCHER
//-NOTUSINGmainactivitycom.android.browser.BrowserActivity(frompackagecom.android.browser)
//Seeded:0
//Eventpercentages:
//0:15.0%
//1:10.0%
//2:15.0%
//3:25.0%
//4:15.0%
//5:2.0%
//6:2.0%
//7:1.0%
//8:15.0%
:Switch:#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10000000;component=wfh.LessonTable/.MainTable;end
//AllowingstartofIntent{act=android.intent.action.MAINcat=[android.intent.category.LAUNCHER]cmp=wfh.LessonTable/.MainTable}inpackagewfh.LessonTable
Sleepingfor0milliseconds
:SendKey(ACTION_DOWN):21//KEYCODE_DPAD_LEFT
:SendKey(ACTION_UP):21//KEYCODE_DPAD_LEFT
Sleepingfor0milliseconds//————————————用--throttle来设置一个起效的事情发作后时延时。
:SendingPointerACTION_DOWNx=0.0y=0.0
:SendingPointerACTION_UPx=0.0y=0.0
Sleepingfor0milliseconds
:SendingPointerACTION_MOVEx=0.0y=0.0
当测验到ACTION_MOVEx=0.0y=0.0这个动作时,发作了FC(ForceClose)过错,以下为输出过错信息。一同在LogCat里边也有过错输出,并且LogCat里边的过错信息更为具体,在实践的测验中应该结合两者输出的信息进行调试程序。
//CRASH:wfh.LessonTable(pid1973)
//ShortMsg:java.lang.NullPointerException
//LongMsg:java.lang.NullPointerException
//BuildLabel:android:generic/sdk/generic/:2.1-update1/ECLAIR/35983:eng/test-keys
//BuildChangelist:35983
//BuildTime:1273161972
//ID:
//Tag:AndroidRuntime
//java.lang.NullPointerException:
//atandroid.widget.TabHost.dispatchKeyEvent(TabHost.java:279)
//atandroid.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:748)
**Monkeyabortedduetoerror.
Eventsinjected:190
:Dropped:keys=0pointers=11trackballs=0flips=0
##Networkstats:elapsedtime=27954ms(27954msmobile,0mswifi,0msnotconnected)
**Systemappearstohavecrashedatevent190of200usingseed0
#
开端monkey测验时android的LogCat输出的信息:
11-0108:52:53.712:DEBUG/AndroidRuntime(2077):>>>>>>>>>>>>>>AndroidRuntimeSTART<<<<<<<<<<<<<<
11-0108:52:53.742:DEBUG/AndroidRuntime(2077):CheckJNIisON
11-0108:52:54.453:DEBUG/AndroidRuntime(2077):—
以下为LogCat输出的过错信息,在以下的信息中首要从自己的包中找过错,假如没有自己的包的话就再找发作过错的包的第一个发作了反常。由过错提示能够看出很大的可能是因为TabHost引发的反常。经过检查代码发现是因为TabHost的编写不规范,TabHost与其间一个view放在了一同,在monkey测验做滚球上下翻滚时当滚到TabHost时就发作了反常了。所以把TabHost与Activity分开写就不会出现些问题了。
11-0108:53:27.113:ERROR/AndroidRuntime(1973):Uncaughthandler:threadmainexitingduetouncaughtexception
11-0108:53:27.133:ERROR/AndroidRuntime(1973):java.lang.NullPointerException
11-0108:53:27.133:ERROR/AndroidRuntime(1973):atandroid.widget.TabHost.dispatchKeyEvent(TabHost.java:279)
11-0108:53:27.133:ERROR/AndroidRuntime(1973):atandroid.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:748)
四、总结:
在monkey测验中常用的指令组合有:
1、monkey-pcom.yourpackage-v500//简单的输出测验的信息。
2、monkey-pcom.yourpackage-v-v500//以深度为二级输出测验信息。
4、monkey-pcom.yourpackage-s数字-v500//为随机数的事情序列定一个值,若出现问题下次能够重复同样的系列进行排错。
5、monkey-pcom.yourpackage-v–throttle3000500//为每一次履行一次有效的事情后休眠3000毫秒。

未经允许不得转载:IT技术网站 » monkey命令解析详解
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载