APP测试之Monkey测试
一、简介
1、什么是Monkey测试?
Monkey testing,也有人叫做搞怪测试。就是用一些稀奇古怪的操作方式去测试被测试系统,以测试系统的稳定性。Monkeytest,一般指这样的测试活动,用毫无规律的指令或操作使用被测系统,观察系统的稳定性和容错性能。
Monkey测试是Android自动化测试的一种手段,Monkey测试本身非常简单,就是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常。当Monkey程序在模拟器或设备运行的时候,如果用户触发了比如点击,触摸,手势或一些系统级别的事件的时候,它就会产生随机脉冲,所以可以用Monkey用随机重复的方法去负荷测试你开发的软件。
二、Monkey程序
1、程序存放路径
(1)Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是: /system/framework/monkey.jar;
(2) Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey
2、Monkey 命令启动方式
(1)可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试
(2)在PC上adb shell 进入Android系统,通过执行 monkey {+命令参数} 来进行Monkey 测试

(3) 在Android机或者模拟器(推荐使用夜神模拟器)上直接执行monkey 命令,可以在Android机上安装Android终端模拟器
3、Monkey架构
Monkey 运行在设备或模拟器上面,可以脱离PC运行,普遍做法是将monkey作为一个像待测应用发送随机按键消息的测试工具。验证待测应用在这些随机性的输入面前是否会闪退或者崩溃。
4、APP包名查看
(1)安装手机安装包名查看器'
(2)aapt命令 aapt dump badging *.apk
(3)源码下的AndroidManifest.xml文件查看
(4)adb logcat抓取当前Android机运行的app的包名( I/ActivityManager(数字): Displayed 包名/类名: +ms )命令行输入 adb logcat >e:\bag.txt
手机操控app,ctrl+c停止
去e:\bag.txt这个文件下搜索关键字如Displayed ,一般都能找到
三、Monkey参数与命令
1、Monkey常用参数
-v 日志详细程度
Level 0 : adb shell monkey -p fishjoy.control.menu -v 100 最简单(默认),除了启动、测试完成和最终结果外只提供较少的信息。
Level 1 : adb shell monkey -p fishjoy.control.menu -v -v 100 提供了较为详细的测试信息,如逐个发送到Activity的事件信息
Level 2 : adb shell monkey -p fishjoy.control.menu -v -v -v 100 提供了更多的设置信息,如测试中选中或未选中的Activity信息
比较常用的是-v -v -v,一般会保存到指定文件中供开发人员查找bug原因时使用
-s(随机数种子)
指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
示例: monkey测试1:adb shell monkey -p fishjoy .control.menu –s 10 100
monkey测试2:adb shell monkey -p fishjoy .control.menu –s 10 100
--throttle <毫秒>
指定用户操作(即事件)间的时延,单位是毫秒;如果不指定这个参数,monkey会尽可能快的生成和发送消息。
示例:adb shell monkey -p fishjoy.control.menu --throttle 3000 100
-p <允许的包名列表>
用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果不指定包,monkey将允许系统启动设备中的所有app。
--ignore-security-exception
作用:通常,当程序发生许可错误(例如启动一些需要许可的Activity)导致的异常时,Monkey将停止运行。设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
--ignore-timeouts
作用:通常,应用程序发生任何超时错误(如“Application Not responding”对话框)Monkey将停止运行,设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
--ignore-crashes
作用:通常,应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
--pct-touch <percent>
作用:调整触摸事件的百分比.(触摸事件是指在屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作)比如一个应用80%的操作都是触摸,那就可以将此参数的百分
比设置成相应较高的百分比。如触摸返回、触摸签到等。
--pct-motion<percent>
调整motion事件百分比。(motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成)也就是直线滑动事件如从左到有滑动解锁。
--pct-trackball <percent>
作用:调整滚动球事件百分比。(滚动球事件由一个或多个随机的移动事件组成,有时会伴随着点击事件)如不规则滑动解锁
--pct-nav<percent> 导航,现在手机基本没有导航了
---pct-syskeys<percent> 按键消息比例,主页、后退、音量增减
--pct-anyevent 其他不常用的按键比例的设置,不常用
--hprof monkey测试完成后生成内存快照,data/misc路径下生成,不常用,比较占空间
--ignore-security-exceptions 忽略权限问题的
--kill-process-after-error 当错误发生时杀进程
--monitor-native-crashes 监视崩溃时的本地代码
2、Monkey命令实例
monkey -pcom.tencent.mtaexample -s 23 --throttle2000 --ignore-crashes --ignore-timeouts -v -v -v 100000>/data/local/tmp/log.txt 2>&1 &
1.-p后面接着的对应的包名,如果是整机测试,就不需要 -ppackage_name
2.-s:后接随机数生成器的seed值,如果使用相同的seed值再次运行monkey,将生成相同的事件序列(也就是说,重复执行刚才的随机操作)。
3. --ignore-crashes --ignore-timeouts 这里是在monkey测试的过程中遇到carash或者timeout的情况时忽略掉,一般不设置时,出现carash或者timeout时,Monkey测试会终止,这里是防止Monkey测试终止。
4.-v 指的是Monkey测试时打印log级别。
5.100000 这里是指点击的次数,根据她们测试的经验,对于单个应用程序这个次数设置在100000次就可以了;如果是整机,一般设置在500000次。
/data/local/tmp/log.txt测试的log记录在手机上/data/local/tmp/ 下面的log.txt里面,这个名字可以自己写。
6.2>&1 固定的写法,这个也很重要,代表的意思是中间忽略的东西的日志一并输入到指定的文件中。
7.最后单独的一个"&" 是一旦Monkey测试开始了,之后可以拔掉数据线,不会影响Monkey测试。
8.测试所有模块 monkey -s 23 --ignore-crashes --ignore-timeouts -v-v -v 100000> /data/local/tmp/log.txt 2>&1 &
例:
adb shell monkey -p com.lnsoft.jiankangyanglao --throttle 1000 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -s 1000 -v -v -v 180000 1 > E:\sdk\log\login.txt
四、Crash(ANR)专项测试测试步骤
(1)安装可以引起Crash(ANR)的App
(2)执行压力命令
(3)析取Crash(ANR)的Exception信息
案例: 执行压力测试,并且生成monkey_test.log日志文件。
#adb shell monkey -p cn.besttest.crashtest -v 100 >E:\monkey\monkey_test.log
#查看E盘文件夹下已经生成了monkey_test.log。
#打开文件,进行crash(ANR)分析
五、Monkey日志分析
1、正常情况
如果Monkey测试顺利执行完成, 在log的最后, 会打印出当前执行事件的次数和所花费的时间; // Monkey finished 代表执行完成

