移动性能测试 原生 monkey

彤彤彤彤彤 · 2021年08月23日 · 2777 次阅读

Monkey 是是 Android SDK 提供的一个命令行工具, 可以简单,方便地运行在任何版本的 Android 模拟器和实体设备上。 Monkey 会发送伪随机的用户事件流,适合对 app 做压力测试

Monkey 测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。当应用程序崩溃(CRUSH)或产生了程序不响应(ANR)的错误时,Monkey 将会停止并报错。Monkey 测试的对象仅为应用程序包,测试使用的事件流数据流是随机的,不能进行自定义,但可对测试对象进行事件类型,数量,频率进行设置

monkey 参数大全
【基础参数】
-v -------指定反馈信息级别(信息级别就是日志的详细程度)总共分 3 个级别,分别对应的参数如下
-v 100 // 缺省值,仅提供启动提示、测试完成和最终结果等少量信息
-v -v 100 // 提供较为详细的日志,包括每个发送到 Activity 的事件信息
-v -v -v 100 // 最详细的日志,包括了测试中选中/未选中的 Activity 信息
-s -------随机数种子,指定伪随机数生成器的 seed 值,如果 seed 相同,则两次 Monkey 测试所产生的事件序列也相同的
--throttle -------毫秒,指定用户操作(即事件)间的时延,单位是毫秒 --throttle 50 1000 //设置点击事件的间隔为 50ms 1000 次 ;跟 1000 即代表 1s 点击一次,同理,500 则代表 1s 点击两次

-p -------用此参数指定 1 个或多个包
【发送的事件类型】(各类事件的百分比不能超过 100)
--pct-touch 触摸事件百分比 0
--pct-motion 滑动事件百分比 1
--pct-pinchzoom 滑动事件百分比 2
--pct–trackball 轨迹球事件百分比 3
--pct–rotation 屏幕旋转事件百分比 4
--pct-nav 基本事件导航百分比 5
--pct-majornav 主要导航百分比 6
--pct-syskeys 系统事件百分比 7
--pct-appswtich activity 启动事件百分比 8
--pct-flip 键盘翻转事件百分比 9
--pct-anyevent 其他事件百分比 10
【调试选项】
--hprof

--ignore-crashes # 忽略崩溃

--ignore–timeouts # 忽略 ANR

--jgnore-secunity-exceptions # 忽略证书或认证异常

--ignore-native-crashes # 忽略本地代码发生的崩溃

--kill-process-after–error

--monitor-native-crashes

如:它将启动您的应用程序并向其发送 500 个伪随机事件:

$ adb shell monkey -p your.package.name -p your.package.name -vvv 500 >C:\test.txt

# 将系统事件的比例提升到 10%
$ monkey -p com.android.settings --throttle 50 --pct-syskeys 10 1000
日志分析
1.正常情况

如果 Monkey 测试顺利执行完成, 在 log 的最后, 会打印出当前执行事件的次数和所花费的时间; // Monkey finished 代表执行完成\
2.异常情况
Monkey 测试出现错误后,一般的分析步骤
看 Monkey 的日志 (注意第一个 swith 以及异常信息等)

  1. 程序无响应的问题: 在日志中搜索 “ANR”
  2. 崩溃问题:在日志中搜索 “Exception” (如果出现空指针, NullPointerException) 肯定是有 bug

FATAL EXCEPTION 关键字,如果下面带有 com.ganji.android ,直接提 bug
查找 Force finishing activity 关键字,如果下面带有 com.ganji.android ,直接提 bug
Monkey 执行中断, 在 log 最后也能看到当前执行次数

杀 monkey 进程
如果想中断运行中的 monkey CTRL+C
adb shell ps | grep monkey 返回进程号
adb shell kill [刚才查到的进程号]

app 包名查看
a、手机安装包名查看器'
b、aapt 命令 aapt dump badging *.apk
c、源码下的 AndroidManifest.xml 文件查看
d、adb logcat 抓取当前 Android 机运行的 app 的包名( I/ActivityManager(数字): Displayed 包名/类名: +ms )
命令行输入 adb logcat >e:\bag.txt
手机操控 app,ctrl+c 停止
去 e:\bag.txt 这个文件下搜索关键字如 Displayed ,一般都能找到

常见的异常
算数异常(ArithmeticException)
Notice: 3.0/0 0 / 0.0
数组索引越界(ArrayIndexOutOfBoundsException)
索引越界(IndexOutOfBoundsException)
空指针(NullPointerException)
强制类型转换转换(ClassCastException)
数字格式化转换(NumberFormatException)
找不到制定的类(ClassNotFountException)
未发现文件异常(FileNotFoundException)
Android 无权限的异常(例如:震动)

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册