Android Monkey

Monkey 是 google 提供的一款对 Android app 进行压力测试工具,基于随机坐标位置,进行点击、滑动、输入等操作.

Monkey 的环境配置

常用命令介绍

官方文档

https://developer.android.com/studio/test/monkey

help

adb shell monkey -help 打印参数帮助信息

out:
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]
             [--pct-permission 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]
             [--permission-target-system]
             COUNT

p


查看当前app包名命令:adb shell "dumpsys window |grep mCurrent"

adb shell monkey -p com.test.android(app包名)

启动包名是com.test.android的app进行monkey测试.

COUNT

adb shell monkey -p com.test.android 300(COUNT)

COUNT是需要Monkey执行的总共事件数.

v

adb shell monkey -p com.test.android -v 100

adb shell monkey -p com.test.android -v -v -v 100

v是设置日志级别,默认是一个

如需更详细的日志可以加多个-v,最多3个

s

adb shell monkey -p com.test.android(app包名) -s 50(随机种子)

s表示一个随机种子,必须是数字类型.可以用于两次monkey测试,第二次monkey回归第一次monkey测试出来的bug,指定的随机种子是一样的.
那么两次操作的事件操作基本一致.需要说明的是,随机种子仅仅的是操作是一样的,有些app启动以后会有弹框或者其他引导提醒,那么这样不能保证两次操作的路径是完全一样,需要手工去除

throttle

adb shell monkey -p com.test.android --throttle 500 300

throttle表示两次操作之间的延迟,单位是毫秒.因为实际模拟器用户操作并不一定要操作很快,所以500ms延迟到1000ms接近用户的真实使用.

randomize-throttle

adb shell monkey -p com.test.android --throttle 500 --randomize-throttle 300

randomize-throttle表示每次事件的间隔在0到500毫秒之间不固定

pct

触摸事件百分比,即参数--pct-touch
滑动事件百分比,即参数--pct-motion
缩放事件百分比,即参数--pct-pinchzoom
轨迹球事件百分比,即参数--pct-trackball
屏幕旋转事件百分比,即参数--pct-rotation
基本导航事件百分比,即参数--pct-nav
主要导航事件百分比,即参数--pct-majornav
系统事件百分比,即参数--pct-syskeys

adb shell monkey -p com.test.android --pct-touch 20 --pct-motion 30 300

ignore-crashes


adb shell monkey -p com.test.android --ignore-crashes 500

ignore-crashes表示运行monkey中,遇到crash会忽略,继续执行后续的操作.

ignore-timeouts

adb shell monkey -p com.test.android --ignore-timeouts 500

ignore-timeouts表示运行monkey中,遇到ANR会忽略,继续执行后续的操作.

ignore-native-crashes

adb shell monkey -p com.test.android --ignore-native-crashes 500 

ignore-native-crashes表示忽略monkey本身的异常,直到事件执行完毕

原生 monkey 一些不足

Monkey 脚本化

期望解决上述不足以外,还期望增加如下功能:

git 地址

https://github.com/xinxi1990/MyMonkey.git

脚本框架设计

脚本开发基于 python 语言开发,大致设计模块如下

脚本执行流程

生成性能报告

配合使用

结语

对于 app 的健壮性和稳定性,一直是个必须关注的问题.传统的手工测试无法解决庞大的用户群体的随机事件,所以此时需要借助一些工具来快速遍历到 app 中所有功能.

参考文档

android monkey 使用教程
https://www.jianshu.com/p/c2aca7019ddf


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