monkey及其的日志管理和分析
1. monkey
1.1. 介绍
- 通过monkey程序模拟用户触摸屏幕,滑动Trackball、按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常,检查和评估被测程序的稳定性
 - 官方:Monkey是一个程序,运行在您的模拟器或设备上,并生成伪随机的用户事件流,如点击,触摸或手势,以及一些系统级事件。 您可以使用Monkey以随机但可重复的方式对您正在开发的应用程序进行压力测试。
 - 主要用于Android的压力测试,自动的一个压力测试小工具。目的是为了测试APP是否会crash
 - 用户主要是通过adb命令来启动Monkey的,Monkey在运行时,会根据命令行参数的配置,生成伪随机的事件流,并在Android设备上执行对应的测试事件。同时,Monkey还会对测试系统进行监测,当出现以下几种情况时会进行特殊处理:
 
1、如限定了Monkey运行在特定包上,当监测到试图转到其他包的操作,将对其进行阻止。
2、如应用程序崩溃或接收到任何失控异常,Monkey将记录对应的错误日志,并根据命令行参数判断是停止运行还是继续运行。
3、如果应用程序发生了程序无响应(application not responding)的错误,Monkey将记录对应的错误日志,并根据命令行参数判断是停止运行还是继续运行。
4、按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。
1.2. 流程
1、通过名为“monkey”的Shell脚本去启动Monkey.jar程序。
启动脚本是一个shell脚本,在Android文件系统的存放路径是:/system/bin/monkey。
2、在指定的APP上模拟用户点击,滑动,输入等操作以极快的速度来对设备程序进行压力测试。
3、检测程序是否会发生异常如:crash,然后通过日志进行排错。
1.3. 启动及关闭
- monkey启动方式:
 
1、通过pc cmd命令:adb shell monkey {+命令参数}进行monkey测试。(连接上移动设备)
2、在pc上’adb shell’进入Android系统,’cd /system/bin’进入指定目录,输入’monkey’有usage说明启动成功,再执行monkey {+命令参数}。(连接上移动设备)
3、Android机或模拟器上直接执行monkey命令,在真机上安装Android终端模拟器
- 强制关闭monkey
 
1、adb shell ps 查看全部在运行的进程
2、查找出com.android.commands.monkey 进程PID
3、adb shell kill pid:杀掉monkey进程
- monkey测试中,如何终止运行
 
方法一:
新建一个窗口
执行: adb shell
再执行ps | grep monkey,返回来的第一个数字,即是monkey的进程号
然后kill pid 进程号
方法二:
对手机进行重启
新建一个窗口
执行adb reboot
1.4. 命令
- monkey程序由Android系统自带,使用java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar
 - monkey命令格式:adb shell monkey [options] <event-count>
 
[options] 是指monkey可传入的参数,是可选项(如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包)
<event-count> 是指随机发送事件数。如:输入100就是执行100个伪随机事件,为必选项。
1.5. 日志管理作用及日志分析
- Monkey日志管理是Monkey测试中非常重要的一个环节,通过日志管理分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和解决问题。
 - monkey日志保存方法:
 
1.保存在PC中:>adb shell monkey [option] <count> >d:\monkey.txt
eg:C:\Users\Shuqing>adb shell monkey -v -v 100 >d:\monkeylog.txt
2.保存在手机上:C:\Users\Shuqing>adb shell回车;monkey -v 100 >/sdcard/monkeylog.log
注意:不能写成C:\Users\Shuqing>adb shell monkey -f /sdcard/kyb.txt -v 1 > /mnt/sdcard/monkey.log 否则会报错“系统找不到指定的路径”。
3.标准流和错误流分开保存:Monkey [option] <count> 1>/sdcard/monkey.txt 2>/sdcard/error.txt
C:\Users\Shuqing>adb shell monkey -v 100 1>d:\monkey.log 2>d:\error.log
执行以上命令,Monkey的运行日志和异常日志将被分开保存。此时Monkey的运行日志将被保存在monkey.txt文件中,而异常日志将被保存在D盘下的error.txt中。
- 日志分析:
 
1.正常:monkey测试顺利执行完成,在log的最后,会打印当前执行时间的次数和所花费的时间。Monkey finished代表执行完成
2.异常:出现错误后的分析步骤----看monkey的日志(注意第一个switch及异常信息等)
a程序无响应的问题:在日志中搜索‘ANR’
b奔溃问题:在日志中搜索‘exception’----出现空指针,NullPointerException,是bug。
monkey执行中断,在log最后也能看到当前执行次数。

3.看问题:
A monkey执行时未加--ignore-crashes --ignore-crashes参数,就先浏览日志中Events injected: 值,查看当前已执行的次数,就知道有无bug
B 程序无响应的问题:在日志中搜索 “ANR”
C 崩溃问题:在日志中搜索“Exception”,常见的Java异常:
算术异常类:ArithmeticExecption;空指针异常类:NullPointerException
类型强制转换异常:ClassCastException;数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException;文件已结束异常:EOFException
文件未找到异常:FileNotFoundException;
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException;输入输出异常:IOException
违法访问错误:IllegalAccessError;内存不足错误:OutOfMemoryError
堆栈溢出错误:StackOverflowError
其他,请参考:https://www.cnblogs.com/cvst/p/5822373.html
D 找出问题后的操作步骤:
找到是monkey里面的哪个地方出错
查看Monkey里面出错前的一些事件动作,并手动执行该动作
若以上步骤还不能找出,可以再执行一遍monkey命令,注意seed值要一样
monkey及其的日志管理和分析的更多相关文章
- 【Apache运维基础(6)】Apache的日志管理与分析
		
