Monkey 程序是由 Android 系统自带,使用 Java 语言写成。在Android文件系统中的存放路径是:
/system/framework/monkey.jar;
Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:
/system/bin/monkey;
也就是说monkey可以直接通过打包进测试工具中,被测试人员直接使用,网络上许多第三方的monkey工具就是通过对原生的Monkey.jar包进行二次开发实现。
指定一个包adb shell monkey -p 包名 <事件数>
指定多个包adb shell monkey -p 包名1 -p 包名2 [事件数]
例:adb shell monkey -p com.ss.android.article.lite 10 ----对今日头条进行10次操作
adb shell dumpsys activity | find “mFocusedActivity”
adb shell dumpsys activity | find “mResumedActivity”
adb shell dumpsys window | findstr mCurrentFocus
adb shell dumpsys window | find “mCurrentFocus”
adb shell dumpsys activity top
查询包名
adb shell进入到手机inux命令行模式cd /data/data进行查看
adb shell pm list packages -----查看设备中所有已安装程序
adb shell pm list packages -s----查看设备中系统安装的程序
adb shell pm list packages -3----列出第三方安装的程序
adb shell pm list packages -d:显示禁用的包名
adb shell pm list packages -e:显示当前启用的包名
对以安装程序进行过滤
adb shell pm list packages |findstr包名中字符串(windows操作系统命令)
adb shell pm list packages |grep 包名中字符串(Linux操作系统命令)
例如:“今日头条极速版”包名:com.ss.android.article.lite
命令:adb shell pm list packages | findstr lite
黑名单:执行除了黑名单中以外的apk;
–pkg-blacklist-file /data/blacklist.txt
白名单:只执行在白名单中的apk;
–pkg-whitelist-file /data/whitelist.txt
v也叫消息级别,(-v表示打印一级日志) 3个-v表示是最高级日志
-v 说明:缺省值,仅提供启动提示和测试完成和最终结果等少了信息
-v -v 说明:提供较为详细的日志,包括每个发送的Activity的事件信息
-v -v -v说明:最详细的日志,包括了测试中选择/未选中的Activity的事件信息
adb shell monkey -v <事件数>
adb shell monkey -v -v <事件数>
adb shell monkey -v -v -v <事件数>
adb shell monkey -p com.ss.android.article.lite -v 10
adb shell monkey -p com.ss.android.article.lite -v -v 10 打印二级日志
adb shell monkey -p com.ss.android.article.lite -v -v -v 10 打印三级日志
–throttle 300 表示延迟300毫秒
adb shell monkey -p com.ss.android.article.lite -v -v -v --throttle 300 10表示每次运行之间间隔300毫秒,
注意:一般设置为300毫秒,原因是实际用户操作的最快300毫秒左右一个动作事件
–pct-touch :指定触摸事件的百分比,如:–pct-touch 5%
–pct-motion (滑动事件)
–pct-trackball (轨迹球事件)
–pct-pinchzoom (2指缩放)
–pct-rotation (屏幕旋转,横屏竖屏)
–pct-syskeys (系统按键事件 Home 、Back 、startCall 、 endCall 、 volumeControl)
–pct-nav (导航事件 up/down/left/right)老手机的上下左右,智能机没有
–pct-majornav (主要导航事件 back key 、 menu key)
–pct-appswitch (activity之间的切换比例)
–pct-anyevent (任意事件,设定不常用事件比例)
–pct-flip (键盘事件)
–ignore-crashes:忽略崩溃
–ignore-timeouts:忽略超时
–ignore-security-exceptions:忽略安全异常
–kill-process-after-error:发生错误后直接杀掉进程
–dbg-no-events:初始化启动的activity,但是不产生任何事件
–hprof:指定该项后在事件序列发送前后会立即生成分析报告 —— 一般建议指定该项。
–monitor-native-crashes:跟踪本地方法的崩溃问题
–wait-dbg:直到连接了调试器才执行monkey测试
-bugreport:当ANR,系统无响应,Crash的时候获得bugreport
如果用相同的seed值再次运行monkey,将生成相同的事件序列,主要用于复现问题!
-s seed —表示指定固定的seed值
例如:seed=1641906732217
adb shell monkey -p com.ss.android.article.lite -s 1641906732217 --throttle 300 --ignore-crashes -v -v -v --pct-touch 100 10
打印级别为Error的信息:
adb logcat -v time *:E > F:\Monkey\logcat.log
adb shell monkey 1000 > 文件路径/文件名
adb logcat 查看 Android 系统日志
adb logcat -c 清除现有日志
adb logcat -v time >D:\logcat.log 开始记录logcat日志
adb shell monkey 参数 >D:\monkey.log 执行monkey测试并输出monkey日志
Monkey 日志中 ANR 相关信息不够详细,当发现 APP 运行中存在 ANR 问题时,我们还需要使用 adb pull 命令从被测设备的/data/anr 目录下导出名为traces.txt 的对应 log 文件,adb pull /data/anr/traces.txt D:\traces.log #将logcat日志中记录的traces文件拉到电脑上
1.crash 闪退/崩溃
2.exception 其他异常事件(如果出现空指针NullPointerException,需格外重视)
3.force closed 强制退出
4.anr (application no response)程序无响应
5.GC 内存泄露问题
1、程序无响应的问题:在日志中搜索 “ANR”
2、 崩溃问题:在日志中搜索 “Exception”,Java常见异常:
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
违法访问错误:IllegalAccessError
内存不足错误:OutOfMemoryError
堆栈溢出错误:StackOverflowError
指令执行完成
遇到崩溃或异常
杀掉进程
adb shell
查看进程
(linux命令)
adb shell
ps -ef | grep monkey
(windows命令)adb shell ps -ef | findstr monkey
adb shell kill [进程号]
单个apk的验收测试时,使用单一apk且不忽略异常的命令执行
单个apk的解决问题的测试时,使用单一apk且忽略异常的命令执行。这样可以在一次执行的过程中发现应用程序中的多个问题。
单个apk的应用程序的压力/健壮性测试时,主要缩短monkey测试中事件与事件之间的延迟时间,验证在快速的事件响应的过程中,程序是否能正常运行。将–throttle的值设定为500或者更小,一般都使用500毫秒的延迟事件。
在进行apk的集合测试(测试对象为多个APP,手机测试?)时,对于高频率使用的apk、长时间使用的apk都要包含在执行的应用程序中间。
参考自:
https://www.zhihu.com/tardis/bd/art/495217967?source_id=1001
https://blog.csdn.net/weixin_37124805/article/details/122846710