2、异常情况
Monkey 测试出现错误后,一般的分析步骤
看Monkey的日志 (注意第一个swith以及异常信息等)
a) 程序无响应的问题: 在日志中搜索 ANR。
b) 崩溃问题:在日志中搜索 “Exception” (如果出现空指针, NullPointerException) 肯定是有bug。Monkey 执行中断, 在log最后也能看到当前执行次数。
3、测试结果分析
(1)、ANR问题(程序无响应):在日志中搜索“ANR"(application no response)
(2)、闪退问题:在日志中搜索"crash"
(3)、异常:搜索"exception"
(4)、强制退出:搜索"force closed"
(5)、将测试报告记录在本地:
将命令改为adb shell monkey –p android.zhibo8 –-throttle 100 –-pct-touch 50 –-pct-motion 50 –v –v 10 >c:\monkeylog.txt 待Monkey运行结束后,会在指定目录下生成指定文件。
(6)、Event percentage分析:
Event percentage分析:
在上述过程中,使用了percent相关命令控制了事件类型,如果我们不指定事件类型。生成的报告中,事件占比大致如下:
// 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:屏幕旋转事件百分比
// 5: 25.0% 5:基本导航事件百分比,即参数--pct-nav
// 6: 15.0% 6:主要导航事件百分比,即参数--pct-majornav
// 7: 2.0% 7:系统事件百分比,即参数--pct-syskeys
// 8: 2.0% 8:Activity启动事件百分比,即参数--pct-appswitch
// 9: 1.0% 9:键盘翻转事件百分比,即参数--pct-flip
// 10: 13.0% 10:其他事件百分比,即参数--pct-anyevent
更为具体的类型信息,可以查看查看Monkey源码中的MonkeySourceRandom.java文件。
APP测试之Monkey测试的更多相关文章
- 安卓app测试之Monkey测试
一.Monkey特点 1.运行时机:一般是产品稳定后 首轮功能测试完成的夜间进行 2.需要知道packageName 3.目的:主要测试产品是否存在崩溃问题和ANR问题. 二.获取包名的两个方法 首先 ...
- 安卓app测试之Monkey日志分析《转载》
安卓app测试之Monkey日志分析 链接:https://www.cnblogs.com/wuzm/p/10965762.html
- 安卓手机APP压力monkey测试
一.Monkey概述 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行 ...
- 手机APP测试之monkey
Monkey测试是一种为了测试软件稳定性.健壮性的快速有效的方法,Monkey程序由Android系统自带,使用Java语言写成.本此由于公司APP产品所需,用monkey进行稳定性测试,下面将本次使 ...
- 安卓app测试之Monkey日志分析
转:原文:https://blog.csdn.net/a136332462/article/details/76066909 一.一般测试结果分析-搜索关键字: 1.无响应问题可以在日志中搜索 “A ...
- android测试之monkey测试
1.首先安装SDK包 2.配置环境变量 3.打开CMD命令窗口,查看是否安装成功 命令:adb version 4.要做monkey测试的安卓包名,获取方式如下(必须启动要获取报名的app) 1.ad ...
- App测试之Monkey压力测试
- app测试之专项测试
专项测试包含很多东西,安装.升级.卸载.性能.安全.网络.随机等等,这些都属于专项测试 一个app的正常到用户手里使用,功能是最基础的测试,专项测试测试主要的. 下面介绍一些常用的专项测试: 1.多任 ...
- APP测试之MONKEY安装、使用
1.先下载java的jdk;配置java变量 安装好之后会有两个文件夹一个是jdk 一个是jre(运行)然后配置好java环境变量:JAVA_HOME:C:\Program Files\Java\jd ...
随机推荐
- Android全面解析之Activity生命周期
前言 很高兴遇见你~ 欢迎阅读我的文章. 关于Activity生命周期的文章,网络上真的很多,有很多的博客也都讲得相当不错,可见Activity的重要性是非常高的.事实上,我猜测每个android开发 ...
- Spring Boot 最简单的解决跨域问题
跨域问题(CORS) CORS全称Cross-Origin Resource Sharing,意为跨域资源共享.当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求.如果此时另一 ...
- Python开发:一个直播弹幕机器人诞生过程,自动发送弹幕
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬取B站弹幕视频讲解 https://www.bilibili.com/vide ...
- DRF使用超链接API实现真正RESTful
很多API并不是真正的实现了RESTful,而应该叫做RPC (Remote Procedure Call 远程过程调用),Roy Fielding曾经提到了它们的区别,原文如下: I am gett ...
- Python进阶——为什么GIL让多线程变得如此鸡肋?
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 做 Python 开发时,想必你肯定听过 GIL,它经常被 Python 程序员吐槽,说 Pytho ...
- 从零开始手把手教你使用javascript+canvas开发一个塔防游戏01地图创建
项目演示 项目演示地址: 体验一下 项目源码: 项目源码 代码结构 本节做完效果 游戏主页面 index.html <!DOCTYPE html PUBLIC "-//W3C//DTD ...
- NET 5 MemoryCache与Redis使用以及StackExchange.Redis和CSRedisCore
简介以及区别 ASP.NET Core 缓存Caching,.NET Core 中为我们提供了Caching 的组件. 目前Caching 组件提供了三种存储方式. Memory Redis SqlS ...
- C#中使用NPOI提示(找到的程序集清单定义与程序集引用不匹配)
问题 找到的程序集清单定义与程序集引用不匹配. (异常来自 HRESULT:0x80131040) 描述 使用NPOI导出word文档,需要C#的解压缩类,所以引用了ICSharpCode.Sharp ...
- EF中使用UnitOfWork
前言 关于EF5中使用UnitWork,参见另一博文: https://www.cnblogs.com/masonblog/p/9801162.html 每次提交数据库都会打开一个连接,造成结果是: ...
- springMVC搭建分布式框架
https://www.cnblogs.com/lr393993507/p/7652717.html https://www.cnblogs.com/Tpf386/p/10987931.html