Monkey 相关指令

项目

源码已挂载到 github 上: CrashMonkey4Android
关联项目: CrashMonkey4iOS

简介

CrashMonkey4Android,是一个依靠 Cts 框架,对原生 Monkey 进行改造后的产物,拥有以下新增功能:

  1. 保存每一步的截图
  2. 保存 logcat
  3. 保存每一个 Monkey 事件的信息
  4. 分析 Crash
  5. Html 报告
  6. 开源,你想做的,你能做的,只要你行,你就可以做
  7. 支持多设备

环境要求

  1. 安装 JDK1.6 以上 (包括 1.6) 并配置环境变量
  2. 安装 SDK 并配置环境变量

如何使用

下面以 Mac 环境为例

第一步

同步CrashMonkey4Androd_bin 项目来获取可执行文件,或者直接下载 ZIP 包,解压。

第二步

解压后,项目目录结构如下:

这里写图片描述

找到 tools 目录下的 cts-tradefed 文件,双击会出现终端窗口:

这里写图片描述

(可以看出来我们支持多设备)

第三步

在终端输入命令 : run cts --plan Monkeyreturn ,@Monkey开跑了。

这里写图片描述

第四步

参看报告,在 tools 的同级目录 repository 下有 2 个目录很重要

  1. logs:保存测试过程中的截图和 log 信息
  2. results: 保存测试报告

这里写图片描述

首先去 results 下打开报告,一个文件夹代表一次测试,我们刚才有 2 台设备,所以生成了 2 个报告,进入文件下找到 index.html,打开:

这里写图片描述

有 crash 版本:

这里写图片描述
index.html为结果总结页面,上面显示了测试设备的硬件信息 (Hardware),被测应用信息 (Application),测试周期 (Span),结果 (Results)。下方有一个表格中显示了测试所花时间 (Duration),Monkey 的事件数 (20)。点击 result 一览的链接进入详细报告:
无 crash 版本:

这里写图片描述
有 crash 版本
这里写图片描述

详细页面中显示了最后 50 步的操作截图 (少于 50 的全部列出),截图上绘制了操作的类型,还可以点击图片查看该步操作的相关 logcat 信息。还包括 3 按钮 (crash log 按钮会在发生 crash 的时候显示),点击system log 可以看到系统 log:

这里写图片描述

点击uiauto trace按钮会显示所有步骤的信息:

这里写图片描述

如果有crash log 按钮,会显示 crash 的简短信息,目前只是简单的从 logcat 分析 ANR 和 Java Crash 信息,后续会详细研究一下 crash 知识:

这里写图片描述

扩展功能

我们可以通过在命令行下输入run cts --help-all 获取所有的可设置参数:

test options:
    --p                  package of test app
    --a                  main activity of test app
    --v                  monkey event count Default: 20.
    --throttle           The delay time between the events Default: 300.
    --pct-tap            percentage of tap event Default: 25.0.
    --pct-motion         percentage of motion event Default: 0.0.
    --pct-nav            percentage of navigation event Default: 15.0.
    --pct-majornav       percentage of major navigation event Default: 15.0.
    --pct-syskeys        percentage of system key event Default: 15.0.
    --pct-drag           percentage of drag evnet Default: 30.0.
    --logcat-size        The max number of logcat data in bytes to capture when --logcat-on-failure is on. Should be an amount that can comfortably fit in memory. Default: 20480.
    --plan               the test plan to run.
    --[no-]reboot        Do not reboot device after running some amount of tests. Default behavior is to reboot. Default: false.
    --[no-]skip-device-info
                         flag to control whether to collect info from device. Providing this flag will speed up test execution for short test runs but will result in required data being omitted from the test report. Default: false.
    --[no-]device-unlock unlock device Default: false.
    --app-path           local app's path
    --wifiSsdk           wifi username
    --wifiPsk            wifi password
    --[no-]skip-uninstall-app
                         no uninstall test app Default: true.
    --monkey-log-size    monkey log size Default: 10485760.
    -b, --[no-]bugreport take a bugreport after each failed test. Warning: can potentially use a lot of disk space. Default: false.
    --[no-]tracefile     get trace file ,in /data/anr/trace.txt Default: false.

  'stdout' logger options:
    --log-level          minimum log level to display. Default: INFO. Valid values: [VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT]


主要关注以下属性:

  1. p :测试 app 的包名.
  2. a :测试 app 的主 activity,如果正确设置上面两项,Monkey 会针对上面-p 指定的应用测试,一直保持在该应用界面. 注意:-a 和-p 两个参数要一起使用,否则不起作用
  3. throttle:2 个 Monkey 事件之间的间隔,默认为 300 毫秒.
  4. pct-tap:点击事件的百分比,默认为%25.
  5. pct-motion:多点滑动事件百分比,默认为%0,(暂时还没实现).
  6. pct-nav: 导航事件的百分比 (导航事件由方向输入设备的上下左右按键所触发的事件组成),默认为%15.
  7. pct-majornav:主要导航事件的百分比。(这些导航事件通常会导致 UI 界面中的动作事件,如 5-way 键盘的中间键,回退按键、菜单按键),默认为%15.
  8. pct-syskeys:系统事件百分比。(这些按键通常由系统保留使用,如 Home、Back、Start Call、End Call、音量调节),默认为%15.
  9. pct-drag:拖拽事件的百分比,默认为%30.

目前只实现了 5/6,但是上面的数字相加一定要为 100%。

  1. reboot : 重启机器,默认为 false,不重启。如果想要重启的话,直接在命令行附上该参数,不用在后面加 true,因为 boolen 类型的设置方式和其他不一样。
  2. device-unlock:解锁手机,默认为 false,如果收集重启的话,建议将该属性设置为 true。解锁原理就是利用 appium 自带的 apk 来解锁的。
  3. skip-device-info:是否跳过设备信息获取,默认为 false。因为我们的报告中用到了设备信息,所以建议不要将该属性设置为 true。
  4. app-path:如果应用需要从本地安装,用该属性设置 app 路径,会自动安装 app 到收集端。
  5. wifiSsdk: wifi 的用户名
  6. wifiPsk:wifi 的密码

因为该工具支持自动连接 wifi,所以你的 app 需要在 wifi 情况下工作,请设置这两个属性,它会自动检测断网并重连

  1. skip-uninstall-app:是否跳过卸载 app 的阶段,因为如果使用本地 app 安装后,有时想卸载应用,可以设置该属性为 false。默认是不卸载。
  2. monkey-log-size:如果针对某一个应用测试,该工具为该 app 单独收集 log,这里可以设置 log 可以最大到多少 B。
  3. bugreport:是否保存 bugreport 信息,默认为 false。如果研发想要 bugreport 信息,将该属性设置为 true。
  4. tracefile:是否保存 trace.txt 文件,该文件位于/data/anr/trace.txt。一般发生 crash 的时候会用到该文件分析问题。

总结

目前 CrashMonkey4Android 还处于 pre-release 阶段,需要改善的地方还有很多,请大家多多提出建议。

目前我们已经推出了 iOS 和 Android 两个平台的 Monkey,归并到一个组织58Automation中,
欢迎大家 fuck,有问题请在 github 上提。


↙↙↙阅读原文可查看相关链接,并与作者交流