移动性能测试 Monkey 测试基本操作介绍 (一)

金主 · February 24, 2018 · Last by 七哥 replied at May 17, 2021 · 9307 hits
:文章有说的不对的地方,大家可以帮忙指出!
Monkey 测试基本操作介绍(一)
Monkey 测试日志讲解(二)
Monkey+Logcat+DDMS 内存泄漏分析以及定位(三)
Monkey+Logcat+traces 查找以及分析定位 ANR 问题(四)
Monkey+battery-historian 电量测试(五)

monkey 测试简介

  1. 存放路径:Monkey 程序是 Android 系统自带的,由 Java 语言写成,在 Android 文件系统中的存放路径是: /system/framework/monkey.jar。
  2. 大致操作流程:通过名为 “monkey” 的 Shell 脚本去启动 Monkey.jar 程序(shell 脚本在 Android 文件系统中 的存放路径是:/system/bin/monkey),在你指定的 APP 应用上模拟用户点击,滑动,输入等操作以极快的速度来对设备程序进行压力测试,检测程序是否会发生异常,然后通过日志进行排错。
  3. 主要目的:测试 app 是否会是否会 Crash。
  4. 操作命令格式:adb shell monkey {+ 命令参数}

获取 Android 包名方法:(注意:请开启手机开发者模式,请开启手机 USB 调试模式)

  • 查看正在运行的程序的包名adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p' (例如:我清理手机后台之后,开启了 QQ,输入命令之后,就会出现 QQ 的进程,框的地方就是 qq 的包名)

monkey 常用操作命令简介

  1. -p 包名:指定应用程序。例如:adb shell monkey -p 包名 事件总数
  2. -v:打印 log 级别,-v 越多日志信息越详细,最多支持 3 个。例如:adb shell monkey -p 包名 -v -v -v 事件总数
  3. -s:伪随机数生成器的 seed 值,通俗的说就是个标记,后面跟数字,例如:执行 adb shell monkey -s 1 -p 包名 事件总数,这个我标记了-s 1,命令操作完之后,我发现有日志报错,我想重新执行这个 monkey 操作,那你就可以继续执行这个命令,排错时常用。
  4. -f:后接测试脚本名,例如:adb shell monkey -f 脚本名 事件总数
  5. --throttle:翻译减速的意思,后面接时间,单位为 ms,,表示事件之间的固定延迟,如果不接该项,monkey 将不会延迟,例如:adb shell monkey --throttle 500 -p 包名 事件总数
  6. --pct-事件类别 11 个事件百分比控制(有的是 9 种事件,没有--pct-pinchzoom,--pct-rotation 事件)由安卓 SDK 决定
  • 11 种事件,按顺序罗列的
    --pct-touch {+ 百分比}:0
    翻译触摸,触摸事件泛指发生在某一位置的一个 down-up 事件,点击
    --pct-motion {+ 百分比}:1
    翻译动作,动作事件泛指从某一位置接下(即 down 事件)后经过一系列伪随机事件后弹出(即 up 事件)
    --pct-pinchzoom {+ 百分比}:2
    翻译二指缩放,智能机上的放大缩小手势操作事件
    --pct-trackball {+ 百分比}: 3
    翻译轨迹,轨迹事件包括一系列的随机移动,以及偶尔跟随在移动后面的点击事件
    --pct-rotation {+ 百分比}:4
    翻译屏幕旋转,横屏竖屏事件
    --pct-nav {+ 百分比}:5
    翻译基本导航,基本导航事件主要来自方向输入设备的上、下、左、右事件
    --pct-majornav {+ 百分比}:6
    翻译主要导航,主要导航事件通常指引发图形界面的一些动作,如键盘中间按键、返回按键、菜单按键等
    --pct-syskeys {+ 百分比}:7
    翻译系统按键,系统按键事件通常指仅供系统使用的保留按键,如 HOME 键、BACK 键、拨号键、挂断键、音量键等
    --pct-appswitch {+ 百分比}:8
    翻译应用启动,应用启动事件(activity launches) 即打开应用,通过调用 startActivity() 方法最大限度地开启该 package 下的所有应用
    --pct-flip {+ 百分比}:9
    翻译翻转,键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回
    --pct-anyevent {+ 百分比}:10
    翻译其他类型,其他类型事件指上文中未涉及的所有其他事件,如 keypress、不常用的 button 等

  • 百分比控制以及使用

    • 首先注意一点,这个 Event percentages 在不同版本的 SDK 版本中顺序可能会不一样。
    • 如果在 monkey 参数中不指定事件参数,这些动作都是随机分配的,11 个动作其分配的百分比之和为 100%,通过添加命令选项来控制每个事件的百分比。
    • 添加事件百分比之后的情况,举例添加--pct-touch 事件百分比为 100:
    • 命令: adb shell monkey -v -p 包名 --pct-touch 100 100
    • 结果:
    • 说明:尴尬啊,我这个 vent percentages 竟然有 12 种,多了一种什么我也不知道,但我敢肯定这跟 SDK 版本有关系,想知道的同学可以自己从安卓 SDK 中反编译出 monkey 源码,通过查看源码中的 MonkeySourceRandom.java 文件获知!查出来的同学可以告知我下,我想做伸手党😂

