Android测试之Monkey原理及源码分析(一)

monkey测试

Android app想要测试稳定性,monkey最佳。而monkey是继承于shell中的一段指令,使用java编写的,所以只要有adb就能使用monkey。

monkey环境搭建

1.安装adb(https://blog.csdn.net/weixin_43273051/article/details/88809281)
2.安装Java JDK,并添加到环境变量
3.通过adb连接设备(https://blog.csdn.net/weixin_43273051/article/details/88809281)
4.adb shell monkey [options]

event-count

1.event-count是一个蛮关键的参数,省略掉它只会打印monkey的help usage

PS C:\Users\dchen> adb shell monkey
usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
              [-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
              [--ignore-crashes] [--ignore-timeouts]
              [--ignore-security-exceptions]
              [--monitor-native-crashes] [--ignore-native-crashes]
              [--kill-process-after-error] [--hprof]
              [--pct-touch PERCENT] [--pct-motion PERCENT]
              [--pct-trackball PERCENT] [--pct-syskeys PERCENT]
              [--pct-nav PERCENT] [--pct-majornav PERCENT]
              [--pct-appswitch PERCENT] [--pct-flip PERCENT]
              [--pct-anyevent PERCENT] [--pct-pinchzoom PERCENT]
              [--pkg-blacklist-file PACKAGE_BLACKLIST_FILE]
              [--pkg-whitelist-file PACKAGE_WHITELIST_FILE]
              [--wait-dbg] [--dbg-no-events]
              [--setup scriptfile] [-f scriptfile [-f scriptfile] ...]
              [--port port]
              [-s SEED] [-v [-v] ...]
              [--throttle MILLISEC] [--randomize-throttle]
              [--profile-wait MILLISEC]
              [--device-sleep-time MILLISEC]
              [--randomize-script]
              [--script-log]
              [--bugreport]
              [--periodic-bugreport]
              COUNT

2.那么event-count是啥呢?它是指随机发送事件总数,比如要发送100个随机事件,如下:

PS C:\Users\dchen> adb shell monkey 100
    // activityResuming(com.android.documentsui)
Events injected: 100
## Network stats: elapsed time=1553ms (0ms mobile, 0ms wifi, 1553ms not connected)

options

1.options是指monkey的参数
Android测试之Monkey原理及源码分析(一)_第1张图片
2.options根据具体需求可分为4类:
·常规类:

  • [-h]参数帮助信息
  • [-v]打印日志信息,-v越多日志信息越详细(最多3个):1个-v除启动提示、测试完成、结果以外提供的信息较少;2个-v提供较详细信息,如事件类型、事件比例、逐个发送到activity信息等;3个-v提供更详细的信息。

·事件类:对随机事件进行调控,使其按照设置进行

  • [-f scriptfile [-f scriptfile] …]用monkey运行指定的脚本,后面要接循环次数
  • [-s SEED]重复执行之前的随机操作
  • [–throttle MILLISEC]给每一个事件之间加上一个固定延迟(单位ms),默认是没有延迟的,而响应是需要一定时间的,这个参数很有用
  • [–pct-touch PERCENT]调整触摸事件的百分比,在构造函数中各个事件有一个初始占比
  • [–pct-motion PERCENT]调整动作事件的百分比
  • [–pct-trackball PERCENT]调整轨迹球事件的百分比
  • [–pct-syskeys PERCENT]调整系统按键事件的百分比
  • [–pct-nav PERCENT]调整基本导航事件的百分比
  • [–pct-majornav PERCENT]调整主要导航事件的百分比
  • [–pct-appswitch PERCENT]调整应用切换事件的百分比
  • [–pct-flip PERCENT]调整键盘事件的百分比
  • [–pct-pinchzoom PERCENT]调整缩放事件的百分比
  • [–pct-anyevent PERCENT]调整其他类型事件的百分比

注意:百分比总量不能超过100,而且touch和motion肯定是最频繁的,则可以提高这两种事件的比例;根据不同应用场景可以相应调整一些事件比例,比如视频类app,可以适当增加屏幕翻转事件的比例。

·约束类:将随件时间运行的范围约束在某几个包或类中

  • [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] …]测试一个或者多个包,后接包名
  • [-c MAIN_CATEGORY [-c MAIN_CATEGORY] …]测试一个类或者多个类,后接类名

·调试类:便于快速定位monkey运行中的问题

  • [–ignore-crashes]设置之后,当应用程序崩溃或失控异常时,monkey将继续运行直到完成event-count;若不设置,一旦遇到则停止运行。自动长跑过程中还是挺有用的
  • [–ignore-timeouts]设置之后,当应用程序发生超时错误(像ANR),monkey将继续运行直到完成event-count;若不设置,一旦遇到则停止运行
  • [–ignore-security-exceptions]设置之后,当应用程序发生任何权限错误(像启动需要权限的应用),monkey将继续运行知道完成event-count;若不设置,一旦遇到则停止运行
  • [–monitor-native-crashes]设置之后,当应用程序遇到系统级native code的崩溃事件时,将被监视并报告;否则不会监视此类事件
  • [–ignore-native-crashes]设置之后,当应用程序发生系统级native code崩溃时,monkey将继续运行直到完成event-count;若不设置,一旦遇到则停止运行
  • [–kill-process-after-error]设置之后,当应用程序发生错误(包括system native code crash)停止时,将会通知系统杀掉发生错误的进程;若不设置,该进程将继续处于运行状态
  • [–hprof]设置之后,将在monkey事件序列前后立即会在data/misc生成5M左右profiling report
  • [–wait-dbg]设置之后,将暂停执行中的monkey,直到有调试器与它连接,这样可以在发生崩溃时抓一下log
  • [–dbg-no-events]设置之后,monkey将进行初始启动,进入到某个测试Activity中不会进一步生成事件,通常与其他参数一起使用(像-v -p --throttle等)

3.TOUCH触摸事件:某个位置的一个按下并抬起的事件
4.MOTION动作事件:从某个位置按下后经过一系列为随机事件后弹起的事件
5.SYSKEYS系统按键事件:仅供系统使用的保留按键:HOME、BACK、拨号键、挂断键、音量键、切换键等
6.NAV基本导航事件:方向输入设备的上、下、左、右事件,手机上很少有这样的键,用得很少
7.MAJORNAV主要导航事件:会引起图形界面的一些动作,像返回键
8.APPSWITCH应用切换事件:随机时间间隔中,启动一个应用,即调用startActivity()最大限度开启该被测包中的所有应用
9.FLIP键盘事件:一些与键盘相关的操作,像点击输入框、键盘弹起、点击输入框以外区域、键盘收回等
10.PINCHZOOM缩放事件:在屏幕上的某两处同时按下,并同时移动,最后同时抬起的事件
11.ANYEVENT其他类事件:除了上面的事件以外的其他事件,像按键、其它不常用的设备按钮等

注意:monkey正常结束后,是不会停止启动的进程的,而是保持结束时间时的那个状态,而不会回到主界面

monkey测试原理

利用socket通讯方式来模拟用户的按键输入、触摸屏输入、手势输入等等,看设备多久出现异常。当monkey在设备上运行时,若用户触发event(如点击、输入等)或一些系统级别事件时,他就会产生随机脉冲,所以可以用monkey进行冒烟测试、随机测试、压力测试、稳定性测试。

你可能感兴趣的:(Android)