monkey测试步骤

1. 保持手机和电脑连接状态

  • 连接手机和电脑
  • 打开手机开发者模式
  • 电脑终端访问:adb devices 检查是否连接成功,出现设备编号代表连接成功
    image.png

2. 获取需要测试的包名

  • 手机端打开需要测试的APP
  • 电脑终端访问:adb shell dumpsys window |grep mCurrent,获取包名
image.png

3. 根据命令执行脚本,并输出报告

  • --throttle: 作用:在事件之间插入固定的时间(毫秒)延迟,你可以使用这个设置来减缓Monkey的运行速度,如果你不指定这个参数,则事件之间将没有延迟,事件将以最快的速度生成。
    注:常用参数,一般设置为300毫秒,原因是实际用户操作的最快300毫秒左右一个动作事件,所以此处一般设置为300毫秒。

  • --pct-touch:作用:调整触摸事件的百分比。(触摸事件是指在屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作)
    注:常用参数,此参数设置要适应当前被测应用程序的操作,比如一个应用80%的操作都是触摸,那就可以将此参数的百分比设置成相应较高的百分比。

  • --pct-motion:调整motion事件百分比。(motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成)。
    注:常用参数,需注意的是移动事件是直线滑动,下面的trackball移动包含曲线移动。

  • --throttle(毫秒)事件之间插入的固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定,Monkey将尽可能快的产生并执行事件。

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

  • --ignore-crashes 忽略程序崩溃。设置此选项后,Monkey会执行完所有的事件,不会因crash而停止。

  • --ignore-timeouts 忽略程序无响应。设置此选项后,Monkey会执行完所有的事件,不会因ANR而停止。

  • --ignore-security-exceptions 忽略证书或认证异常。设置此选项后,Monkey会执行完所有的事件,不会因认证或证书异常而停止。

  • --ignore-native-crashes 监视系统中本地代码发生的崩溃

  • --monitor-native-crashes 忽略本地代码导致的崩溃。设置忽略后,Monkey将执行完所有的事件,不会因此停止。

  • -v -v –v 提供最详细的设置信息

  • 参考命令

# 运行指定包,并输出报告
adb shell monkey  -p com.zhihu.android -v 100 > /Users/monkey/zhihu1.log

# 运行指定包,固定延迟300ms,触摸事件的百分比设置为50%,motion事件百分比设置为50%,输出两级报告到指定位置
adb shell monkey  -p com.zhihu.android --throttle 300 --pct-touch 50 --pct-motion 50 -v -v 1000 > /Users/monkey/zhihu2.log

# 运行指定包,设置相关事件信息,并忽略相关异常信息,输出测试报告
adb shell monkey -s 0001  -p com.sd.tongzhuo --throttle 250 --pct-touch 55 --pct-rotation 30 --pct-motion 15 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes --kill-process-after-error -v -v -v 10000 > /Users/monkey/0723_monkey_xiaomi_01.log

4. 检测adb logcat,并输出logcat报告

  • 一般来说我们需要打印两份报告,一份monkey报告,一份logcat报告
    adb logcat作用:把设备上的操作实时打印出来,比如app崩溃/异常,显示崩溃的原因,如空指针、参数错误、下标越界等。
  • 打开新窗口,执行:adb logcat > ~/Sunlands/monkey/0723_logcat_xiaomi_01.log
  • 执行monkey命令,同样保存日志
  • 待monkey结束后,ctrl+c中断log抓取

5. 日志分析

monkey日志报告

  1. monkey执行时未加--ignore-crashes --ignore-crashes参数,就先浏览日志中Events injected: 值,查看当前已执行的次数,就知道有无bug
  2. 程序无响应的问题:在日志中搜索 “ANR”
  3. 崩溃问题:在日志中搜索 “CRASH”
  4. 其他问题:在日志中搜索”Exception”

logcat日志报告

在logcat.log中搜索关键词GC,如果有下面四个中的一个,就可能存在内存泄露。
  1. GC_FOR_ALLOC, 因为在分配内存时内存丌够引发的
  2. GC_EXPLICIT, 表明GC被显式请求触发的,如System.gc调用
  3. GC_CONCURRENT, 表明GC在内存使用率达到一定的警戒值时,自动触发。
  4. GC_BEFORE_OOM, 表明在虚拟机抛出内存丌够异常OOM之前,执行最后一次回收内存垃圾
如果是ANR问题

搜索“ANR ”关键词(ANR后加个空格,屏蔽掉anr.log文件的无效信息) 。 快速定位到关键事件信息 。

如果是ForceClosed 和其它异常退出信息

搜索"Fatal" 关键词, 快速定位到关键事件信息 。
定位到关键事件信息后 , 如果信息不够明确的,再去搜索应用程序包的虚拟机信息 ,查看具体的进程和线程跟踪的日志,来定位到代码 。

参考文章:
monkey获取包名
Monkey命令
Monkey 测试日志讲解
Java 常见异常种类

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容