• Android_Monkey_测试执行策略及标准


    目录

    一、Monkey命令概述

     二、死机log信息汇总

    1、log信息表

    2、死机原因

    3、排查

    三、参考数据

    四、总结


    一、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_FILEapk黑名单,屏蔽掉黑名单中的apk。 --pkg-blacklist-file /data/blacklist/blacklist.txt1.需要新建黑白名单文件夹和同名txt文件。
    2.然后在txt文件中编辑apk列表。
    20 --pkg-whitelist-file PACKAGE_WHITELIST_FILEapk白名单,只测试包含在白名单中的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信息汇总

    1、log信息表

    NOlog信息类型可以解决哪些问题如何获得不同的log信息说明如何导出该文件
    1LogcatApp crash通过命令获得:
    #adb shell logcat –v time > c:\logcat-log.txt
    可以通过命令导出
    2BugreportApp 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
    可以实现自动导出
    3Dump logApp crash从qpst或者dump工具导出1.利用QPST efs工具,手动创建dump目录和一个空白的debug.dbg文件在dump目录下。
    2.通过QXDM将NV905设置为0(0表示进入dump,1表示重启,2或者未激活表示不做任何动作)
    只能手动导出
    4ANR traceApp not respondingTrace.txt文件保存在在/data/anr中,可以通过命令导出可以通过命令导出
    5DropboxApp crash、kernel保存在/data/system/dropbox,该目录下有4类信息对分析比较有帮助:
    1.APANIC_CONSOLE@xxxxxxxxxxxxx.txt.gz
    2.APANIC_THREADS@xxxxxxxxxxxxx.txt.gz
    3.system_server_watchdog@xxxxxxxxxxxxx.txt
    4.system_server_crash@xxxxxxxxxxxxx.txt
    APANIC_CONSOLE@xxxxxxxxxxxxx.txt.gz:记录的是核心发生死机的时候的核心LOG
    APANIC_THREADS@xxxxxxxxxxxxx.txt.gz:核心发生死机的时候各个线程在核心中的调用stack
    system_server_watchdog@xxxxxxxxxxxxx.txt:记录了发生死机的时刻上系统对SystemServer中的各个线程的调用stack进行记录的一个文件
    system_server_crash@xxxxxxxxxxxxx.txt:记录了发生死机的时刻上SystemServer中的具体死机的异常点
    可以实现自动导出
    6TombstonesNative保存在/data/tombstones,该目录下生成一个tombstone_xx文件Tombstone文件是异常进程的调用栈信息,在该进程异常退出或崩溃时由android的后台进程debuggerd负责生成可以实现自动导出
    7CoredumpNative一是编译器支持:要产生coredump文件,在android编译的时候要加上调试-g选项以支持coredump文件的生成。
    二是环境参数支持:可以修改<工程目录>system/core/rootdir下的init.rc文件来支持coredump文件的产生。
    这是一种常见的linux收集进程异常信息的机制。用户态进程在中止时将产生信号,linux内核根据信号的类型来决定是否要产生coredump文件。Android上保留了这种机制,但默认是关闭的。要使进程产生coredump文件,还要满足两个条件:一是编译器支持,二是环境参数支持。目前没有开发使用过该信息去处理死机问题
    8KmsgKernel、Native保存在cat/proc/kmsg来查看sysrq信息,它用来收集内核和用户态进程信息。
    需要通过adb命令:
    打开这个功能,运行:
    # echo 1 > /proc/sys/kernel/sysrq
    关闭这个功能:
    # echo 0 > /proc/sys/kernel/sysrq
    sysrq信息:
    只要内核没有被完全锁住,不管内核在做什么事情,使用sysrq可以立即打印出内核的信息,当然也包括用户态进程的信息。
    如果系统出现挂起的情况或者在诊断一些和内核相关,比较怪异,比较难重现的问题的时候,亦可使用sysrq方式来收集信息。
    可以实现自动导出,但是需要先开启该功能。
    9DontpanicKernel有三个文件保存在在/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需要开发手动增加的,而非系统自动生成。
    10Mondem logmondem通过QPST工具连接手机打开/err文件,并导出其中的log文件通过QPST获得的高通死机log err文件夹下的内容(适用于7x25/7x27平台)通过QPST可以获得err文件夹下的内容,该目录下的内容是ARM9在死机的时候记录在ARM9侧的LOG记录,通过该目录可以简单的判断一下ARM9侧的死机情况。只能手动导出

    2、死机原因

    monkey测试时,产生死机日志的情况通常有以下几种:

    1. 应用程序崩溃:如果Monkey测试导致应用程序崩溃,系统会生成相应的崩溃日志。这些日志通常包含了错误信息、堆栈信息等,可以帮助开发人员快速定位问题。

    2. 系统错误:如果Monkey测试导致系统错误,例如内存溢出、权限问题等,也会产生相应的日志。

    3. 应用程序冻结或无响应:如果Monkey测试导致某个应用程序冻结或无响应,其日志中也会包含相关的信息。

    在Monkey测试过程中,由于操作过于频繁或者其他原因,可能会导致设备出现死机或重启等情况。这些情况也会生成相应的日志,提供给开发人员进行分析和调试。

    3、排查

    当monkey测试导致设备死机时,可以通过以下步骤来排查问题:

    1. 查看设备日志:将设备连接到开发机并打开logcat,查看是否有相关的错误信息或异常堆栈跟踪。

    2. 分析crash log:如果设备出现crash,可以使用Android SDK提供的 tools 快速分析crash log信息。运行命令adb logcat -b crash获取 crash log文件,并使用工具 ndk-stack 分析生成的 ndk-stack trace。

    3. 检查测试用例:检查测试用例是否存在潜在的错误或不一致。一些测试用例可能过于依赖特定的硬件、软件或环境,导致测试时出现死机或crash。

    4. 确认设备配置是否正确:确认设备配置是否正确,例如是否存在足够的内存、存储空间等。如果设备配置不足,可能会导致死机或crash。

    5. 使用其他工具进行分析:可以使用其他工具来分析设备死机,例如 systracetracedump。这些工具可以提供更详细的信息,以便更好地预测和解决问题。

    总之,要排查monkey测试中的死机问题,需要详细分析设备日志和crash log以及测试用例本身。还需要确认设备配置和使用其他工具进行分析,以便更好地定位和解决问题。

    三、参考数据

    NO手机延时(ms执行时间(ms)执行时间(minute注入事件数事件执行频率:个/分钟Monkey停止原因
    1HTC无延时11480651917205899at com.htc.album.DisplayManager.onMenuItemSelected
    215515282619401750android.app.ActivityThread.performLaunchActivity
    310028591714937894at com.android.htcdialer.BaseSmartSearchList.onKeyDown
    426794784537625843at android.app.ActivityThread.performLaunchActivity
    555335998229892java.lang.RuntimeException
    at android.app.ActivityThread.performResumeActivity
    67254231210348856java.lang.NullPointerException
    at com.htc.android.worldclock.DeskClock.dispatchKeyEvent
    714809352518897766java.lang.NullPointerException
    at com.google.android.street.StreetView.setPanoramaConfig
    810682661812814720ANR in com.htc.launcher (com.htc.launcher/.Launcher)
    925753714334454803java.lang.RuntimeException: Unable to resume activity
    at android.app.ActivityThread.performResumeActivity
    10589575108492864android.view.WindowManager$BadTokenException: Unable to add window
    at android.view.ViewRoot.setView
    1Nexus无延时61098610189061857java.lang.IllegalStateException: Calling RS with no Context active.
    258584710168621727ANR in com.google.android.voicesearch
    3238446240717571806ANR in com.google.android.apps.maps:driveabout 
    475105113180851445ANR in com.google.android.apps.maps:driveabout 
    5118013820318441619OutOfMemory
    6100448717254981523java.lang.IllegalArgumentException
    at com.google.android.gles_jni.EGLImpl._eglCreateWindowSurface
    7131602222323901477ANR in com.google.android.apps.maps
    8222782537636411714java.lang.IllegalArgumentException
    at com.google.android.gles_jni.EGLImpl._eglCreateWindowSurface
    9129126422364561694ANR in com.google.android.apps.maps 
    10120091920351251755ANR in com.google.earth (com.google.earth/.EarthActivity)
    1C8800(大内存)无延时21924742958809ANR in com.android.camera 
    272382112481035java.lang.RuntimeException: lock failed
    at android.hardware.Camera.lock(Native Method)
    1U8800无延时24150243800944java.lang.NullPointerException
    at com.erdo.unicom.GameMIDlet$10.onClick
    2486920886461065java.lang.RuntimeException: An error occured while executing doInBackground
    at android.os.AsyncTask$3.done
    311832622019594994SocketTimeoutException
    at org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocketImpl(Native Method)
    4158476350051895android.view.WindowManager$BadTokenException
    at android.view.ViewRoot.setView
    513316722097945java.lang.RuntimeException: Unable to resume activity
    at android.app.ActivityThread.performResumeActivity
    6428677782271151java.lang.NullPointerException
    at com.erdo.unicom.WelcomeForm.onKeyUp
    7371265669911130java.lang.RuntimeException: Unable to pause activity {com.android.contacts/com.android.contacts.commonext.GroupGridActivity}
    at android.app.ActivityThread.performPauseActivity
    852676398633983java.lang.NullPointerException
    at com.huawei.inputmethod.hwpal.PinyinIME.showCandidateWindow
    9591910108633875android.view.WindowManager$BadTokenException
    10270742575611676java.lang.NullPointerException
    at com.erdo.unicom.WelcomeForm.onKeyUp

    四、总结

    Android Monkey是一种自动化测试工具,用于测试Android应用程序的稳定性和可靠性。在使用Android Monkey进行测试时,需要遵循以下执行策略和标准:

    1. 测试环境准备:在进行测试之前,需要确保测试环境的准备工作已经完成,包括Android设备的连接、ADB工具的配置、测试用例的准备等。

    2. 测试用例设计:测试用例应该根据应用程序功能模块进行设计,尽可能覆盖应用程序的各个方面,以测试应用程序的稳定性和可靠性。

    3. 执行测试:在执行测试之前,需要先设置好Monkey的参数,如事件数量、延时、随机种子等。然后使用Monkey命令启动测试,并监控测试结果。

    4. 分析测试结果:根据测试结果分析应用程序的稳定性和可靠性,并确定是否需要进行修复或改进。

    在执行Android Monkey测试时,还需要遵循以下标准:

    1. 稳定性:应用程序在测试过程中不能出现异常崩溃或停止响应的情况。

    2. 功能完整性:应用程序的各项功能必须得到测试,确保其能够正常运行。

    3. 覆盖率:测试用例应该尽可能覆盖应用程序的各个功能模块,以达到全面测试的目的。

    4. 可重复性:测试结果应该具有可重复性,以便比较和分析不同测试结果之间的差异。

    综上,执行Android Monkey测试需要充分的计划和准备工作,同时也需要遵循一定的执行策略和标准,以确保测试结果的有效性和可靠性。

  • 相关阅读:
    元宇宙虚拟形象公司为各行业提供商业应用
    一文了解“期刊”、“JCR分区”、“中科院分区”
    (刘二大人)PyTorch深度学习实践-卷积网络(基础篇作业)
    Webmin -- Users和Groups
    AtCoder Beginner Contest 276 G - Count Sequences 差分
    NodeRed系列—创建mqtt broker(mqtt服务器),并使用mqttx进行消息发送验证
    Less is more VS 精一 [生活感悟]
    django基于python的水果销售系统--python-计算机毕业设计
    Go | 基本数据类型的相互转换
    鸿蒙HarmonyOS实战-ArkUI事件(单一手势)
  • 原文地址:https://blog.csdn.net/LYX_WIN/article/details/133249492