monkey命令详解:基本语法、参数配置、日志分析等

 

文章目录
monkey介绍
基本语法
参数配置
基本控制参数
日志相关参数
事件类型参数
异常信息调试参数
其他参数
其他配置
关于日志分开输出保存
关于黑白名单
结果分析
错误信息类型
查找出错activity
复现问题
monkey介绍
monkey:由 Android SDK 提供的一个命令行工具;主要用于对 Android 应用进行压力测试和稳定性测试
实现方式:向系统发送伪随机的用户事件流来模拟用户的随机操作,如点击、滑动、按键等,以检测应用程序是否会在不同测试场景下出现崩溃等异常信息
特点: 单用户、快速、顺序执行、伪随机命令
(注:monkey测试是一种 stress-test,但本质上不符合并发概念;性能测试上的压力测试指的是模拟多个用户高并发测试)
基本语法
adb shell monkey [options] <event-count>

#"adb shell":确保devices已连接
#"monkey":monkey命令
#"[options]":可选;配置参数
#"<event-count>":必选;执行数量

参数配置
adb shell monkey -p 指定包名 -s 伪随机数生成器的seed值 --throttle 每个事件的延迟 --randomize-throttle 事件的随机时延 --pct-xxxx -v 日志级别(-v;-vv;-vvv) > 重定向日志打印位置

基本控制参数
-p <package_name> :指定需要执行monkey的应用包名,若不指定,则默认向系统内所有的应用发送随机事件
如:对 com.happy.app 进行发送 10000 个随机事件进行monkey测试
adb shell monkey -p com.happy.app 10000

如果要指定某个activity进行测试,使用 -c
adb shell monkey -c android.intent.category.LAUNCHER
#对 android.intent.category.LAUNCHER 这个Avtivity进行monkey测试

-s :伪随机数生成器的seed值,指定的随机数种子;
使用 相同的seed值 再次运行monkey,即 -s 后的种子值保持不变,会生成 相同的随机事件序列 ,就可重复之前的monkey测试,可以用于复现bug。
如果不指定种子值,系统会随机生成一个13位数字的种子值,在出现bug时,该种子值会和bug信息一起被输出,以便复现bug
如:使用随机数种子200,发送 10000 次事件
adb shell monkey -p com.happy.app -s 200 10000

–throttle :每个事件的延迟,以毫秒(ms)为单位;可用于模拟更真实的用户操作速度。
如:在每次发送事件后暂停 500 毫秒,总共发送 10000 个事件。
adb shell monkey -p com.hpaay.app --throttle 500 10000

日志相关参数
-v \ -vv \ -vvv :日志级别参数;设置日志的详细程度,可重复使用,最多三次,次数越多日志越详细。
" > " 或者 " >> " :重定向日志打印输出位置

adb shell monkey -p com.happy.app -v 10000 > monkey_log.txt
#"-v":默认级别;一级日志详细程度,显示基本的事件计数喝完成百分比;并将日志输出在 monkey_log.txt中

adb shell monkey -p com.happy.app -v-v 10000 > monkey_log.txt
adb shell monkey -p com.happy.app -vv 10000 > monkey_log.txt
#"-v-v 或者 -vv":二级日志详细程度,额外显示事件类型和目标包信息;并将日志输出在 monkey_log.txt中

adb shell monkey -p com.happy.app -v-v-v 10000 > monkey_log.txt
adb shell monkey -p com.happy.app -vvv 10000 > monkey_log.txt
#"-v-v-v 或者 -vvv":三级日志详细程度,显示每个事件的具体动作和结果等最详细信息;并将日志输出在 monkey_log.txt中


关于重定向指定:
" > ":重定向,输出会覆盖
" > > ":追加重定向,输出会追加在原来文件的末尾

事件类型参数
–pct-touch :设置触摸事件(点击屏幕)的百分比
adb shell monkey -p com.happy.app --pct-touch 50 10000
#"--pct-touch 50" 表示 50% 的事件是触摸事件

