app稳定性测试之Monkey工具
01monkey介绍Monkey是一款针对Android应用程序的自动化测试工具它的名字寓意着像猴子一样在软件上随机乱敲按键以此来模拟用户的随机操作。通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、滑动Trackball、手势输入等操作)Monkey可以对设备上的程序进行测试检测程序在长时间运行下的稳定性并观察程序在何种情况下会出现异常。Monkey测试不仅可以帮助开发者发现应用程序的潜在问题还能提高应用程序的健壮性和可靠性。此外Monkey还提供了丰富的命令行参数使得测试过程更加灵活和可控。02运行原理Monkey测试的原理主要是利用socket通讯的方式模拟用户的随机操作。当Monkey程序在模拟器或设备运行的时候如果用户触发了如点击、触摸、手势或一些系统级别的事件它就会产生随机脉冲并模拟出相应的用户操作。这些随机操作可以是对应用程序的UI进行点击、滑动、输入等操作也可以是模拟设备的一些系统事件如网络状态变化、电话呼入等。Monkey测试通过模拟用户操作来测试应用程序的稳定性主要是因为在实际使用中用户的使用习惯和操作方式往往是多样化和不可预测的。通过模拟这种随机性Monkey可以更全面地测试应用程序在各种情况下的表现从而发现可能存在的问题。03monkey命令Monkey命令的参数大致分为三大类(1)基本配置参数 –v -s --throttle -p;(2)发送的事件类型(3)调试选项参数说明一、基本参数1-P参数指定要测试的包名:例//指定1个包adb shell monkey -p cn.mopon.film 2000-P后面接app包名 2000是要测试的操作的次数(即随机事件数)比如点击数缩放数等达到这个次数测试就结束退出monkey测试状态。//指定多个包adb shell monkey -p cn.mopon.film -p com.tencent.QQ -p com.tencent.QQBrowser 100//不指定包adb shell monkey 100说明Monkey随机启动APP并发送100个随机事件。2)-v参数指定输出日志的级别monkey输出日志有3个级别通过-v参数来指定-v 第一级别; -v -v第二级别;-v –v –v 第三级别例//指定日志级别Level0adb shell monkey -p cn.mopon.film -v 100说明日志级别level0缺省值仅提供启动提示、测试完成和最终结果等少量信息//指定日志级别Level 1adb shell monkey -p cn.mopon.film -v –v 100说明日志级别 Level 1提供提供较为详细的日志包括每个发送到Activity的信息。//指定日志级别Level 2adb shell monkey -p cn.mopon.film –v -v –v 100说明日志级别 Level 2提供更详细的日志包括了测试中选中/未选中的Activity信息。Monkey的参数没有顺序要求但是随机事件数是一定要放在最后的。adb shell monkey -p cn.mopon.film –v -v –v 100 |logcat -v timeD:\log\1.txt说明用Monkey 测试时为了方便分析问题可以在命令monkey命令后面加上 |logcat -v time这样就能边测试边打印Log并存到电脑本地但是以上组合在monkey测试完成后logcat仍然在执行测试时需注意手动结束。3--throttle参数,指定用户操作间的时延//指定用户操作(即事件)间的时延adb shell monkey -p com.tencent.WeChat --throttle 3000 100说明throttle单位是毫秒。4)-s(随机数种子)用于指定伪随机数生成器的seed值如果seed值相同则两次Monkey测试所产生的时间序列也相同monkey测试1adb shell monkey -p com.taobao.taobao -s 10 100monkey测试2adb shell monkey -p com.taobao.taobao -s 10 100这个参数对于重测复现问题比较常用。04事件类型参数Monkey的事件类型总共有11种分别是触摸(Touch)、手势(motion)、二指缩放(pinchzoom)、轨迹(trackball)、旋转(rotation)、基本导航(nav)、主要导航事件(majornav)、系统按键(syskeys)、启动activity(appswitch)、键盘事件(flip)和其它类型事件(anyevent)在日志中分别用0-11来表示;如C:\Users\XXXadb shell monkey –p cn.mopon.film --throttle 1000 -v –v –v 100:Monkey: seed160364725750 count100:IncludeCategory: android.intent.category.LAUNCHER:IncludeCategory: android.intent.category.MONKEY// 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%05指定事件比例1、指定触摸事件的百分比adb shell monkey -p cn.mopon.film --pct-touch 20 1000注--pct-{事件类别{事件类别百分比用于指定每种类别事件的百分比(在Monkey事件序列中该类事件数目占总事件数目的百分比)--pct-touch {百分比用于调整触摸事件的百分比(触摸事件是一个down-up事件它发生在屏幕上的某单一位置)。2、指定动作事件的百分比adb shell monkey -p cn.mopon.film --pct-motion 30 1000注指定动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)。3、指定多个事件的百分比adb shell monkey -p cn.mopon.film --pct-touch 20--pct-pinchzoom30 --pct-motion 15 --pct-appswitch 301000说明指定多个事件百分比时各百分比之和不能超过100%如果不指定事件的百分比monkey会随机按事件百分比来跑app06调试类型参数由于monkey在测试app时我们需要作长时间的稳定性测试比如连续测试10小时(monkey不能指定时间可以指定次数时间可以在测试次数的日志基础上大概算出来)在测试过程中app很可能测试时间不久因为碰到问题而崩溃此时测试会停止而达不到我们长期测试的目的我们需要通过调试参数来让测试执行继续主要的几个参数如下--ignore-crashes指即使应用程序崩溃(Force Close错误)Monkey依然会发送事件直到事件计数达到指定的次数为止。如adb shell monkey -p cn.mopon.film --ignore-crashes 10000说明即使应用程序崩溃Monkey依然会发送事件直到事件计数达到10000为止。--ignore-security-exceptions指APP发生许可证书错误时Monkey依然继续发送事件直到事件数目达到目标值为止adb shell monkey -p cn.mopon.film --ignore-security-exceptions 1000--ignore-timeouts指app在发生 ANR(Application No Responding)错误时Monkey是否停止运行如果使用--ignore-timeouts参数即使应用程序发生ANR错误Monkey依然会发送事件直到事件计数完成如adb shell monkey -p cn.mopon.film --ignore-timeouts 1000--kill-process-after-error指APP发生错误时应用程序停止运行并保持在当前状如adb shell monkey -p cn.mopon.film --kill-process-after-error 1000当应用程序发生错误时应用程序停止运行并保持在当前状态注意系统并不会结束该应用程序的进程。也多个控制参数一起使用adb shell monkey -p cn.mopon.film --ignore-crashes--ignore-timeouts 10000注当app崩溃发生ANR错误时继续测试