Monkey日志分析是Monkey测试中非常重要的一个环节,通过日志分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和解决问题。介绍日志分析方法之前,先来看一下日志的保存方法。

1.Monkey日志的保存方法

Monkey运行日志常见的保存方法有三种:
❑ 保存在PC中,代码如下:
>adb shell monkey [option] <count> >d:\monkey.txt
执行以上命令,Monkey的运行日志将被保存在PC上的D盘下的一个monkey.txt文件中。
❑ 保存在手机中,代码如下:
>adb shell
>monkey [option] <count> > /mnt/sdcard/monkey.txt
执行以上命令,Monkey的运行日志将被保存在手机中的SD卡上的一个monkey.txt文件中。
❑ 标注流与错误流分开保存,代码如下:
Monkey [option] <count> 1>/sdcard/monkey.txt 2>/sdcard/error.txt
执行以上命令,Monkey的运行日志和异常日志将被分开保存。此时Monkey的运行日志将被保存在monkey.txt文件中,而异常日志将被保存在D盘下的error.txt中。
执行结束后,可以看到SD卡上新增加了monkey.txt和error.txt。monkey.txt显示运行日志,如图4-7所示。
[插图]
图4-7 运行日志输出
如果Monkey执行期间存在Crash(崩溃)或ANR(Application Not Responding,应用程序无响应), error.txt中会显示错误日志,如图4-8所示。
[插图]
图4-8 异常日志输出

2.Monkey日志内容解析

Monkey运行时输出的日志一般包含四类信息,分别是测试命令信息、伪随机事件流信息、异常信息、Monkey执行结果信息。
1)测试命令信息
Monkey启动后会输出当前所执行命令的各种参数信息,其中包括种子(Seed)信息、事件数量、可运行的应用列表以及各事件百分比等。这些信息都是通过Monkey命令参数所指定的,这部分日志信息的解析,如代码清单4-3所示。
代码清单4-3 Monkey日志-测试命令信息
//测试命令信息
//随机种子值,执行事件数量
:Monkey: seed=1454215444564 count=10
//可运行的应用列表
:AllowPackage: com.tencent.android.qqdownloader
//Category包含LAUNCHER和MONKEY
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
//各事件的百分比
// Event percentages:
// 0: 15.0% 事件0:--pct-touch
// 1: 10.0% 事件1:--pct-motion
// 2: 2.0% 事件2:--pct-pinchzoom
// 3: 15.0% 事件3:--pct-trackball
// 4: -0.0% 事件4:--pct-rotation
// 5: 25.0% 事件5:--pct-nav
// 6: 15.0% 事件6:--pct-majornav
// 7: 2.0% 事件7:--pct-syskeys
// 8: 2.0% 事件8:--pct-appswitch
// 9: 1.0% 事件9:--pct-flip
// 10: 13.0% 事件10:--pct-anyevent
2)伪随机事件流信息
当Monkey开始执行测试后,会顺序输出执行的事件流信息,主要是前面提到的11大事件。这部分日志信息的解析,如代码清单4-4所示。
代码清单4-4 Monkey日志-伪随机事件流信息
//执行的事件流信息
//启动App事件
:Switch: #Intent; action=android.intent.action.MAIN; category=android.intent.
category.LAUNCHER; launchFlags=0x10200000; component=com.tencent.android.
qqdownloader/com.tencent.assistant.activity.SplashActivity; end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.
intent.category.LAUNCHER] cmp=com.tencent.android.qqdownloader/com.tencent.
assistant.activity.SplashActivity } in packagecom.tencent.android.qqdownloader
//轨迹球事件
:Sending Trackball (ACTION_MOVE): 0:(4.0,2.0)
//点击事件
:Sending Touch (ACTION_DOWN): 0:(387.0,1858.0)
:Sending Touch (ACTION_UP): 0:(385.8215,1861.3011)
//延时
Sleeping for 0 milliseconds
3)异常信息
当Monkey执行过程中遇到错误时,会输出对应异常信息,如代码清单4-5所示。
代码清单4-5 Monkey日志-异常信息
//发送Crash的应用包名和pid
// CRASH: com.tencent.android.qqdownloader (pid 912)
//Crash的简要信息
// Short Msg: java.lang.ClassNotFoundException
//Crash的详细信息
// Long Msg: java.lang.ClassNotFoundException: Didn't find class "com.
qq.AppService.AstApp" on path DexPathList[[zip file "/data/app/com.tencent.
android.qqdownloader-2.apk"], nativeLibraryDirectories[/data/app-lib/com.
tencent.android.qqdownloader-2, /vendor/lib, /system/lib]]
//机型和系统信息
// Build Label: Xiaomi/pisces/pisces:4.4.4/KTU84P/5.12.24:user/release-keys
// Build Changelist: 5.12.24
// Build Time: 1450958964000
//Crash的详细日志
// java.lang.RuntimeException: Unable to instantiate application com.
qq.AppService.AstApp: java.lan.ClassNotFoundException: Didn't find class "com.
qq.AppService.AstApp" on path: DexPathList[[zip fil "/data/app/com.tencent.
android.qqdownloader-2.apk"], nativeLibraryDirectories=[/data/app-lib/com.
tecent.android.qqdownloader-2, /vendor/lib, /system/lib]]
// at android.app.LoadedApk.makeApplication(LoadedApk.java:509)
// at android.app.ActivityThread.access$1500(ActivityThread.java:138)
// at dalvik.system.NativeStart.main(Native Method)
// ... 11 more
//
4)Monkey执行结果信息
当Monkey执行完所有事件后,会输出执行结果信息,其中包括执行的事件数量、旋转的角度、丢失的事件数量、网络状态以及Monkey最终的执行结果,如代码清单4-6所示。
代码清单4-6 Monkey日志-执行成功结果信息
//执行的事件数量
Events injected: 10
//旋转的角度为0
:Sending rotation degree=0, persist=false
//丢失的事件数量
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
//网络状态,移动网络联网0ms, Wi-Fi联网0ms,没联网144ms
## Network stats: elapsed time=144ms (0ms mobile, 0ms wifi, 144ms not connected)
// Monkey finished
如果Monkey执行过程中出现了异常导致执行失败,会输出对应的执行失败的原因,第几个事件执行失败以及所使用的随机种子数,如代码清单4-7所示。
代码清单4-7 Monkey日志-执行失败结果信息
//显示Monkey执行失败
** Monkey aborted due to error.
//执行的事件数量
Events injected: 8
//旋转的角度为0
:Sending rotation degree=0, persist=false
//丢失的事件数量
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
//网络状态
## Network stats: elapsed time=405ms (0ms mobile, 0ms wifi, 405ms not connected)
//提示在执行到第8个事件时出现Crash,以及所使用的随机种子的值
** System appears to have crashed at event 8 of 100 using seed 1454216848235

