Android_Monkey_测试执行策略及标准

一、Monkey命令概述

NO 命令 说明 用法 解释
1  -p ALLOWED_PACKAGE 用于指定某个apk,可以使用多个-p选项,但是每个-p命令选项只能用于一个apk
如果不指定-p,Monkey就会默认进行全系统测试。
 -p com.android.contacts 可以进行特定apk的Monkey测试
2  -c MAIN_CATEGORY 用于指定某个类,可以使用多个-c选项,但是每个-c命令选项只能用于一个类。如不指定类,Monkey就默认执行Intent.Category_LAUNCHER或者Intent.Category_MONKEY  -c intent.CATEGORY_LAUNCHER 所有类别:
* CATEGORY_DEFAULT
* CATEGORY_BROWSABLE
* CATEGORY_TAB
* CATEGORY_ALTERNATIVE
* CATEGORY_SELECTED_ALTERNATIVE
* CATEGORY_LAUNCHER
* CATEGORY_INFO
* CATEGORY_HOME
* CATEGORY_PREFERENCE
* CATEGORY_TEST
* CATEGORY_CAR_DOCK
* CATEGORY_DESK_DOCK
* CATEGORY_CAR_MODE 
3  --ignore-crashes 忽略程序崩溃。设置此选项后,Monkey会执行完所有的事件,不会因crash而停止。  --ignore-crashes 针对各种crash的忽略,监控,停止进程操作
4  --ignore-timeouts 忽略程序无响应。设置此选项后,Monkey会执行完所有的事件,不会因ANR而停止。  --ignore-timeouts
5  --ignore-security-exceptions 忽略证书或认证异常。设置此选项后,Monkey会执行完所有的事件,不会因认证或证书异常而停止。  --ignore-security-exceptions
6  --monitor-native-crashes 监视系统中本地代码发生的崩溃。  --monitor-native-crashes
7  --ignore-native-crashes 忽略本地代码导致的崩溃。设置忽略后,Monkey将执行完所有的事件,不会因此停止。  --ignore-native-crashes
8  --kill-process-after-error 设置了该选项,出错的程序就会停止。  --kill-process-after-error
10  --pct-touch PERCENT 调整触摸事件的百分比  --pct-touch 20 所有的事件的百分比应该是100%,从Monkey测试报告中没有发现特定事件的影响:比如在U8800上进行100%的轨迹球事件测试,没有发现任何影响。
11  --pct-motion PERCENT 调动作事件的百分比  --pct-motion 20
12  --pct-trackball PERCENT 调整轨迹球事件的百分比  --pct-trackball 10
13  --pct-syskeys PERCENT 调整系统按键事件的百分比(home\back\call\end call\volume key)  --pct-syskeys 5
14  --pct-nav PERCENT 调整基本导航事件的百分比  --pct-nav 5
15  --pct-majornav PERCENT 调整主要导航事件的百分比(ok\cancel\menu等引发图形接口的动作)  --pct-majornav 10
16  --pct-appswitch PERCENT 调整启动活动的百分比  --pct-appswitch 10
17  --pct-flip PERCENT 调整点击事件的百分比  --pct-flip 10
18  --pct-anyevent PERCENT 调整其他类型事件的百分比(其他所有类型)  --pct-anyevent 10
19  --pkg-blacklist-file PACKAGE_BLACKLIST_FILE apk黑名单,屏蔽掉黑名单中的apk。  --pkg-blacklist-file /data/blacklist/blacklist.txt 1.需要新建黑白名单文件夹和同名txt文件。
2.然后在txt文件中编辑apk列表。
20  --pkg-whitelist-file PACKAGE_WHITELIST_FILE apk白名单,只测试包含在白名单中的apk  --pkg-whitelist-file /data/whitelist/whitelist.txt
21  --wait-dbg 一旦连接了调试器,Monkey就会停止。  --wait-dbg 开发调试时使用
9  --hprof 用于在Monkey事件时序的前后,在/data/misc中生成5Mb左右的profiling报告。 在data\misc文件夹下产生一个“.hprof”的文件(heap-dump-tm1312534653-pid159.hprof)
22  --dbg-no-events 设置该选项后,Monkey会执行初始启动,进入到测试活动中而不产生任何事件。可以设置几个apk包以及其他环境,来监视应用程序所调用的包之间的转换。  --dbg-no-events
25  --port port 为Monkey开启专用端口。之后Monkey就不会执行,此时你就可以像Monkey一样乱点,Monkey会输出你点击后的回馈信息。如果你打完命令后,模拟器没有启动你所要启动的包,需要自己启动你在-p中指定的应用. 开启专用端口后,人可以模拟Monkey进行操作。用于开发手动重现问题。
26  -s SEED 随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件时序。  -s 100 主要帮助开发排查错误并验证修改的代码
27  -v 每个-v都将增加反馈信息的级别。共3个级别,因此,-v -v -v可以提供最详细的设置信息。  -v -v -v 使用3个v命令,可以在Monkey测试报告中看最详细的设置信息
28  --throttle MILLISEC 事件之间插入的固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定,Monkey将尽可能快的产生并执行事件。  --throttle 3000 设置事件间的时间延时
29  --randomize-throttle 事件之间插入随机延时。  --randomize-throttle
30  COUNT 执行数 99999 执行事件次数

 二、死机log信息汇总

