一、 什么是Monkey

monkey是google提供的一个用于稳定性与压力测试的命令行工具。monkey程序由android系统自带,位于/sdcard/system/framework/monkey.jar中。 Monkey tools在Android内只能针对Activity做测试,不能对service做测试。可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。

二、 Monkey的特征

1、 测试的对象仅为应用程序包,有一定的局限性。
2、 Monky测试使用的事件流数据流是随机的,不能进行自定义。
3、 可对MonkeyTest的对象,事件数量,类型,频率等进行设置。

三、Monkey的基本用法

基本语法如下:

$ adb shell monkey [options]

如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:

1.monkey在pc端测试的方法:

>adb shell monkey [option] <count>

/* [option] 测试条件(下面会做详细说明)
* <count> 测试次数
*/

eg:adb shell monkey  -v -v -v 500

-v 指定Log的详细程度,共有三个级别:
 -v 日志级别为level 0
 -v -v 日志级别为level 1

-v -v -v 日志级别为level 2     日志的详细程度越来越详细

最高可添加3个 -v,500为测试的次数

2.保存monkey运行的日志

adb shell monkey 后边不带测试条件时默认指定所有包即所有应用程序。

2.1 保存在手机上
eg:adb shell monkey   > /sdcard/monkey.txt

这里的sdcard指的是存储路径即手机内部存储。> 是追加符,即将打印的log追加到monkey.txt文本中

2.2 保存在电脑上
adb shell monkey  > monkey.txt

monkey.txt保存在PC的当前目录下。

3.monkey查看包名

方法1: adb shell pm list package

方法1:adb shell ls /data/data/

两者区别在于前者不需要root,后者需要root.

4.monkey可指定应用包进行测试。

eg:adb shell monkey -p com.android.camera  500

-p 后边跟包名,这里可指定一个包或多个包,要指定多个包需要使用多个-p选项,每个-p选项只能用于一个包。

eg:adb shell monkey -p com.android.camera   -p com.android.mms  500

Monkey test中只能指定activity属性的应用包进行测试,当出现指定的应用程序不是activity的时候,monkey会出现log提示如下并终止运行:

这里只显示最后一行

log:

**No activities found to run,monkey abortd.

备注:activity和service的区别,activity是android应用的核心概念,简而言之activity为用户交互管理者,有一个可视界面呈现,而service是在后台运行,没有界面呈现。

5.monkey的log分析 (android中常见的错误)

查找关键字crash,anr。

anr:

>在5秒内没有相应的事件(例如,按键按下,屏幕触摸);

>BroadcastReciever在10秒内没有执行完毕。

crash:

>异常停止

>异常退出

6.查看monkey进程

monkey 进程:adb shell ps | grep monkey

杀死monkey进程:adb shell  kill monkey

eg:

sue@suepc:~$ adb shell ps  | grep monkey

shell     23444 537   2029252 49604 futex_wait 7fb2834170 S com.android.commands.monkey

sue@suepc:~$ adb shell kill 23444

sue@suepc:~$

7、Monkey发送的事件类型和频率

--pct-appswitch <percent>

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

--pct-anyevent <percent>

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

--pct-touch <percent>

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

--pct-motion <percent>

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

--pct-trackball <percent>

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

--pct-nav <percent>

调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)

--pct-syskeys <percent>

调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)

-p <允许执行的包名列表>

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

-c <意图的种类>

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

8.monkey常见的测试策略

8.1.对设置进行旋转压力测试

adb shell monkey -p com.android.settings  --pct-rotation  50  --ignore-crashes --ignore-timeouts --ignore-native-crashes --ignore-security-exceptions -v -v -v  20000

8.2.对整机的应用开启测试

adb shell monkey --pct-appswitch 100 --throttle 5000  -v -v -v 100000

8.3.测试设置,触摸事件30%,其他按键50%,错误停止20%,延时200

adb shell  monkey   -p com.android.settings   --pct-touch  30  --throttle 200 --pct-anyevent 50  -v -v 10000

8.4..测试设置,随机种子数为100,延时10 秒 ,忽略所有错误

adb shell monkey   -p com.android.settings  -s 100  --throttle 10 --randomize-throttle   -ignore-crashes --ignore-timeouts --ignore-native-crashes --ignore-security-exceptions -v -v -v  20000

9.monkey 无activity启动

-p com.android.phone   -c android.intent.category.DEFAULT

