Monkey 测试日志讲解 (二)
monkey.txt日志详解
- 运行命令:
adb shell monkey -p 包名1 -v -v -v 10
- log详解:先贴张大图,了解下monkey的log输出内容:
下面就是我贴出的详细LOG:(表情代替注释符号,以免跟日志搞混)
伪随机种子数与事件总数:Monkey: seed=1519697645236 count=10
允许测试包:AllowPackage: 包名1
Category包含的LAUNCHER:IncludeCategory: android.intent.category.LAUNCHER
Category包含的MONKEY :IncludeCategory: android.intent.category.MONKEY
查询允许包的activity 结果列表// Selecting main activities from category android.intent.category.LAUNCHER
这些都不是指定包的activity
// - NOT USING main activity com.android.browser.BrowserActivity (from package com.android.browser)
// - NOT USING main activity com.android.calendar.homepage.AllInOneActivity (from package com.android.calendar)
// - NOT USING main activity com.android.camera.Camera (from package com.android.camera)
.... 中间忽略,从这也可以看出你手机上都安装了哪些应用
这个就是我们指定的包的activity // + Using main activity 包名1.ui.portal.WelcomeActivity (from package 包名1)
// Selecting main activities from category android.intent.category.MONKEY
种子为1519697645236// Seeded: 1519697645236
事件百分比
// Event percentages:
// 0: 15.0%
// 1: 10.0%
// 2: 2.0%
// 3: 15.0%
// 4: -0.0%
// 5: -0.0%
// 6: 25.0%
// 7: 15.0%
// 8: 2.0%
// 9: 2.0%
// 10: 1.0%
// 11: 13.0%
表示跳转到com.crazyhornets.MyHokageAndroidZSY包中的com.crazyhornets.MyHokage.MyHokageActivity里
:Switch:
#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=cn.yaomaitong.app.daily/cn.yaomaitong.app.ui.portal.WelcomeActivity;end
允许此Intent跳转
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=cn.yaomaitong.app.daily/cn.yaomaitong.app.ui.portal.WelcomeActivity } in package cn.yaomaitong.app.daily
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=cn.yaomaitong.app.daily/cn.yaomaitong.app.ui.portal.WelcomeActivity } in package cn.yaomaitong.app.daily
以下就是事件间的延迟和发送的各种事件
--pct-nav事件
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 82 // KEYCODE_MENU
:Sending Key (ACTION_UP): 82 // KEYCODE_MENU
Sleeping for 0 milliseconds
:Switch:
#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=cn.yaomaitong.app.daily/cn.yaomaitong.app.ui.portal.WelcomeActivity;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=cn.yaomaitong.app.daily/cn.yaomaitong.app.ui.portal.WelcomeActivity } in package cn.yaomaitong.app.daily
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=cn.yaomaitong.app.daily/cn.yaomaitong.app.ui.portal.WelcomeActivity } in package cn.yaomaitong.app.daily
--pct-touch事件
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(532.0,1392.0)
:Sending Touch (ACTION_UP): 0:(542.04724,1391.5958)
--pct-motion事件
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(838.0,113.0)
:Sending Touch (ACTION_UP): 0:(852.82526,101.77225)
--pct-trackball事件
Sleeping for 0 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(1.0,4.0)
:Sending Trackball (ACTION_MOVE): 0:(-5.0,-3.0)
--pct-rotation屏幕旋转百分比 ####隐藏事件
: Sending rotation degree=0, persist=true
: Sending rotation degree=1, persist=false:
: Sending rotation degree=2, persist=true
: Sending rotation degree=3, persist=false
注入事件10Events injected: 10
发送屏幕翻转 度=0,存留=假:Sending rotation degree=0, persist=false
丢弃:键=0,指针=0,轨迹球=0,键盘轻弹=0,屏幕翻转=0:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
网络状态:占用时间=42ms(手机0ms,wifi0ms,未连接42ms)## Network stats: elapsed time=42ms (0ms mobile, 0ms wifi, 42ms not connected)
Monkey测试完成// Monkey finished
- 异常结果:
- ANR输出LOG(暂时没相关例子,贴别人的图):
- CRASH输出LOG:
- ANR输出LOG(暂时没相关例子,贴别人的图):
// CRASH: cn.包名1 (pid 3165)
// Short Msg: java.lang.IllegalStateException
// Long Msg: java.lang.IllegalStateException: Fragment SingleChatFragment{366281} not attached to Activity
// Build Label: Xiaomi/sagit/sagit:7.1.1/NMF26X/V9.2.4.0.NCACNEK:user/release-keys
// Build Changelist: V9.2.4.0.NCACNEK
// Build Time: 1516183841000
// java.lang.IllegalStateException: Fragment SingleChatFragment{366281} not attached to Activity
// at android.support.v4.app.Fragment.getResources(Fragment.java:646)
// at cn.yaomaitong.app.ui.message.fragment.SingleChatFragment$13$1.run(SingleChatFragment.java:586)
// at android.os.Handler.handleCallback(Handler.java:754)
// at android.os.Handler.dispatchMessage(Handler.java:95)
// at android.os.Looper.loop(Looper.java:163)
// at android.app.ActivityThread.main(ActivityThread.java:6365)
// at java.lang.reflect.Method.invoke(Native Method)
// at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
// at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:791)
快速从monkey.txt日志中看问题
测试结果初步判断
- monkey执行时未加
--ignore-crashes
--ignore-crashes
参数,就先浏览日志中Events injected: 值
,查看当前已执行的次数,就知道有无bug - 程序无响应的问题:在日志中搜索 “ANR”
- 崩溃问题:在日志中搜索 “Exception” ,在这里顺便提一下常见的Java异常:
- 算术异常类:ArithmeticExecption
- 空指针异常类:NullPointerException
- 类型强制转换异常:ClassCastException
- 数组负下标异常:NegativeArrayException
- 数组下标越界异常:ArrayIndexOutOfBoundsException
- 违背安全原则异常:SecturityException
- 文件已结束异常:EOFException
- 文件未找到异常:FileNotFoundException
- 字符串转换为数字异常:NumberFormatException
- 操作数据库异常:SQLException
- 输入输出异常:IOException
- 违法访问错误:IllegalAccessError
- 内存不足错误:OutOfMemoryError
- 堆栈溢出错误:StackOverflowError 15.其他,请参考:
找出问题后的操作步骤:
- 找到是monkey里面的哪个地方出错
- 查看Monkey里面出错前的一些事件动作,并手动执行该动作
- 若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样。