简述 Apache 访问日志在实际工作中非常有用,比较典型的例子是进行网站流量统计,查看用户访问时间.地理位置分布.页面点击率等.Apache 的访问日志具有如下4个方面的作用: 记录访问服务器的远程 ...
 - monkey日志管理
		
日志管理作用 Monkey日志管理是Monkey测试中非常重要的一个环节,通过日志管理分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和 ...
 - Appium自动化测试教程-自学网-monkey日志管理
		
日志管理作用 Monkey日志管理是Monkey测试中非常重要的一个环节,通过日志管理分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和 ...
 - Monkey测试:日志信息分析
		
在跑monkey时,我们需要将日志输出到文件,然后对日志信息进行分析. 一.输出日志到文件 在monkey命令后加>文件地址 如:adb shell monkey 1000>E:/text ...
 - Spring Boot从入门到精通(八)日志管理实现和配置信息分析
		
Spring Boot对日志的处理,与平时我们处理日志的方式完全一致,它为Java Util Logging.Log4J2和Logback提供了默认配置.对于每种日志都预先配置使用控制台输出和可选的文 ...
 - 第13章  Linux日志管理
		
1. 日志管理 (1)简介 在CentOS 6.x中日志服务己经由rsyslogd取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服务的使用,还是日志文件的格式其 ...
 - ABP(现代ASP.NET样板开发框架)系列之8、ABP日志管理
		
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之8.ABP日志管理 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
 - 【Java EE 学习 76 下】【数据采集系统第八天】【通过AOP实现日志管理】【日志管理功能分析和初步实现】
		
一.日志管理相关分析 1.日志管理是一种典型的系统级别的应用,非常适合使用spring AOP实现. 2.使用日志管理的目的:对系统修改的动作进行记录,比如对权限.角色.用户的写操作.修改操作.删除操 ...
 - ElasticSearch+NLog+Elmah实现Asp.Net分布式日志管理
		
本文将介绍使用NLOG.Elmah结合ElasticSearch实现分布式日志管理. 一.ElasticSearch简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布 ...
 
随机推荐
- linux应用-线程操作
			
文章写得好,转载一下, https://blog.csdn.net/triorwy/article/details/80380977
 - 编写一个Open Live Writer的VSCode代码插件
			
起因 又是一年多没有更新过博客了,最近用Arduino做了一点有意思的东西,准备写一篇博客.打开尘封许久的博客园,发现因为Windows Live Writer停止更新,博客园推荐的客户端变为了Ope ...
 - 【题解】Bzoj3916
			
字符串\(Hash\). 笔者实在太菜了,到现在还没有熟练掌握\(Hash\),就来这里写一篇学习笔记. \(Description\) 有三个好朋友喜欢在一起玩游戏,\(A\)君写下一个字符串\(S ...
 - C#数据结构-双向链表
			
链表的概念以及链表与数组的差异不做过多的叙述,相信大家都耳熟能详,这里以c#语言实现简单的双向链表,作为备用,记录下~ public class Node<T> { private Nod ...
 - c++ 西安交通大学 mooc 第十三周基础练习&第十三周编程作业
			
做题记录 风影影,景色明明,淡淡云雾中,小鸟轻灵. c++的文件操作已经好玩起来了,不过掌握好控制结构显得更为重要了. 我这也不做啥题目分析了,直接就题干-代码. 总结--留着自己看 1. 流是指从一 ...
 - FreeType2使用总结(转)
			
一.FreeType2简介 1. 是一个免费.开源.可移植且高质量的字体引擎: 2. 支持多种字体格式文件,并提供了统一的访问接口: 3. 支持单色位图.反走样位图渲染,这使字体显示质量达到Mac的水 ...
 - 详解工程师不可不会的LRU缓存淘汰算法
			
大家好,欢迎大家来到算法数据结构专题,今天我们和大家聊一个非常常用的算法,叫做LRU. LRU的英文全称是Least Recently Used,也即最不经常使用.我们看着好像挺迷糊的,其实这个含义要 ...
 - crontab极简教程
			
目录 crontab简介 crontab常用命令 示例 crontab简介 Linux crontab是用来定期执行程序的命令. 当安装完成操作系统之后,默认便会启动此任务调度命令. crontab常 ...
 - Rust之路(1)
			
[未经书面许可,严禁转载]-- 2020-10-09 -- 正式开始Rust学习之路了! 思而不学则罔,学而不思则殆.边学边练才能快速上手,让我们先来个Hello World! 但前提是有Rust环境 ...
 - day32 Pyhton 异常处理
			
一.内容回顾 反射的另外两个内置函数 setattr delattr a.b=c 与 setattr(a,'b',c)相对 del a.b 与 delattr(a,'b') 两个内置函数 A,B(A) ...