3.Monkey日志异常信息查找

Monkey执行过程中常见的错误类型主要有两类:应用程序无响应(ANR)和崩溃(Crash)。
ANR是指当Android系统监测到应用程序在5秒内没有响应输入的事件或广播在10秒内没有执行完毕时抛出无响应提示。当出现ANR时弹出的错误提示框如图4-9所示。ANR弹窗
Crash是指当应用程序出现错误时导致程序异常停止或退出的情况,当出现Crash时通常会弹出对应的错误提示框如图4-10所示。crash弹窗
要统计Monkey日志中错误出现的次数也非常简单,只要搜索关键字“ANR”和“CRASH”出现的次数即可。由于通常Monkey测试的日志会比较大,日志内容也非常多,为了简化统计操作,可以使用bat脚本进行统计,具体如代码清单4-8所示。
代码清单4-8 Monkey日志分析bat脚本
@echo off&setlocal enabledelayedexpansion
#设置所有Monkey日志存放的目录
set ff=log\*.txt
#设置查询关键字
set str=CRASH crash ANR died
#设置查询结果存放的目录
set fileName=Result.txt
#开始查询
echo 正在统计&echo;
echo %date% %time% >%fileName%
echo.>>%fileName%
echo 分析结果:>>%fileName%
echo ---------------------------------------------->>%fileName%
#依次打开目录下每一个Monkey日志查询关键字并输出个数
(for %%a in (%str%)do (
set n%%a=0&set/p= %%a : <nul>con
for /f "delims=" %%b in ('findstr "%%a" "%ff%"')do (
set h=%%b
call :yky %%a)
echo ! n%%a! >con
echo 关键字 %%a 共有 ! n%%a! 处
))>>%fileName%
echo.>>%fileName%
#针对崩溃的日志输出其所在文件行数
echo 崩溃日志:>>%fileName%
findstr "%str%" "%ff%">>%fileName%
echo/&pause&exit
:yky
set/a n%1+=1
set h=! h:*%1=!
if defined h if not "! h:*%1=! "=="! h! " goto :yky
最终执行后,在脚本目录下会生成Result.txt文件记录异常出现的次数,如图4-11所示。
图4-11 日志分析结果文件
根据统计结果,可以得到Crash和ANR出现的次数,以及出现在哪个日志文件中,出现该错误的包名。如果需要更详细的错误信息,可以打开对应的Monkey日志文件查询。通过详细日志信息,测试可以定位到引起Crash的原因,以及出现Crash的代码行信息。这里给出常见的一些Crash错误信息,见表4-7。
表4-7 常见Crash信息表
当获取到Crash和ANR日志信息后,理论上开发人员就可以开始根据日志内容分析和定位问题了。但事实上,要定位问题单靠日志信息还是非常困难的,有时候开发人员还需要知道问题复现的场景,同时增加更多的调试日志以协助定位。这时候,他们可能会期望测试能够复现问题或者提供问题出现场景和操作步骤。通常,测试人员可以通过使用同一个种子数(seed值),再次执行Monkey来尝试复现问题。这种方法比较费时,并且不是所有的随机Crash和ANR都可以通过这种方法来复现。那问题来了,在Monkey出现问题的时候有没有可能即时地截图并且记录下操作步骤呢?Monkey本身是没有这个能力的,但是通过一些Monkey改造可以实现该功能。

