App稳定性测试Monkey


1.$ adb shell monkey <event-count> <event-count>是随机发送事件数
例:adb shell monkeyn 1000 发送1000个随机事件
2.$ adb shell monkey [options] <event-count> [options]是monkey可传入的参数
Monkey的option主要分为:常规类、事件类、约束类和调试类4种
2.1 常规类命令:
adb shell monkey -v <event-count>
-v:打印出日志信息,每个-v将增加反馈信息的级别。-v越多日志信息越详情,最多支持3个-v

2.2 事件类命令:
$ adb shell monkey -f <scriptfile> <event-count>
-f:后接测试脚本名,表示要使用monkey运行指定的monkey脚本,
如:$ adb shell monkey -f /mnt/sdcard/test01 3
注:这里的3是指循环次数,不是事件数
如果希望重复执行之前的随机操作,需要加-s命令,可指定随机数生成器seed值
$ adb shell monkey -s <seed> <event-count>
-s:后接随机数生成器的seed值,如果使用相同的seed值再次运行monkey,将生成相同的事件序列(也就是说,重复执行刚才的随机操作)
如: $ adb shell monkey -s 100 1000
$ adb shell monkey --throttle <milliseconds>
--throttle:后面接时间,单位为ms,表示事件之间的固定延迟(即执行每一个指令间隔的时间),如果不接该项,monkey将不会延迟
$ adb shell monkey --pct-touch <percent>
--pct-touch:后面接触摸事件百分比,触摸事件泛指发生在某一位置的一个down-up事件,点击
$ adb shell monkey --pct-montion <percent>
--pct-motion:后面接动作事件百分比,动作事件泛指从某一位置接下(即down事件)后经过一系列伪随机事件后弹出(即up事件)
$ adb shell monkey --pct-trackball <percent>
--pct-trackball:后面接轨迹事件百分比,轨迹事件包括一系列的随机移动,以及偶尔跟随在移动后面的点击事件
$ adb shell monkey --pct-nav <percent>
--pct-nav:后面接基本导航事件百分比,基本导航事件主要来自方向输入设备的上、下、左、右事件
$ adb shell monkey --pct-majornav <percent>
--pct-marjornav:后面接主要导航事件百分比,主要导航事件通常指引发图形界面的一些动作,如键盘中间按键、返回按键、菜单按键等
$ adb shell monkey --pct-syskeys <percent>
--pct-syskeys:后面接系统按键事件百分比,系统按键事件通常指仅供系统使用的保留按键,如HOME键、BACK键、拨号键、挂断键、音量键等
$ adb shell monkey --pct-appswtich <percent>
--pct-appswitch:后面接应用启动事件百分比,应用启动事件(activity launches)即打开应用,通过调用startActivity()方法最大限度地开启该package下的所有应用
$ adb shell monkey --pct-anyevent <percent>
--pct-anyevent:后面接其他类型事件百分比,其他类型事件指上文中未涉及的所有其他事件,如keypress、不常用的button等

2.3约束类命令
约束类命令可以让随机事件运行的范围限制在某几个包或类中。
$ adb shell monkey -p <allowed-package-name> <event-count>
-p:后面接一个或多个包名,如果不指定任何包,monkey将允许系统启动全部包里的Activity。每个-p对应一个包,指定多个包时每个包名前都需要加上-p
如:$ adb shell monkey -p com.agent.tao 1000 运行com.agent.tao 包里的Activity并发送1000个随机事件
$ adb shell monkey -c <main-category> <event-count>
-c:后面接一个或多个类别名,monkey将只允许系统启动这些类别中某个类别列出的Activity,如果不指定任何类别,monkey将选择Intent.CATEGORY_LAUNCHER和Intent.CATEGORY_monkey里的Activity
每个-c对应一个类别,指定多个类别时每个类别名前面都需要加上-c
如:$ adb shell monkey -c Intent.CATEGORY_LAUNCHER 1000
运行Inter.CATEGORY_LAUNCHER类别的Activity并发送1000个随机事件

