当前位置: 首页 > news >正文

Android稳定性测试工具Monkey的使用

综述

   Monkey是一个命令行工具,它可以运行在我们的模拟器或者设备当中。它可以发送一些伪随机的用户事件流,例如点击、触摸、手势等。我们能够使用Monkey工具来对我们所开发的应用进行压力测试。Monkey测试是一种为了测试软件的稳定性,健壮性的快速有效的方法。

Monkey程序介绍

          MonkeyAndroid自带的系统工具,是由java语言编写。它在Android文件系统存放的路径是:/system/framework/monkey.jar,启动monkey.jarshell脚本文件在Android文件系统存放的路径为:/system/bin/monkey。打开这个monkey文件我们可以看一下这个脚本文件很简单。

 

 

我们可以看到它调用的是com.android.commands.monkey.Monkey包。

Monkey常用命令

       下面我们就来执行这个monkey脚本。

我们执行如下命令:

 

这时候,monkey将义无反顾的模式进行启动,并把事件任意发送到安装在目标环境下的全部包。运行结果如下所示:

这时候可以看到monkey并没有运行起来,只是显示了usage,这是因为少了一个重要的参数,这是指发送的事件数。如果我们需要发送50个随机事件,执行如下命令:

 

这时候我们可以看到手机已经疯狂的运行起来了。monkey的基本语法为:

 

 

Monkeyoption操作都是根据具体需求设定的,主要分为常规类,事件类,约束类和调试类。下面就对这些命令进行说明:

常规类:

--help

显示monkey参数帮助信息usage

-v

打印日志信息,每个-v将增加反馈信息的级别。-v越多日志信息将会越详细,不过目前最多支持三个-v

Level0:一个-v,除启动提示、测试完成和最终结果之外,提供较少信息。

Level1:两个人-v,提供较为详细的测试信息,如逐个发送到Activity的时间。

Level2:三个-v,提供更加详细的设置信息,如测试中被选中的或未被选中的Activity

事件类:

-s <seed>

伪随机数生成器的seed值。如果用相同的seed值再次运行monkey,它将生成相同的时间序列。

--throttle <milliseconds>

后面接时间,单位为毫秒,表示时间之间的固定延时(即执行每一个指令的间隔时间),若不接这个选项,monkey则不会延时。

--pcttouch<percent>

后面接触摸事件的百分比。(触摸时间是一个down-up事件,它发生在屏幕上的某单一位置)

--pctmotion<percent>

后面接动作事件的百分比。(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件的组成)。

--pcttracball<percent>

后面接轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。

--pctnav<percent>

后面接“基本”导航事件百分比(导航事件主要来自方向输入设备的上、下、左、右事件)。

--pctmajornav<percent>

后面接“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5way键盘中的中间按键、回退按键、菜单按键)。

--pctsyskeys<percent>

后面接“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如HomeBackStarCallEndCall及音量控制键)。

--pctappswitch<percent>

后面接启动Activity的百分比。在随机间隔里,Monkey将执行一个starActivity()调用,作为最大程度覆盖中全部Activity的一种方法。

--pctanyevent<percent>

调整其他类型事件的百分比。它包含了所有其他类型的事件,如:按键、其他不常用的设备按钮等等。

p<allowedpackagename>

如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。如果你的应用程序还需要访问其他包里的Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个—p选项,每个—p选项只能用于一个包。

-c<maincategory>

如果用此参数指定了一个或几个类别,Monkey将只允许系统启动被这些类别中的某个类别列出的Activity。如果不指定任何类别,Monkey将选择下列类别中列出的Activitylntent.CATEGORY_LAUNCHERlntent.CATEGORY_MONKEY。要指定多个类别,需要使用多个-c选项,每个-c选项只能用于一个类别。

 

调试类

--dbg-no-events

设置此选项,Monkey将执行初始启动,进入到一个测试Activity,然后不会再进一步生成事件。为了得到最佳结果,把它与-v、一个或几个包约束、以及一个保持Monkey运行30秒或更长时间的非零值联合起来,从而提供一个环境,可以监视应用程序所调用的包之间的转换。

--hprof

设置此选项,将在Monkey事件序列之前和之后立即生成profiling报告。这将会在data/misc中生成大文件(~5Mb,所以要小心使用它。

--ignore-crashes

通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。

--ignore-timeouts

通常,当应用程序发生任何超时错误

(如Application Responding”对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成)

--ignore-security-exceptions

一条常用的Monkey命令

adb shell monkey -v -v -v -p [PackageName] --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes --ignore-native-crashes --throttle 1000 100000 > monkey.txt

执行这条命令后会在当前文件下面生成一个名为monkey.txt的日志文件,我们可以通过搜索exceptionANR来找到monkey测试中所出现的CrashANR。

 

总结

在这里介绍了Monkey的使用,对于我们的应用通过monkey进行压力测试,也能够发现众多的ANR以及Crash。对于Monkey也有一定缺点的,它是不支持截屏、录制、回放等操作的。

 

转载于:https://www.cnblogs.com/zqq521/p/6383373.html

相关文章:

  • 基于C#的MongoDB数据库开发应用(4)--Redis的安装及使用
  • jz2440上内核和文件系统移植
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 事务隔离(二):基于加锁方式的事务隔离原理
  • mybatis随笔一之SqlSessionFactoryBuilder
  • 公司招聘
  • 在linux服务器上装svn版本管理,自动同步代码到项目根目录
  • web服务器配置及nginx和mysql部署
  • 2017.02.15
  • linux中的awk用法入门详解(二)
  • javascript事件失效l
  • 【Spark Summit East 2017】Spark,类型函数式编程的引诱者
  • linux命令大全之watch命令详解(监测命令运行结果)
  • Elasticsearch之更新(全部更新和局部更新)
  • mysql查看表结构
  • 【译】JS基础算法脚本:字符串结尾
  • es的写入过程
  • HashMap剖析之内部结构
  • interface和setter,getter
  • java2019面试题北京
  • JWT究竟是什么呢?
  • Mac转Windows的拯救指南
  • vue:响应原理
  • 从tcpdump抓包看TCP/IP协议
  • 工作中总结前端开发流程--vue项目
  • 力扣(LeetCode)56
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 区块链分支循环
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 微信小程序设置上一页数据
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​2021半年盘点,不想你错过的重磅新书
  • ​queue --- 一个同步的队列类​
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #控制台大学课堂点名问题_课堂随机点名
  • $.each()与$(selector).each()
  • (笔试题)分解质因式
  • (二)PySpark3:SparkSQL编程
  • (二十四)Flask之flask-session组件
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (三)elasticsearch 源码之启动流程分析
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)德国人的记事本
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET CLR基本术语
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET命令行(CLI)常用命令
  • .net下简单快捷的数值高低位切换
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @RunWith注解作用
  • [<死锁专题>]