Android monkey 使用

  • Monkey是Android SDK提供的一个命令行工具,是由 Android 系统自带,使用 Java 语言写成。在Android文件系统中的存放路径是: /system/framework/monkey.jar;所以可运行在任一版本上的模拟器里或真机上。
  • Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey;
  • Monkey 启动方式:在 cmd 命令提示符里面输入命令行来启动 monkey 测试。
  • Monkey可发送伪随机的用户事件流,适合对应用进行压力测试;只针对Activity做测试,不能对Service做测试。

monkey原理

Monkey 运行在设备或模拟器上面,可以脱离PC运行(普遍做法是将monkey作为一个像待测应用发送 随机按键消息的测试工具。验证待测应用在这些随机性的输入面前是否会闪退或者崩溃)

Android monkey 路径 安卓monkey_Android monkey 路径

monkey指令

Android monkey 路径 安卓monkey_Android_02

  1. 允许启动手机里面所有的 App , 随机操作 1000 次
  2. -p:

选择报名,如果想运行多个可以叠加
例子:
单个包 adb shell monkey -p com.tencent.mobileqq 1000
多个包 adb shell monkey -p com.tencent.mobileqq -p com.tencent.mm 1000

  1. -v:

操作日志记录
-v :Level 0为最粗略的日志级,
-v -v :Level 1,提供较为详细的测试信息,如逐个发送到Activity的 事件
-v -v -v: Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity
例子:
adb shell monkey -p com.tencent.mobileqq -v -v -v 100

  1. -s:
    可以理解为monkey 编号,会根据编号制定执行测试的各种动作所占百分比,monkey是一个伪随机测试,原因就在于当我们两次测试选择同一只猴子(及同样的seed值)时,执行的动作配比是一致的。可以使用相同的seed值复现bug
    例子:
    adb shell monkey -p com.meitu.makeup -s 12304 -v -v 1000
  2. –throttle:
    插入固定延迟:在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定该选项,Monkey将不会被延迟,事件将尽可能快地被执行。
    例子:
    adb shell monkey -p com.meitu.makeup -s 12304 --throttle 100 -v -v 1000
    –pct-XX:整体之和不得超过100
  3. –pct-touch:点触操作
    调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)
    例子:
    adb shell monkey -p cn.emoney.acg --pct-touch 10 1000
  4. –pct-motion{+百分比}:
    调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随件机事和一个up事件组成)
    例子:
    adb shell monkey -p cn.emoney.acg --pct-motion 20 1000
  5. –pct-trackball {+百分比}:
    调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)
    例子:
    adb shell monkey -p cn.emoney.acg --pct-trackball 30 1000
    输出monkeylog
  6. 用‘>’作为输出符号,后面跟log输出路径
    例子:
    adb shell monkey -p com.meitu.makeup -s 12304 --throttle 100 -v -v 1000 >/Users/yangyue/Desktop/01.txt

主要关注日志中的error,crash,exception

操作流程

  1. 连接真机或模拟器
    执行adb devices
  2. 获取包名
    adb shell pm list packages -3 显示所有第三方应用。
  3. 执行monkey指令
  4. 同时获取更多信息
  • 获取内存信息:
    adb shell dumpsys meminfo $package_name or $pid
  • 获取CPU信息:
    adb shell top -n 1 |findstr $package_name or $pid
  • 获取电量信息:
    adb shell dumpsys battery
  • 获取GPU信息:
    要获取GPU信息,在“开发者选项”中打开“GPU呈现模式分析”
    GPU信息命令:
    adb shell dumpsys gfxinfo $package_name or $pid
  • 获取流量信息:
    adb shell cat/proc/uid_stat/ $uid/tcp_rcv
    adb shell cat/proc/uid_stat/ $uid/tcp_snd

命令行调用

写成shell脚本,可实现综合调用

#! /bin/bash

apkid=$1

count=$2

echo "dump before monkey"

adb shell dumpsys meminfo $apkid >meminfo.txt

adb shell monkey -p "$apkid" --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes --kill-process-after-error --pct-touch 80 --throttle 300 -v -v "$count" > monkey.txt

echo "dump after monkey"

adb shell dumpsys meminfo "$apkid" >>meminfo.txt

echo "dump after start MemoryMonitorActivity"

adb shell dumpsys meminfo "$apkid" >>meminfo.txt

echo "FINISH"

参考文档1参考文档2