NO log信息类型 可以解决哪些问题 如何获得不同的log信息 说明 如何导出该文件
1 Logcat App crash 通过命令获得:
#adb shell logcat –v time > c:\logcat-log.txt
可以通过命令导出
2 Bugreport App crash 获取bugreport和dumpstate:
#adb shell bugreport > bugreport-yyyy-mm-dd-hh-mm-ss.txt
#adb shell dumpstate > dumpstate-yyyy-mm-dd-hh-mm-ss.txt
dumpstate是一个具体对系统的各个信息进行收集的程序
bugreport则会以服务的形式来启动dumpstate,它不完成具体的收集操作,只负责将dumpstate的信息通过socket的形式进行接收并重定向出来。它存储在/mnt/sdcard/bugreports或者/data/bugreports或/HWUserData
可以实现自动导出
3 Dump log App crash 从qpst或者dump工具导出 1.利用QPST efs工具,手动创建dump目录和一个空白的debug.dbg文件在dump目录下。
2.通过QXDM将NV905设置为0(0表示进入dump,1表示重启,2或者未激活表示不做任何动作)
只能手动导出
4 ANR trace App not responding Trace.txt文件保存在在/data/anr中,可以通过命令导出 可以通过命令导出
5 Dropbox App crash、kernel 保存在/data/system/dropbox,该目录下有4类信息对分析比较有帮助:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]:记录的是核心发生死机的时候的核心LOG
[email protected]:核心发生死机的时候各个线程在核心中的调用stack
[email protected]:记录了发生死机的时刻上系统对SystemServer中的各个线程的调用stack进行记录的一个文件
[email protected]:记录了发生死机的时刻上SystemServer中的具体死机的异常点
可以实现自动导出
6 Tombstones Native 保存在/data/tombstones,该目录下生成一个tombstone_xx文件 Tombstone文件是异常进程的调用栈信息,在该进程异常退出或崩溃时由android的后台进程debuggerd负责生成 可以实现自动导出
7 Coredump Native 一是编译器支持:要产生coredump文件,在android编译的时候要加上调试-g选项以支持coredump文件的生成。
二是环境参数支持:可以修改<工程目录>system/core/rootdir下的init.rc文件来支持coredump文件的产生。
这是一种常见的linux收集进程异常信息的机制。用户态进程在中止时将产生信号,linux内核根据信号的类型来决定是否要产生coredump文件。Android上保留了这种机制,但默认是关闭的。要使进程产生coredump文件,还要满足两个条件:一是编译器支持,二是环境参数支持。 目前没有开发使用过该信息去处理死机问题
8 Kmsg Kernel、Native 保存在cat/proc/kmsg来查看sysrq信息,它用来收集内核和用户态进程信息。
需要通过adb命令:
打开这个功能,运行:
# echo 1 > /proc/sys/kernel/sysrq
关闭这个功能:
# echo 0 > /proc/sys/kernel/sysrq
sysrq信息:
只要内核没有被完全锁住,不管内核在做什么事情,使用sysrq可以立即打印出内核的信息,当然也包括用户态进程的信息。
如果系统出现挂起的情况或者在诊断一些和内核相关,比较怪异,比较难重现的问题的时候,亦可使用sysrq方式来收集信息。
可以实现自动导出,但是需要先开启该功能。
9 Dontpanic Kernel 有三个文件保存在在/data/dontpanic/目录下:
apanic_console:记录内核的控制台信息
apanic_threads:记录的是panic时内核寄存器、调用栈等信息
apanic_sysinfo:记录meminfo、zoneinfo、slabinfo、vmallocinfo等信息。
apanic_sysinfo:
在apanic中打开这些文件并用printk读取到内核log_buf中,然后再利用apanic的写入flash机制将这些信息分别保存到/data/dontpanic/目录下
apanic_sysinfo需要开发手动增加的,而非系统自动生成。
10 Mondem log mondem 通过QPST工具连接手机打开/err文件,并导出其中的log文件 通过QPST获得的高通死机log err文件夹下的内容(适用于7x25/7x27平台)通过QPST可以获得err文件夹下的内容,该目录下的内容是ARM9在死机的时候记录在ARM9侧的LOG记录,通过该目录可以简单的判断一下ARM9侧的死机情况。 只能手动导出

