monkey mac版

一、Monkey是什么

Monkey是Android中的一个命令行工具,它其实就是SDK中附带的一个工具,可以运行在模拟器里或实际设备中;

二、Monkey测试的目的

在运行过程中向系统发送大量伪随机用户事件流(键盘输入、手势什么的)来检测app是否存在异常,找出其中潜在的未知问题,使软件更加趋近于稳定、健壮;

三、Monkey测试的特点

测试的对象仅为应用程序包,有一定的局限性;

Monkey测试,所有的事件都是随机产生的,不带任何人的主观性;

可对Monkey测试的对象,可对事件数量,类型,频率等进行设置;

四、Monkey的使用及命令详解

常用参数的详细解释

-p

用于约束限制,用此参数指定一个或多个包;

-s

用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的;

--ignore-crashes

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

--ignore-timeouts

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

--ignore-security-exceptions

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

-v 

命令行的每一个-v将增加反馈信息的级别。Level 0(缺省值)除启动提示、测试完成和最终结果之外,提供较少信息。Level 1 提供较为详细的测试信息,如逐个发送到Activity的事件。Level 2 提供更加详细的设置信息,如测试中被选中的或未被选中的Activity事件;

--monitor-native-crashes

监视并报告Android系统中本地代码的崩溃事件。直到有调试器和它相连接;

monkey的简单示例

adb shell monkey -p com.edu.android.daliketang -s 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes --throttle 100 -v -v 200000 > ~/Downloads/monkeytest.log

【命令释义】:monkey作用的包:com.edu.android.daliketang;产生时间序列的种子值:100,忽略程序崩溃、忽略超时、忽略程序错误、监视本地程序崩溃、事件之间延迟时间设定为100ms、日志详细信息级别为2 , 产生20万个事件,日志写入Downloads的monkeytest.log文档中 

五、Monkey日志分析

 args:  [-p, com.edu.android.daliketang, -s, 100, --ignore-crashes, --ignore-timeouts, --ignore-security-exceptions, --monitor-native-crashes, --throttle, 100, -v, -v, 200000](打印monkey命令携带的参数)

:Monkey: seed=100 count=200000(打印seed值和执行次数)

:AllowPackage: com.edu.android.daliketang

:IncludeCategory: android.intent.category.LAUNCHER

:IncludeCategory: android.intent.category.MONKEY

// Selecting main activities from category android.intent.category.LAUNCHER

//   - NOT USING main activity com.android.browser.launch.SplashActivity (from package com.android.browser)

//   - NOT USING main activity com.android.calendar.homepage.AllInOneActivity (from package com.android.calendar)

//   - NOT USING main activity com.xiaomi.vipaccount.ui.splash.SplashActivity (from package com.xiaomi.vipaccount)

//   + Using main activity com.edu.android.daliketang.activity.MainActivity (from package com.edu.android.daliketang)(允许启动的APP)

// Seeded: 100

// Event percentages:(打印各事件的百分比)

//   0: 15.0%

//   1: 10.0%

//   2: 2.0%

//   3: 15.0%

//   4: -0.0%

//   5: -0.0%

//   6: 25.0%

//   7: 15.0%

//   8: 2.0%

//   9: 2.0%

//   10: 1.0%

//   11: 13.0%

:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.edu.android.daliketang/.activity.MainActivity;end

    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.edu.android.daliketang/.activity.MainActivity } in package com.edu.android.daliketang(启动指定intent,可以查看在大致在哪个模块或页面)

Sleeping for 100 milliseconds

:Sending Key (ACTION_DOWN): 82    // KEYCODE_MENU

Events injected: 100

:Sending rotation degree=0, persist=false

:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0

Network stats: elapsed time=470ms (0ms mobile, 0ms wifi, 470ms not connected)

// Monkey finished

查看Monkey日志,初步分析方法:

Monkey测试出现错误后,一般的查错步骤为以下几步:

找到是monkey里面的哪个地方出错(如(快捷键Ctrl+f)搜索crash/anr/exception,查看crash位置前后是否有当前app的包名,如果有,则定位到crash由app引起的)

查看Monkey里面出错前的一些事件动作,并手动执行该动作

若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样

六、困扰的解决方式

monkey的随机事件可以帮助我们发现app中的一些缺陷,但是这些“随机”也会给我们带来一些困扰:

手机经常会在一个页面出不去,导致其他业务测试不到

手机会困在一个页面出不去;那我们需要做的就是在跑Monkey的间隔把APP从页面推出去;方法是使用“back”键退出程序:adb shell input keyevent 4 循环几次就可以退出去了

但是现实中还是有退不出的情况,怎么办?

另一个方法就是强制退出:adb shell am force-stop yourPkgName

手机网络关掉后,导致APP大部分是在无网情况下运行,都是无效的

目前的方案就是停止monkey,在网络环境好的情况下重新跑monkey:

adb shell(登录设备)

top|grep "monkey" (实时查询monkey的进程号)

kill -9 31819(-9:强制杀死进程;31819为查询出来的进程号)

怎样才能知道手机跑monkey时候的运行状态,如内存

adb shell cat /proc/meminfo;运行这个命令,就可以获取相关的内存信息了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容