–pct-motion :设置动作事件(滑动屏幕)的百分比
adb shell monkey -p com.happy.app --pct-motion 30 10000
#"--pct-motion 30" 表示 30% 的事件是滑动事件

–pct-trackball :设置轨迹球事件的百分比(基本很少使用)

–pct-nav :设置导航事件(上下左右键)的百分比

–pct-majornav :设置主要导航事件(如返回键、菜单键)的百分比

–pct-syskeys :设置系统按键事件(如 Home 键、音量键)的百分比

–pct-appswitch :设置应用切换事件的百分比

adb shell monkey -p com.happy.app --pct-appswitch 10 10000
#"--pct-appswitch 10" 表示 10% 的事件是启动其他应用

–pct-flip :设置键盘翻转事件的百分比(适用于物理键盘设备)

–pct-anyevent :设置其他事件的百分比(包括不常用的事件)

–pct-pinchzoom :设置捏合缩放事件的百分比(双指缩放)

–pct-permission :设置权限事件的百分比(模拟权限弹窗操作)

–pct-rotation :设置屏幕旋转事件的百分比(横竖屏切换)

 

异常信息调试参数
–ignore-crashes:忽略应用崩溃,继续执行测试

–ignore-timeouts:忽略应用无响应(ANR),继续执行测试

–ignore-security-exceptions:忽略安全异常,继续执行测试

–kill-process-after-error:当发生错误时,终止测试并杀死进程

–monitor-native-crashes:监控并报告原生代码崩溃(C/C++ 代码)

 

其他参数
–hprof:在 Monkey 测试过程中,每隔一段时间生成内存快照(.hprof 文件);在测试结束后生成堆转储文件(用于内存分析)

–wait-dbg:等待调试器附加后再开始测试

–bugreport:在测试过程中自动生成 Bugreport 日志

–periodic-bugreport:定期生成 Bugreport 日志

–dbg-no-events:初始化测试但不发送任何事件

–setup scriptfile:运行指定的脚本文件以设置测试环境

-f :运行指定的脚本文件

–port :设置网络端口号(用于远程控制)

其他配置
关于日志分开输出保存
将monkey执行的标准日志和错误日志分开保存:
monkey [option] 1 > [路径1\monkey.log] 2 > [路径2\error.log]

Linux预留3个文件描述符:
0 ---- 标准输入(stdin)
1 ---- 标准输出(stdout)
2 ---- 标准错误(stderr)

关于黑白名单
可以通过黑名单和白名单来限制测试范围。白名单用于指定需要测试的应用,而黑名单用于排除不需要测试的应用
黑名单: --pkg-blacklist-file (执行黑名单以外的apk)
白名单: --pkg-whitelist-file (只执行白名单内的apk);或者通过 -p 参数来指定应用


adb shell monkey -p com.happy.app1 -p com.study.app2 10000
#对 com.happy.app1 和 com.study.app2 两个包进行测试;可以多次使用 -p 参数进行指定多个应用

adb shell monkey --pkg-whitelist-file /sdcard/whitelis.txt 10000
#创建白名单whitelis.txt,里面内容为 需要进行测试的包名
#如:
com.happy.app1
com.study.app2
执行monkey:会对 com.happy.app1 和 com.study.app2 两个包进行测试

adb shell monkey --pkg-blacklist-file /sdcard/blacklist.txt 10000
#创建白名单blacklist.txt,里面内容为 不需要进行测试的包名
#如:
com.happy.app1
com.study.app2
执行monkey:会对 com.happy.app1 和 com.study.app2 两个包以外的apk进行测试



结果分析
错误信息类型
如果日志中出现以下关键字,则大概率出现异常信息

ANR : 程序无响应或ANR问题
CRASH : 崩溃问题
Exception : 其他问题
Native Crash:原生代码崩溃
Security Exception:安全异常

查找出错activity
在两个switch之间查找是哪个activity出现了问题


复现问题
手动复现:查看monkey里面出错的一些事件,手动模拟执行这些事件

保持相同的seed,可以模拟上一次的monkey执行过程
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/GH_echo/article/details/145455224

posted @   Echo慧  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示