三、参考数据

NO 手机 延时(ms 执行时间(ms) 执行时间(minute 注入事件数 事件执行频率:个/分钟 Monkey停止原因
1 HTC 无延时 1148065 19 17205 899 at com.htc.album.DisplayManager.onMenuItemSelected
2 1551528 26 19401 750 android.app.ActivityThread.performLaunchActivity
3 1002859 17 14937 894 at com.android.htcdialer.BaseSmartSearchList.onKeyDown
4 2679478 45 37625 843 at android.app.ActivityThread.performLaunchActivity
5 553359 9 8229 892 java.lang.RuntimeException
at android.app.ActivityThread.performResumeActivity
6 725423 12 10348 856 java.lang.NullPointerException
at com.htc.android.worldclock.DeskClock.dispatchKeyEvent
7 1480935 25 18897 766 java.lang.NullPointerException
at com.google.android.street.StreetView.setPanoramaConfig
8 1068266 18 12814 720 ANR in com.htc.launcher (com.htc.launcher/.Launcher)
9 2575371 43 34454 803 java.lang.RuntimeException: Unable to resume activity
at android.app.ActivityThread.performResumeActivity
10 589575 10 8492 864 android.view.WindowManager$BadTokenException: Unable to add window
at android.view.ViewRoot.setView
1 Nexus 无延时 610986 10 18906 1857 java.lang.IllegalStateException: Calling RS with no Context active.
2 585847 10 16862 1727 ANR in com.google.android.voicesearch
3 2384462 40 71757 1806 ANR in com.google.android.apps.maps:driveabout 
4 751051 13 18085 1445 ANR in com.google.android.apps.maps:driveabout 
5 1180138 20 31844 1619 OutOfMemory
6 1004487 17 25498 1523 java.lang.IllegalArgumentException
at com.google.android.gles_jni.EGLImpl._eglCreateWindowSurface
7 1316022 22 32390 1477 ANR in com.google.android.apps.maps
8 2227825 37 63641 1714 java.lang.IllegalArgumentException
at com.google.android.gles_jni.EGLImpl._eglCreateWindowSurface
9 1291264 22 36456 1694 ANR in com.google.android.apps.maps 
10 1200919 20 35125 1755 ANR in com.google.earth (com.google.earth/.EarthActivity)
1 C8800(大内存) 无延时 219247 4 2958 809 ANR in com.android.camera 
2 72382 1 1248 1035 java.lang.RuntimeException: lock failed
at android.hardware.Camera.lock(Native Method)
1 U8800 无延时 241502 4 3800 944 java.lang.NullPointerException
at com.erdo.unicom.GameMIDlet$10.onClick
2 486920 8 8646 1065 java.lang.RuntimeException: An error occured while executing doInBackground
at android.os.AsyncTask$3.done
3 1183262 20 19594 994 SocketTimeoutException
at org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocketImpl(Native Method)
4 158476 3 5005 1895 android.view.WindowManager$BadTokenException
at android.view.ViewRoot.setView
5 133167 2 2097 945 java.lang.RuntimeException: Unable to resume activity
at android.app.ActivityThread.performResumeActivity
6 428677 7 8227 1151 java.lang.NullPointerException
at com.erdo.unicom.WelcomeForm.onKeyUp
7 371265 6 6991 1130 java.lang.RuntimeException: Unable to pause activity {com.android.contacts/com.android.contacts.commonext.GroupGridActivity}
at android.app.ActivityThread.performPauseActivity
8 526763 9 8633 983 java.lang.NullPointerException
at com.huawei.inputmethod.hwpal.PinyinIME.showCandidateWindow
9 591910 10 8633 875 android.view.WindowManager$BadTokenException
10 270742 5 7561 1676 java.lang.NullPointerException
at com.erdo.unicom.WelcomeForm.onKeyUp

你可能感兴趣的:(稳定性测试,monkey)