7.--ignore-crashes:翻译忽略崩溃,当应用程序崩溃或发生失控异常时,monkey 将继续运行直到计数完成。如果不设置此项,monkey 遇到上述崩溃或异常将停止运行。
8.--ignore-timeouts:翻译忽略超时,当应用程序发生任何超时错误(如 ANR,即 Application Not Responding) 时,monkey 将继续运行直到计数完成。如果不设置此项,monkey 遇到此类超时将停止运行。

以上罗列的就是常用的操作,其他操作命令参考:https://www.cnblogs.com/chengchengla1990/p/5641086.html

monkey 测试中,如何终止运行:

  • 方法一:
    • 新建一个窗口
    • 执行: adb shell
    • 再执行ps | grep monkey,返回来的第一个数字,即是 monkey 的进程号
    • 然后 kill pid 进程号。如图

  • 方法二:对手机进行重启😂
    • 新建一个窗口
    • 执行adb reboot

log 日志导出

  • 保存到电脑上

    • 例如:保存到电脑上并命名为 monkey.txt

    执行adb shell monkey -p 包名 -v 1000 > /Users/weixiangyang/Desktop/monkey.txt

    • 例如:保存到电脑上标准流与错误流分开保存,分别命名为 info.txt,error.txt
    • info.txt:此文件在手机上的 SDCARD 中,主要记录了 MONKEY 测试时发送的各种事件,如触摸事件的位置等等。
    • error.txt:此文件在手机上的 SDCARD 中,主要记录了 MONKEY 测试时产生的一些 ANR、强制关闭等异常。 执行adb shell monkey -p 包名 -v 1000 1>/Users/weixiangyang/Desktop/info.txt 2>/Users/weixiangyang/Desktop/error.txt
  • 保存到手机上。注意:手机要 root

    • 例如:保存到手机上并命名为 monkey.txt

    执行
    adb shell说明:进入 adb shell 后就相当于进入 linux 的 root 下面,但是没有权限在里面创建文件,所以手机要 root
    monkey -p 包名 -v 1000 > /mnt/sdcard/monkey.txt
    注意:我的 adb shellmonkey XXX是分开执行的,分两行!!!

    • 例如:保存到电脑上标准流与错误流分开保存,分别命名为 info.txt,error.txt

    执行adb shell monkey -p 包名 -v 1000 1>/mnt/sdcard/info.txt 2>/mnt/sdcard/error.txt

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
最佳回复
共收到 15 条回复 时间 点赞

还不错

大神,膜拜啊!😥

金主 回复

有兴趣的话 可以加群一起讨论 qq 群 : 608824162

希望出个系列教程合辑,基础的还是有必要的。

楼主总结得很全面啊!

来自群友,楼主写的还算具体,不错

金主 Monkey 测试日志讲解 (二) 中提及了此贴 07 Mar 17:22

很好,顶一个

金主 Mac 下如何安装 MySQL 中提及了此贴 09 Mar 12:10
金主 Monkey+battery-historian 电量测试 (五) 中提及了此贴 09 Mar 16:33

写的很好 我用 monkey 好几年了 每天都在跑 也没有想到那么多

膜拜啊😂 请教下楼主,如果遇到我的 APP 页面都有很大输入框,必须填写完整才能跳转到下一个页面。那么我该怎样操作,才能让 monkey 可以运行到尽可能多的页面?

金主 #16 · March 16, 2018 Author
leunggz 回复

那你可以自己写 monkey 脚本,进行定制操作😪

补充两个 查看 activity 的命令 adb logcat -b events adb shell dumpsys activity top | find "ACTIVITY"

meiyo Monkey 测试的 Python 脚本 中提及了此贴 13 May 17:33
19Floor has deleted
20Floor has deleted

monkey 已指定了包名,但运行还会点到手机其他功能上去,怎么解?

金主 Monkey 测试基本操作介绍 (一) 中提及了此贴 10 Nov 14:41
simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 13 Dec 14:44

楼主 有没有遇到过 crash 日志保存不了在 monkey.txt 里面,只能在 cmd 控制台打印出来。求助!!

为啥 Android 7.0 后 anr 和 crash 日志保存不不到重定向的 monkey.txt 里面了,只在 cmd 控制台打印出来

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up