monkey命令行测试的更多相关文章

  1. Linux命令行测试网速speedtest.net

    Linux命令行测试网速speedtest.net 当发现上网速度变慢时,人们通常会先首先测试自己的电脑到网络服务提供商(通常被称为"最后一公里")的网络连接速度.在可用于测试宽带 ...

  2. I.MX6 Android CAN 命令行测试

    /********************************************************************* * I.MX6 Android CAN 命令行测试 * 说 ...

  3. [转]使用Linux命令行测试网速

    装speedtest-cli speedtest-cli是一个用Python编写的轻量级Linux命令行工具,在Python2.4至3.4版本下均可运行.它基于Speedtest.net的基础架构来测 ...

  4. 使用Linux命令行测试网速

    安装speedtest speedtest是一个用Python编写的轻量级Linux命令行工具,在Python2.4至3.4版本下均可运行.它基于Speedtest.net的基础架构来测量网络的上/下 ...

  5. 使用Linux命令行测试网速-----speedtest-cli

    https://github.com/sivel/speedtest-cli 当发现上网速度变慢时,人们通常会先首先测试自己的电脑到网络服务提供商(通常被称为“最后一公里”)的网络连接速度.在可用于测 ...

  6. gtest命令行测试案例

    使用gtest编写的测试案例通常本身就是一个可执行文件,因此运行起来非常方便.同时,gtest也为我们提供了一系列的运行参数(环境变量.命令行参数或代码里指定),使得我们可以对案例的执行进行一些有效的 ...

  7. CDH spark 命令行测试

    一. 参考 https://www.cnblogs.com/bovenson/p/5801536.html [root@node- test]# chown hdfs:hdfs /root/test/ ...

  8. Junit 命令行测试 报错:Could not find class 理解及解决方法

    一.报错 : 『Could not find class』 下面给出三个示例比较,其中只有第一个是正确的. 1. MyComputer:bin marikobayashi$ java -cp .:./ ...

  9. laravel 命令行测试 Uncaught ReflectionException: Class config does not exist

    require __DIR__ . '/vendor/autoload.php'; $app = require_once __DIR__ . '/bootstrap/app.php'; config ...

随机推荐

  1. 3次方的期望dp

    osu 是一款群众喜闻乐见的休闲软件.     我们可以把osu的规则简化与改编成以下的样子:     一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的 ...

  2. flink编译支持CDH6.2.0(hadoop3.0.0)

    准备工作 因为在编译时需要下载许多依赖包,在执行编译前最好先配置下代理仓库 <mirrors> <mirror> <id>nexus-aliyun</id&g ...

  3. CAS是什么

    CAS是什么? 比较并交换 例子1: public class ABADemo1 { public static void main(String[] args) { AtomicInteger at ...

  4. RabbitMQ入门(二)工作队列

      在文章RabbitMQ入门(一)之Hello World,我们编写程序通过指定的队列来发送和接受消息.在本文中,我们将会创建工作队列(Work Queue),通过多个workers来分配耗时任务. ...

  5. Elasticsearch 开箱指南

    内容概要 ES 基础介绍,重点是其中的核心概念. 基础 API 实践操作. 1. 基础介绍 Elasticsearch (ES) 是一个数据库,提供了分布式的.准实时搜索和分析. 基于 Apache ...

  6. 将jar包安装到本地仓库

    通过cmd切换到apache maven 的bin目录 mvn install:install-file -DgroupId=com.antgroup.zmxy -DartifactId=zmxy-s ...

  7. Oracle GoldenGate 19.1新特性

    1.GoldenGate 19.1 新特性概览a.支持Oracle数据库19.1 长期支持发布版本.集成Oracle GoldenGate 12.3版的最终补丁集更新.b.微服务的安全性和可管理性增强 ...

  8. Dart语言学习( 一) 为什么学习Dart?

    为什么学习Dart? Google及全球的其他开发者,使用 Dart 开发了一系列高质量. 关键的 iOS.Android 和 web 应用. Dart 非常适合移动和 web 应用的开发. 高效 D ...

  9. [bzoj4823][洛谷P3756][Cqoi2017]老C的方块

    Description 老 C 是个程序员. 作为一个懒惰的程序员,老 C 经常在电脑上玩方块游戏消磨时间.游戏被限定在一个由小方格排成的R行C列网格上 ,如果两个小方格有公共的边,就称它们是相邻的, ...

  10. robotframework,移动端(小程序)自动化,通过屏幕坐标点击对应按钮的方法

    使用场景: 下图通过常规方法是定位不到“红色”这个按钮的 我们把鼠标放置上去,下图右侧会显示该点的坐标地址 然后使用click a point指令定位 click a point 64 743 dur ...