美文网首页
Monkey使用经验及改进

Monkey使用经验及改进

作者: Nubin4939 | 来源:发表于2018-09-21 15:38 被阅读0次

    Android内置自动测试工具

    用来伪随机地模拟点击和触摸等用户事件

    用于对我们开发的应用程序进行随机和重复的压力测试 

     

     下面是一句monkey的测试命令:

    adb shell monkey com.android.mms –throttle 500 –s 123456 –v 1000

    我们可以看到,monkey是一个shell命令,有很多的附加参数来控制其运行,其基本格式如下:

    adb shell monkey [options] -v <event-count> 

    大致分为四大类:

    基本配置选项,如设置尝试的事件数量

    运行约束选项,如设置只对单独的一个包进行测试

    事件类型和频率

    调试选项

    --help     列出简单的用法

    -v              需要运行的事件数量,例如–v 2000

    -s <seed>

         伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件序列,可用于重现

    --throttle <milliseconds>

         在事件之间插入固定延迟,用来接近人真是操作的速度,避免因为速度过快而造成Android系统本身的崩溃进而影响测试结果,如果不指定该选项则所有事件会被尽可能快地执行完

    --pct-touch <percent>

          调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)

    --pct-trackball <percent>

    调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。

    --pct-motion <percent>

    调整动作事件的百分比,包括了touch和trackball

    --pct-nav <percent>

          调整基本导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)。

    --pct-majornav <percent>

    调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)

    --pct-syskeys <percent>

    调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)。

    (注意,在部分的系统上可能该参数无效)


    --pct-appswitch <percent>

          调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity(),作为最大程度覆盖包中全部Activity的一种方法。

    --pct-anyevent <percent>

    调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等

    上述所有pct的参数,如果我们在运行时没有分配到100%,那么残留的百分比将随机的分配给这几个参数所代表的功能项

    -p <allowed-package-name>

          限定Monkey运行的范围,即只能在指定的包的范围内运行,可以指定多个-p,monkey会尝试全部开启并运行它们。

    :最好只有一个–p,如果多个-p,会同时运行这些package

    --hprof

    在Monkey运行完后自动提取hprof文件到data/misc下。

    由于hprof文件体积较大,不建议在多条monkey连续执行的时候使用

    --kill-process-after-error

          通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。注意,正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态。

    --monitor-native-crashes

    监视并报告Android系统中本地代码的崩溃事件。如果设置了--kill-process-after-error,系统将停止运行。

    --wait-dbg

    停止执行中的Monkey,直到有调试器和它相连接

    Monkey 测试中,尽量添加这些参数

    --ignore-crashes

          通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。

    --ignore-timeouts

    通常,当应用程序发生任何超时错误(如“Application Not Responding”对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。

    --ignore-security-exceptions

    通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。

    1、附加参数的选择

    建议上必备的参数是2个,-s-v-v比较好理解,控制monkey运行的次数,-s必备的目的是为了重现问题。

    -s值相同的情况下,Monkey生成的随机事件序列是相同的,调整-s值会改变事件序列,有-s为区分,我们可以连续执行多条Monkey命令时尽可能地减少事件序列的重复性

    2、对于Monkey结果文件的保存

    建议使用“>”符号把Monkey的执行结果保存到文件,方便管理和查阅

    3、对于-pct的使用

    如果发现Monkey在运行的时候经常出现未知的意料之外地跳转,请在使用pct的时候尽可能的使得分配的百分比的和为100,不要留下部分让系统自由分配。

    4、善用--throttle

    Monkey默认的执行速度远远超过人的操作速度,容易造成系统的崩溃和重启等不必要的错误,使用200~500等的值来延缓Monkey的操作对于部分比较占用内存,UI消耗大的产品来说还是必要的。

    5、批处理文件延时

    当我们把多条Monkey语句设置成批处理的时候,尽量在每条之间加入一点点小的延时,来缓解Android系统本身的缓存压力,完成前一条Monkey报告的输出,让GC能够有时间回收部分健康的系统资源。BAT命令没有延时命令,我们一般用ping 127.0.0.1 -n 3 > null代替,也就是ping自己。

    6、关闭设备的休眠设置

    有些设备即使有程序在运行,时间长了也会关闭屏幕进入锁屏状态,这样Monkey就失去作用了,我们应该在设置里关闭自动熄灯并保持设备一直处于唤醒状态

    1. VIME 中返回到上一界面,需要按back , camera ,需要按camera,才能capture但老版本的monkey 很难按到back , camera.

    2. 不同的设备中,key的个数是不一样的确,需要在代码中添加对应的key,才能运行monkey.

    3. video player ,需要测试横,竖屏切换的case .老版本的monkey不能自动横,竖屏切换.

    4. monkey 经常停留在系统的某一界面,导致我们的程序测试不充分,如系统的music player.

    5.ROM稳定的情况下,我们需要考虑程序与系统事件的交互.

    6.package 测试,VIME 3.0 需要调用gallery 来选择文件,

         需要在代码中添加允许gallery package .

    7.通过Gallery 来调用VIME lite,photo editor , 需要开发提供怎么调用测试程序的intent的代码.testbed 运行测试程序

    1、解决了不同硬件设备的通用性:

          Monkey的模拟设计硬件的按键,因此,即使Monkey的SDK版本相同,也无法在硬件按键不同的各个定制版本之间通用,通过修改,我们新版本的Monkey支持自动补全自己的按键列表来适应硬件的变化

    2、补全缺失的系统按键

        Monkey的按键列表里缺少了BACK,Camera等重要的功能按键

    其中Back键默认启用,Camera键可以通过--enable-camera启用

    3、补全了部分系统事件

    新的Monkey支持闹钟和插拔卡以及转屏,可以用参数控制

    --enable-alarm自动设置时间到12:00:56,可以提前设置一个12:01的闹钟

    --enable-screenchange会加入横竖屏切换事件

    --enable-remount-sdcard加入插拔卡事件

    1Monkey的测试报告的开头,会记录下此次运行的seed值,运行的次数,运行的包的范围

    2、测试报告很大一部分内容是monkey执行的随机事件的记录。

    3、测试报告中还记录了每次的跳转申请以及Monkey批准的反馈,例如:

    #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10000000;component=com.android.calculator2/.Calculator;end // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.calculator2/.Calculator } in package com.android.calculator2

    表示申请跳转到com.android.calculator2下的Calculator类被允许,这点很重要,可以帮助我们判断是在什么界面报错的

    5monkey报错的内容即logcatAndroidRuntime标签所显示的内容,遵循java的报错方式,即包名,错误类型,涉及的类名以及行号,帮助我们需要出错的代码段。

    6、如果Monkey遇到错误停止,会总结出实际执行的事件数以及所消耗的时间,以及你所使用的seed

    1. ANR 问题

    在txt文档中,查找‘ANR’

    2. Force close 问题

    在txt文档中,查找‘exception’

    3. 程序退出

    在txt文档中,查找‘die’

     

     ANR 问题分析

      ANRApplication Not Responding,5秒内没有响应输入的事件(例如,按键按下,屏幕触摸).

      需要开发再加一个线程来处理耗时的工作,来增加UI线程的响应.

    Force close问题分析

    一般看一下log,就可知道代码中的某个object null,但又被引用了,需要开发对objectobject 是否为null判断.

    相关文章

      网友评论

          本文标题:Monkey使用经验及改进

          本文链接:https://www.haomeiwen.com/subject/xbzanftx.html