2.4调试类命令
通过调试类命令可以对monkey进行简单的调试,这样可以快速定位monkey运行中的问题
$ adb shell monkey --dbg-no-events <event-count>
--dbg-no-events:设置此项后,monkey将进行初始启动,进入到某个测试Activity中不会进一步生成事件,可以监视应用程序所调用的包之间的转换,为了更好的跟踪,一般该项
会与-v(日志)、-p<allowed-package-name> (包约束) 和 --throttle<milliseconds> (延迟)等联合使用
$ adb shell monkey --hprof <event-count>
--hprof:设置此项后,将在monkey事件序列前后立即生成profilfing report,将在data/misc中生成5MB左右大小的文件
$ adb shell monkey --ignore-crashes <event-count>
--ignore-crashes:设置此项后,当应用程序崩溃或发生失控异常时,monkey将继续运行直到计数完成。如果不设置此项,monkey遇到上述崩溃或异常将停止运行。
$ adb shell monkey --ignore-timeouts <event-count>
--ignore-timeouts:设置此项后,当应用程序发生任何超时错误(如ANR,即Application Not Responding)时,monkey将继续运行直到计数完成。如果不设置此项,monkey
遇到此类超时将停止运行
$ adb shell monkey --kill-process-after-error <event-count>
--kill-process-after-error:设置此项后,当monkey因为应用程序发生错误而停止时,将会通知系统停止发生错误的进程。如果不设置此项,monkey停止时发生错误的应用程度将
继续处于运行状态。
$ adb shell monkey --ignore-security-exceptions <event-count>
--ignore-security-exceptions:设置此项后,当应用程序发生任何权限错误(如启动一个需要某些权限的Activity)时,monkey将继续运行直到计数完成。如果不设置此项,
monkey遇到此类权限错误将停止运行。
$ adb shell monkey --monitor-native-crashes <event-count>
--monitor-native-crashes:设置此项后,monkey运行时native code的崩溃事件将被监视并报告。如果不设置此选项,将不会监视此类事件。
$ adb shell monkey --wait-dbg <event-count>
--wait-dbg:在设置此项后,将暂停执行中的monkey,直到有调试器与它连接。

结果检查与分析
测试结束后,需要将手机连接PC,拷贝以下文件:
- info.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时发送的各种事件,如触摸事件的位置等等。
- error.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时产生的一些ANR、强制关闭等异常。
- LOG文件:此文件在手机上的LOG文件夹中中,主要主要记录程序对MONKEY测试时的响应情况。
我们需要对这3个文件进行分析整理,以便提交开发人员处理。
检查测试是否完成
通过info.txt文件,可以查看Monkey是否执行成功。如下图

结果分析整理
我们目前执行Monkey测试的目的是为了检查是否有内存泄露,而这类问题主要是通过Log文件来体现的。
Error文件也记录了部分异常,考虑到这部分文件格式已经很规范,因此不需要再次整理。
Log文件记录了所有信息,因此我们需要进行初步分析整理后再提交研发,以减少研发工作量。
Monkey测试后在Mobilelog文件中会产生多个main_log文件,里面含有详细的log执行记录。通过main_log文件,我们可以查看可能存在内存泄露代码所在具体位置。是否该行代码存在泄露需要开发人员进一步验证。我们只提供可能存在代码泄露的信息。
含有mian_log的文件都需要进行查看。搜索关键字“leak”,在搜索结果中,查看与Ideafreiend相关的代码。如下图:

注:com.lenovo.ideafriend:Ideafriend包名;CursorLeakDetecter: 游标泄露检查器
1. 程序无响应的问题: 在日志中搜索 “ANR”
2. 崩溃问题:在日志中搜索 “Exception” (如果出现空指针, NullPointerException) 肯定是有bug
App稳定性测试Monkey的更多相关文章
- APP稳定性测试-monkey执行
Monkey命令行可用的全部选项 *示例 : adb shell monkey -p cn.lejiayuan.alpha --pct-touch 30 --pct-motion 15 --pct-t ...
- APP稳定性测试
APP稳定性测试-monkey测试 第一篇-App稳定性测试-Monkey(基本操作) 准备工作 1.首先下载好adb工具 2.使用数据线连接电脑,打开usb调试 3.使用win+R打开运行, ...
- Monkey Android app稳定性测试工具之Monkey使用教程
Monkey Android app稳定性测试工具之Monkey使用教程 by:授客 QQ:1033553122 由于篇幅问题,仅提供百度网盘下载链接: Android app稳定性测试工具之Monk ...
- Android客户端稳定性测试——Monkey
修改时间 修改内容 修改人 2016.6.20 创建 刘永志 2016.6.29 完成 刘永志 Monkey简介: Android SDK自带的命令行测试工具,向设备发送伪随机事件流,对应用程序进行进 ...
- Android APP压力测试-Monkey
压力测试-Monkey学习 Monkey测试特点 什么是Monkey test? 如其名,像猴子一样,虽然什么都不懂,但是可以乱点一通,可以理解为压力测试.在规定的时间或次数范围内做任何随机的操作,随 ...
- APP压力测试 monkey(新猿旺学习总结)
安卓APP做压力测试 需要配置JDK(Java)和 配置SDK 遮掩才能使用adb命令连接手机进行模拟动作事件进行压力测试 配置 K JDK 与 K SDK 环境 a java 与 与 sdk 用于 ...
- Android App常规测试内容
转自:https://mp.weixin.qq.com/s?__biz=MzU0NjcyNDg3Mw==&mid=2247484053&idx=1&sn=116fe8c7eed ...
- 【测试工具】这些APP实用测试工具,不知道你就out了!
本期,我将给大家介绍14款实用的测试工具,希望能够帮到大家!(建议收藏) UI自动化测试工具 1. uiautomator2 Github地址:https://github.com/openatx/u ...
- Android APP压力测试(一)之Monkey工具介绍
Android APP压力测试(一) 之Monkey工具介绍 前言 本文主要介绍Monkey工具.Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动. ...
随机推荐
- Head First设计模式——装饰者模式
前言:对于设计模式我们有时候在想是否有必要,因为实际开发中我们没有那么多闲工夫去套用这么多设计模式,也没有必要为了模式而模式. 通常这些模式会引入新的抽象层,增加代码的复杂度,但是当我们掌握了这些设计 ...
- python-url中中文编码与解码
接口测试中遇到这种情况:get请求的传参有中文,以致url中有中文编码. 下面是常见的一种编码解码方式: from urllib.request import quote, unquote url = ...
- python编程系列---tcp服务端的简单实现
流程如下: """tcp服务端创建流程1. 创建服务端的tcp socket : server_socket 用于监听客户端的请求2. 绑定端口3. server_soc ...
- Spring Boot入门(二):获取配置文件值
本篇博客主要讲解下在Spring Boot中如何获取配置文件的值. 1. 使用yaml配置文件 Spring Boot默认生成的配置文件为application.properties,不过它也支持ya ...
- Kafka消费者 从Kafka中读取数据并写入文件
Kafka消费者 从Kafka中读取数据 最近有需求要从kafak上消费读取实时数据,并将数据中的key输出到文件中,用于发布端的原始点进行比对,以此来确定是否传输过程中有遗漏数据. 不废话,直接上代 ...
- call方法和apply方法
1.call 语法 call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 参数 thisObj 可选项.将被用作当前对象的对象. arg1,arg2, , argN ...
- SQL查询小案例
这是一篇自学MySQL的小案例,下面是部分数据信息:goods表 1.查询cate_name为‘超级本’的商品名称.价格 SELECT `name`, priceFROM goodsWHERE cat ...
- Token refresh的实现
实现原理: 在access_token里加入refresh_token标识,给access_token设置短时间的期限(例如一天),给refresh_token设置长时间的期限(例如七天).当活动用户 ...
- 如何用好redis pipeline
编者注:pipeline是Redis的一个提高吞吐量的机制,适用于多key读写场景,比如同时读取多个key的value,或者更新多个key的value.工作过程中发现挺多小伙伴都对pipeline多少 ...
- Unity2-投影方式