转载于:https://www.cnblogs.com/Chilam007/p/10941092.html

Monkey框架(测试方法篇) - monkey日志分析相关推荐

  1. 日志分析篇---Web日志分析

    日志分析篇-Web日志分析 文章目录 日志分析篇---Web日志分析 一. web日志 二.日志分析技巧 三.日志分析案例 1.定位攻击源 2.搜索相关日志记录 3.对找到的访问日志进行解读,攻击者大 ...

  2. 日志分析篇---MSSQL日志分析

    日志分析篇-MSSQL日志分析 前言 常见的数据库攻击包括弱口令.SQL注入.提升权限.窃取备份等.对数据库日志进行分析,可以发现攻击行为,进一步还原攻击场景及追溯攻击源. 文章目录 日志分析篇--- ...

  3. 日志分析篇---Linux日志分析

    日志分析篇-Linux日志分析 文章目录 日志分析篇---Linux日志分析 前言 一.日志简介 二.日志分析技巧 1.常用的shell命令 2.日志分析技巧 三.我的公众号 前言 Linux系统拥有 ...

  4. APP测试工具monkey的安装和常用命令及日志分析

    Monkey安装步骤: 1.解压安装包(android-sdk_r24.4.1-windows.zip):解压到要安装的Android的路径即可.解压后的文件如下所示:包括add-one,platfo ...

  5. 51信用卡的日志分析变迁史和技术细节

    http://www.csdn.net/article/2015-02-09/2823887 摘要:自12年创业开始,至14年开始的"瞬时贷"上线,15年完成p2p金融信贷服务.5 ...

  6. APP稳定性测试利器 Monkey介绍、实战使用、日志分析

    第一.Monkey简介 Monkey是什么? Monkey 是安卓官方提供的一个命令行工具,可以运行在Android模拟器和实体手机上.通过Monkey 来模拟用户的触摸.点击.滑动.系统按键的操作, ...

  7. [原创]Android Monkey 在线日志分析工具开发

    [原创]Android Monkey 在线日志分析工具开发 在移动App测试过程中,Monkey测试是我们发现潜在问题的一种非常有效手段,但是Android原生的Monkey有其天然的不足,数据不能有 ...

  8. 安卓app测试之Monkey日志分析《转载》

    安卓app测试之Monkey日志分析 链接:https://www.cnblogs.com/wuzm/p/10965762.html 转载于:https://www.cnblogs.com/bifen ...

  9. monkey日志分析详解

    背景介绍: Monkey 是 Android平台自带的一款测试工具,它主要是用于压力测试以及稳定性测试,常规使用在功能测试之后的专项测试中通过点击,滑动等伪随机事件来实现压力测试. Monkey.ja ...

最新文章

  1. Spring中的18个注解,你会几个?
  2. 什么是结构风险?在决策树类相关算法中通常有哪些正则化参数来控制模型的结构风险?解读一下
  3. TCP/IP(四) —— TCP可靠传输的实现
  4. 吐槽一下现在的代码编辑器
  5. 使用Scrapy框架发送POST请求
  6. 远程上传下载文件-Xftp5
  7. NSDateFormatter设定日期格式
  8. 如何修改VS编译器的背景图:快来换属于你的背景图!!!!!
  9. 海康威视 - 萤石云开放平台 js 版
  10. bada 2D游戏编程之八——逐帧动画
  11. iOS-QQ自动聊天机器人
  12. .js ruby如何调用_为什么我们喜欢并选择Ruby而不是Node.js?
  13. 不相交轮换的乘积怎么求_伽罗华理论基础_刘长安.pdf_(12)(123)(14)不相交的乘积,8.将10次置换表互不相交的循环置换的乘积,并且求出。的逆与。的阶-教育文档类资源...
  14. 安装NIVIDIA CUDA toolkit
  15. 75佳精美的 CSS 网页设计作品欣赏(系列一)
  16. XGRegressor参数设置
  17. 消灭泡泡糖游戏java编程_JAVA面向对象编程课程设计——泡泡堂
  18. 在gitee上部署静态html表白烟花页面,Gitee Go (持续集成)服务(保姆级图文+实现代码)【杂记】
  19. 【Python虚拟环境】Windows环境下Python虚拟环境的创建与激活
  20. 第 3 章 程序的机器级表示

热门文章

  1. python如何大段注释_python大段注释
  2. 文字存入mysql数据库时出现Incorrect string value错误
  3. Java与数据库中的datetime Timestamp以及String之间的转换
  4. GeneXus Beta版本已经集成区块链技术
  5. Chrome密码导入
  6. 144个stm32开发相关的问题,看你了解几个
  7. java连接mysql(java连接mysql的jar包)
  8. 准备工作(正则表达式学习)
  9. matlab 显示绘图工具和停靠图形,4 7 交互式绘图工具ppt
  10. iOS处理语言工具CFStringTransform 的应用