第一次写博客,记录自己使用Monkey的一些笔记。
monkey:Android sdk(软件开发工具箱)自带的工具,通过随机事件点击应用程序用来验证app的稳定性。
操作步骤:
1)安装android sdk,然后配置环境变量path。
2)开启开发者模式2种方式:
(1)设置>>>安全和隐私>>>更多安全设置>>>未知来源应用下载(开启外部来源应用检查和允许HiSuite通过HDB连接设备)
(2)设置>>>系统>>>关于手机>>>多次点击版本号进入开发者模式
3)下载adb驱动程序,电脑端安装。
4)通过usb连接手机与电脑,手机端允许usb调试(有时候存在usb适配出错的问题,更换usb即可)。
5)用adb devices查看设备是否连接上(如果看不到设备,查看是否存在端口占用,使用adb kill-server杀一下服务,再用adb devices查看设备)。
6)查看软件安装包apk:cmd>>>adb shell pm list package -3
7)将日志文件写入文档中:cmd打开命令窗口,adb shell monkey -p com.XXX.skyeye -s 50 --ignore-crashes --ignore-timeouts -vv 20000> UsersadminDesktoplianzhong_monkey.txt
8)日志解读
(0)触摸事件百分比 --pct-touch >> 即在某一位置的Down-Up(手指的放下和抬起)。
(1)手势事件百分比 --pct-motion >> 以Down开始,Up结尾的move动作事件。
(2)缩放事件百分比 --pct-pinchzoom
(3)轨迹球事件百分比 --pct-trackball >> 即单纯的Move。
(4)屏幕旋转事件百分比 --pct-rotation
(5)基本导航事件百分比 --pct-nav >> 即来自于方向输入设备的上下左右操作。
(6)主要导航事件百分比 --pct-majornav >> 即Navigation Bar的确认,菜单,返回键等。
(7)系统事件百分比 --pct-syskeys >> 即系统保留按键,如HOME键,BACK键,拨号键,挂断键,音量键等。
(8)activity启动事件百分比 --pct-appswitch >> 应用activity启动事件。
(9)键盘翻转事件百分比 --pct-flip
(10)其他事件百分比 --pct-anyevent >> 其他未提及事件,可能包含上述其他时间。
9)分析日志(按严重级别分):
(1)闪退问题:在日志中搜索"crash",且版本发布前 crash 结果为0。
(2)最终发布版本前,Monkey跑完的总次数不少于25W次,其结果里不允许有nullPointException出现。
(3)ANR问题(程序无响应):在日志中搜索“ANR"(application no response)
(4)force closed 强制退出:搜索"Fatal",内存泄露搜索"GC"。
(5)内存溢出的情况:搜索关键字“OOM”
(6)异常:搜索"exception"
A、Restart System异常(系统重新启动),即log信息的最后几行会看到Restart System的打印信息,说明手机被自动的重启或断掉,有几个方面的原因:
//运行过程中,存在异常手机被自动重启
//手机在运行过程中,进入设置中的恢复出厂设置,导致手机重启
B、RuntimeException等异常,同样的会在plog.log中可以看到相应的打印信息,java.lang.RuntimeException 该问题多出现在操作无响应之后,或者是某应用的服务无法启动或连接时,需要具体问题具体的分析。
C、StaleDataException、readException 等异常,在plog.log中可以看到相应的打印信息,也会有相应的信息:
android.database.StaleDataException,该信息说明android的数据库操作出现异常, 需要具体问题具体的分析。
D、IllegalArgumentException 等异常,多少情况下为说明向函数传递了一个不正确或不合法的参数需要具体问题具体的分析。
E、NullPointerException,空指针异常,需格外重视。
(7)monkey执行后,异常中断,手机黑屏,且日志提示Injection Failed:
换个手机,使用重复的seed看是否复现
10)Monkey参数解读
(1)-p
参数-p用于约束限制,用此参数指定一个或多个包(Package,即App)。指定包之后,Monkey将只允许系统启动指定的APP。如果不指定包,Monkey将允许系统启动设备中的所有APP。
(2)-v
用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:
日志级别 Level 0 –v
日志级别 Level 1 –v -v
日志级别 Level 2 –v -v -v
(3)-s
用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
(4)--ignore-crashes
忽视崩溃,发生崩溃后,Monkey不会中断,直到事件计数完成。
(5)--ignore-timeouts
忽视响应超时,如“Application Not Responding”对话框,Monkey不会中断。
(6)--ignore-security-exceptions
用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey不会中断,直到事件计数完成。
(7)--kill-process-after-error
用于指定当应用程序发生错误时,是否停止其运行。如果指定此参数,当应用程序发生错误时,应用程序停止运行并保持在当前状态(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)。
(8)参数: –monitor-native-crashes
用于指定是否监视并报告应用程序发生崩溃的本地代码。
(9)> UsersadminDesktoplianzhong_monkey.txt
日志以txt文本格式记录,不指定盘符时默认在adb盘符。
(10)--throttle
在事件之间插入固定延迟。通过这个选项可以减缓 Monkey 的执行速度。如果不指定该选项,Monkey 将不会被延迟,事件将尽可能快地被产成。
(11)–pct-{+事件类别}{+事件类别百分比}
用于指定每种类别事件的数目百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比):
--pct-touch 10
调整触摸事件的10%(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)
--pct-motion
调整动作事件的百分比(动作事件由屏幕上某处的一个 down事件、一系列的伪随机事件和一个 up事件组成)。
--pct-trackball
调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。
--pct-nav
调整“基本”导航事件的百分比(导航事件由来自方向输入设备的 up/down/left/right 组成)。
--pct-majornav
调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way 键盘的中间按键、回退按键、菜单按键)
--pct-syskeys
调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如 Home、Back、Start Call、End Call及音量控制键)。
--pct-appswitch
调整启动 Activity 的百分比。在随机间隔里,Monkey 将执行一个 startActivity()调用,作为最大程度覆盖包中全部 Activity 的一种方法。
--pct-anyevent
调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等
11)Monkey测试的停止条件:
(1)如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。
(2)如果应用程序崩溃或接收到任何失控异常-crash,Monkey将停止并报错。
(3)如果应用程序产生了应用程序不响应-ANR(application not responding)的错误,Monkey将会停止并报错。
12)Monkey中断步骤:
cmd
adb shell
top | grep monkey
kill掉就在运行monkey的端口号
13)获取更多的性能数据:
(1)执行Monkey的同时,另起一个CMD命令行窗口输入对应命令执行:
查看APP的进程ID(PID):adb shell ps | grep $package_name
查看APP的用户ID(UID):adb shell cat /proc/$pid/status
(2)记录logcat日志信 adb shell logcat -v time > logcat.txt2)
(3)获取内存信息(执行过程中是否存在内存泄漏或内存溢出):
adb shell dumpsys meminfo $package_name or $pid
(4)获取CPU信息:
adb shell top -n 1 |findstr $package_name or $pid
(5)获取电量信息:
adb shell dumpsys battery
(6)获取GPU信息(要获取GPU信息,在“开发者选项”中打开“GPU呈现模式分析”):
adb shell dumpsys gfxinfo $package_name or $pid
(7)获取流量信息:
adb shell cat/proc/uid_stat/$uid/tcp_rcv
adb shell cat/proc/uid_stat/$uid/tcp_snd