移动性能测试 Monkey 测试日志讲解 (二)

金主 · March 07, 2018 · Last by 金主 replied at March 21, 2018 · 5596 hits
:文章有说的不对的地方,大家可以帮忙指出!
Monkey 测试基本操作介绍(一)
Monkey 测试日志讲解(二)
Monkey+Logcat+DDMS内存泄漏分析以及定位(三)
Monkey+Logcat+traces 查找以及分析定位 ANR 问题(四)
Monkey+battery-historian 电量测试(五)

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

☀ 注入事件10
Events 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:
// 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日志中看问题

测试结果初步判断

  1. monkey执行时未加--ignore-crashes --ignore-crashes参数,就先浏览日志中Events injected: 值,查看当前已执行的次数,就知道有无bug
  2. 程序无响应的问题:在日志中搜索 “ANR”
  3. 崩溃问题:在日志中搜索 “Exception” ,在这里顺便提一下常见的Java异常:
    1. 算术异常类:ArithmeticExecption
    2. 空指针异常类:NullPointerException
    3. 类型强制转换异常:ClassCastException
    4. 数组负下标异常:NegativeArrayException
    5. 数组下标越界异常:ArrayIndexOutOfBoundsException
    6. 违背安全原则异常:SecturityException
    7. 文件已结束异常:EOFException
    8. 文件未找到异常:FileNotFoundException
    9. 字符串转换为数字异常:NumberFormatException
    10. 操作数据库异常:SQLException
    11. 输入输出异常:IOException
    12. 违法访问错误:IllegalAccessError
    13. 内存不足错误:OutOfMemoryError
    14. 堆栈溢出错误:StackOverflowError 15.其他,请参考:https://www.cnblogs.com/cvst/p/5822373.html

找出问题后的操作步骤:

  1. 找到是monkey里面的哪个地方出错
  2. 查看Monkey里面出错前的一些事件动作,并手动执行该动作
  3. 若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 6 条回复 时间 点赞
金主 Monkey 测试基本操作介绍 (一) 中提及了此贴 07 Mar 17:25

Moneky一定要定制

金主 Mac 下如何安装 MySQL 中提及了此贴 09 Mar 12:10
金主 Monkey+battery-historian 电量测试 (五) 中提及了此贴 09 Mar 16:33

话说楼主有没那种特别容易跑出crash的测试包,这跑 monkey去调试比较快看到错误日志😂

金主 #9 · March 21, 2018 作者
thanksdanny 回复

没有呢😂

金主 回复

那得慢慢跑了哈哈

金主 #11 · March 21, 2018 作者
thanksdanny 回复

是的

simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 13 Dec 14:44
金主 Monkey 测试日志讲解 (二) 中提及了此贴 17 Jan 19:58
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up