新手区 android 测试 monkey 之旅 3-monkey 测试工具总结

for 新秀群 · 2018年09月11日 · 最后由 回复于 2018年09月12日 · 2811 次阅读

之前的博客已经提过了,monkey 是一个随机流的 android 性能测试工具。在这篇文档里,我将总结我自学道路上的一些经验,以及命令的解析。

  • 1.进入 monkey 环境
  • 1.1 首先检测 android 真机/模拟器是否已经连接:adb device
  • 1.2 然后选取一个设备来进入 shell:adb -s XX 设备 shell,当然如果你只有一个设备,完全可以写 adb shell

  • 2.进入 shell 之后 monkey help 查看 monkey 的帮助,当然你可以去官网看手册来进行学习

  • 3.查看本机的包,应用 package

  • adb shell pm list package -3

  • -s 系统应用

  • -3 第三方应用

  • 这里请注意,在 monkey 里我们测试性能的是应用的包

  • 另外附上一些额外的知识:

  • 应用包名 package 和入口 activity 名称的方法:

  • 方法一:使用 aapt //aapt 是 sdk 自带的一个工具,在 sdk\builds-tools\目录下

  • 1.以 ES 文件浏览器为例,命令行中切换到 aapt.exe 目录执行:aapt dump badging E:\apk\es3.apk

  • 2.运行后的结果中以下两行分别是应用包名 package 和入口 activity 名称

  • package: name=’com.estrongs.android.pop’

  • launchable-activity: name=’com.estrongs.android.pop.view.FileExplorerActivity’

  • 注:在 android sdk 目录搜索可以找到 aapt.exe,如果没有可以下载 apktool。

  • 这样我们就看到包了把,这里我查找的是第三方应用的包

  • 4.Monkey 操作的参数解析,以及结果的分析

  • 4.1 参数-p 用于约束限制,用此参数指定一个或多个包(Package,即 App)。指定包之后,Monkey 将只允许系统启动指定的 APP。如果不指定包,Monkey 将允许系统启动设备中

  • 的所有 APP。

  • 指定一个包: adb shell monkey -p com.htc.Weather 100

  • 说明:com.htc.Weather 为包名,100 是事件计数(即让 Monkey 程序模拟 100 次随机用户事件)。

  • 指定多个包:adb shell monkey -p com.htc.Weather –p com.htc.pdfreader -p com.htc.photo.widgets 100

  • 不指定包:adb shell monkey 100

  • 说明:Monkey 随机启动 APP 并发送 100 个随机事件。

  • 之前,我们有说第三方跟系统的包名的查看。那么要查看设备中所有的包,在 CMD 窗口中执行以下命令:

  • adb shell

  • #cddata/data

  • #ls

  • 4.2 参数: -v

  • 用于指定反馈信息级别(信息级别就是日志的详细程度),总共分 3 个级别,分别对应的参数如下表所示:

  • 日志级别 Level0

  • 示例 adb shellmonkey -p com.htc.Weather –v 100

  • 说明 缺省值,仅提供启动提示、测试完成和最终结果等少量信息

  • 日志级别 Level 1

  • 示例 adb shellmonkey -p com.htc.Weather –v -v 100

  • 说明 提供较为详细的日志,包括每个发送到 Activity 的事件信息

  • 日志级别 Level 3

  • 示例 adb shellmonkey -p com.htc.Weather –v -v –v 100

  • 说明 最详细的日志,包括了测试中选中/未选中的 Activity 信息

  • 4.3 参数: -s

  • 用于指定伪随机数生成器的 seed 值,如果 seed 相同,则两次 Monkey 测试所产生的事件序列也相同的。

  • 示例:

  • Monkey 测试 1:adb shell monkey -p com.htc.Weather –s 10 100

  • seed 值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;这个-s 就是指定了操作的顺序!

  • 4.4 参数: --throttle <毫秒>

  • 用于指定用户操作(即事件)间的时延,单位是毫秒;

  • 示例:adb shell monkey -p com.htc.Weather –throttle 3000 100

  • 在这里我来写个高级的 demo 给大家分析一下 monkey 的指令:

  • adb shell monkey -p com.tmall.wireless -v -v -pct-touch 50 -pct-trackball 30 -throttle 300 100

  • 用 monkey 测试天猫的这个包触摸操作百分之 50,轨迹球操作百分之 30,其它操作百分之 20,总共进行 100 次随机点击,事件之间间隔 300ms

  • 我们来看一下 Monkey 的特征:

  • 1.测试的对象仅为应用程序包,有一定局限性

  • 2.Monkey 测试使用的事件随机流是随机的,不能进行自定义

  • 3.可对 MonkeyTest 的对象,事件数量,类型,频率等进行设置

  • Monkey 的停止条件:

  • 1.如果限定了 Monkey 运行在一个或者几个特定包上,那么他会监控测试图到其它包的操作,并对其进行组织

  • 2.应用程序崩溃或接收到任何失控异常

  • 3.应用程序不响应

  • 4.正常运行结束

  • 5.强制停止进程

  • 最后是重头戏,monkey 测试结果的分析!

  • 1.seed=1418535683701,count=50 随机码 seed 为这么一串数字,操作事件的序列的一个标识。count

  • 2.select main activity。。。LANCHER 选择了哪些 activity

  • Using main activity 指的是能启动这些 activity,而不是刚刚启动的

  • 3.selecting main activities from category android.intent.category.Monkey

  • Monkey 启动了哪些 activities

  • 4.Monkey 测试的事件,有 11 种

  • 5.

  • 主 acitivity 名为 com.mediatek.stkselection

  • 6 模拟用户的操作,每一次的操作

  • 7.如果在这个过程中遇到了 Reject start OfIntent //拒绝此跳转,因为它是跳转到非他自己的包的 Acitivity

  • 8.Dropped: keys=9 pointers=0 trackballs=0 flips=0 rotations=0

  • 丢弃的,键=9,指针=0,轨迹球=0,翻转=0

  • 9.最后就是统计时间了,单位为 ms

  • 出现 crash,性能问题的场景:

  • 如何把你的 monkey 命令行的 log 输出:adb shell monkey xxxx >D:\a.txt xxx 是你的指令

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

赞,期待

期待

赞一个!

贵公司在哪里噢

期待中!

#6 · 2018年09月12日 Author
bauul 回复

西溪银泰附近

关闭了讨论 09月12日 14:57
重新开启了讨论 09月12日 15:14
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册