压力测试-Monkey学习

Monkey测试特点

  1. 什么是Monkey test? 如其名,像猴子一样,虽然什么都不懂,但是可以乱点一通,可以理解为压力测试。在规定的时间或次数范围内做任何随机的操作,随即操作包括点击、滑动......
  2. Monkey测试目标:通过模拟用户随机操作时间,暴露应用内Crash,降低Crash率
  3. Monkey Test范围预期:除了一些系统设置,我们希望范围维持在待测试应用内,另外可以补充一些中断测试
  4. 只能发现Crash,单复现和解决Crash还是需要靠开发人员
  5. 暴露所有的Crash不太现实,只能在一定程度上降低Crash

一、什么是Monkey

Monkey是Android SDK提供的一个命令行工具(Android平台下一个命令行自动化测试工具),可以运行在模拟器里或实际设备中。 它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey包括许多选项,它们大致分为四大类:

  • 基本配置选项,如设置尝试的事件数量
  • 运行约束选项,如设置只对单独的一个包进行测试
  • 事件类型和频率
  • 调试选项

在Monkey运行的时候,它生成事件,并把它们发给系统。同时,Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理(自动停止):

  • 如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。
  • 如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。
  • 如果应用程序产生了应用程序不响应(ANR:application not responding)的错误,Monkey将会停止并报错。

按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件

二、测试准备

  • Android官网下载android-sdk-windows包,解压至一个目录下,无需安装,如D:\android-sdk-windows;
  • 环境变量配置:Path目录下添加D:\android-sdk-windows\platform-tools;D:\android-sdk-windows\tools(分号隔开,确定platform-tools和tools文件已下载,确认路径正确)
  • Monkey test前必须先进入android设备的adb shell(Android SDK环境配置不在此描述,网上有很多)步骤如下:

1. 开始—>运行—>cmd

2. usb连接手机,输入 adb shell 命令

3. 进入手机后,输入相应的monkey命令即可测试

三、Monkey的基本命令格式   

基本语法如下:

1、$ adb shell monkey [options]

adb shell monkey –p 程序包 –v 测试次数

如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。

下面是一个更为典型的命令行示例,它启动com.dianping.XXX程序包,并向其发送500个伪随机事件:$ adb shell monkey -p com.dianping.XXX -v 500

2、执行单一apk:

monkey –p <options> -c <options> -s <seed> <限制语句> --throttle <milliseconds> -v 执行次数> C:\monkey_test.txt

3、执行apk集合:

monkey –pkg-blacklist-file /data/blacklist.txt -c <options> -s <seed> <限制语句> --throttle <milliseconds> -v 执行次数> C:\blacklist_test.txt //执行黑名单以外的应用

monkey –pkg-whitelist-file /data/whitelist.txt -c <options> -s <seed> <限制语句> --throttle <milliseconds> -v 执行次数 > C:\whitelist_test.txt //执行白名单的应用

四、测试Log获取

用Monkey test测试,为了方便分析问题,可以在命令monkey命令后面加上 “|logcat -v time”,这样就能边测试边打印Log(记得用终端保存Log文本)例如:

adb shell monkey –p com.dianping.XXX  –v 20000|logcat -v time

但是这个组合在monkey测试完成后,logcat仍然在执行,测试时需要注意

如果测试monkey碰到crash或者anr(程序强制性退出或不响应)现象时,在抓取log的同时需要提供traces.txt,

步骤如下:{ adb pull /data/anr/traces.txt .}

1. 测试版本需要具备root权限

2. 进入data/anr目录下面

3. 将traces.txt文件拷贝到TF卡中,然后拷贝出来发给软件分析即可  eg. trace view

五、保存monkey log以及手机log到sdcard

一、首先在cmd或终端中输入adb shell

二、再执行monkey,比如

monkey -p com.dianping.XXX --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 100 >/mnt/sdcard/monkey.txt & logcat -v time >/mnt/sdcard/logcat.txt

NOTE:如果不想生成logcat文件,删除红色标记(& logcat -v time >/mnt/sdcard/logcat.txt)中即可

三、终端内打开存放日志地址,比如

cd /Users/wengyb/Documents

四、拖日志到电脑上,比如

adb pull /mnt/sdcard/monkey.txt

六、手动停止Monkey

adb shell ps(查找进程PID)

adb shell kill pid (杀掉进程)

七、Monkey命令参数介绍

分类

参数

含义

备注

 

 

基本

--help

帮助信息

-v

命令行的每一个-v将增加反馈信息的级别

  • Level 0(缺省值)除启动提示、测试完成和最终结果之外,提供较少信息。eg: adb shell monkey -p com.dianping.XXX –v 100
  • Level 1提供较为详细的测试信息,如逐个发送到Activity的事件。eg: adb shell monkey -p com.dianping.XXX –v -v 100
  • Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。 eg: adb shell monkey -p com.dianping.XXX –v –v –v 100

 

 

 

事件 

-s

  • 伪随机数生成器的seed值
  • 如果用相同的seed值再次运行Monkey,它将生成相同的事件序列
  • Monkey测试1:adb shell monkey -p com.dianping.XXX –s 10 100
  • Monkey测试2:adb shell monkey -p com.dianping.XXX –s 10 100

两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。

操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的

--throttle

  • 在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度。
  • 如果不指定该选项Monkey将不会被延迟,事件将尽可能快地被产成
  • 用于指定用户操作(即事件)间的时延,单位是毫秒

adb shell monkey -p com.dianping.XXX –throttle 3000 100

调整百分比 

—pct+{-事件名}

--pct-touch

调整触摸事件的百分比

触摸事件是一个down-up事件,它发生在屏幕上的某单一位置

--pct-motion

调整动作事件的百分比

动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成

--pct-trackball

调整轨迹事件的百分比

轨迹事件由一个或几个随机的移动组成,有时还伴随有点击

--pct-nav

调整“基本”导航事件的百分比

导航事件由来自方向输入设备的up/down/left/right组成

--pct-majornav

调整“主要”导航事件的百分比

这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键

--pct-syskeys

调整“系统”按键事件的百分比

这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键

--pct-appswitch

调整启动Activity的百分比

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

--pct-anyevent

调整其它类型事件的百分比

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

约束限制

-p

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

-c

  • 如果用此参数指定了一个或几个类别,Monkey将只允许系统启动被这些类别中的某个类别列出的Activity
  • 如果不指定任何类别,Monkey将选择下列类别中列出的Activity: Intent.CATEGORY_LAUNCHER或Intent.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 Not Responding”对话框)时,Monkey将停止运行
  • 如果设置此选项,Monkey将继续向系统发送事件,直到计数完成

--ignore-security-exceptions

  • 通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将停止运行
  • 如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成

--kill-process-after-error

  • 通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态
  • 当设置了此选项时,将会通知系统停止发生错误的进程。

正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态

--monitor-native-crashes

  • 监视并报告Android系统中本地代码的崩溃事件
  • 如果设置了--kill-process-after-error,系统将停止运行

--wait-dbg

停止执行中的Monkey,直到有调试器和它相连接

八、Monkey实例测试

Mac下:

1、 通过eclipse启动一个Android的emulator或者连接真机

2、 在命令行中输入:adb devices查看设备连接情况

3、 在有设备连接的前提下,在命令行中输入:adb shell 进入shell界面。如果有多个device的时候,加-s参数指定:adb -s devicename shell

4、在其中找到我们需要测试的包名com.dianping.XXX

5、 查看data/data文件夹下的应用程序包(可测试的应用程序包都在这个目录下面)

ls data/data

如果出现opendir failed,Permission denied 则可用root解决

键入 su root

然后键入 ls data/data 查看包

6、 以com.dianping.XXX 作为对象进行MonkeyTest  命令行》》monkey -p com.dianping.XXX -v 500  其中-p表示对象包 –v 表示事件数量

运行过程中,Emulator/真机中的应用程序在不断地切换画面。

按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。

九、测试用例

monkey -p com.dianping.XXX --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 100 >/mnt/sdcard/monkey.txt

cd /Users/wengyb/Documents

adb pull /mnt/sdcard/monkey.txt

Android APP压力测试-Monkey的更多相关文章

  1. Android APP压力测试(三)之Monkey日志自动分析脚本

    Android APP压力测试(三) 之Monkey日志自动分析脚本 前言 上次说要分享Monkey日志的分析脚本,这次贴出来分享一下,废话不多说,请看正文. [目录] 1.Monkey日志分析脚本 ...

  2. Android APP压力测试(二)之Monkey信息自动收集脚本

      Android APP压力测试(二) 之Monkey信息自动收集脚本 前言: 上一篇Monkey介绍基本搬抄官方介绍,主要是为了自己查阅方便.本文重点介绍我在进行Monkey时如何自动收集相关信息 ...

  3. Android APP压力测试(一)之Monkey工具介绍

    Android APP压力测试(一) 之Monkey工具介绍 前言 本文主要介绍Monkey工具.Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动. ...

  4. Android App 压力测试 monkeyrunner

    Android App 压力测试 第一部分 背景 1. 为什么要开展压力测试? 2. 什么时候开展压力测试?第二部分 理论 1. 手工测试场景 2. 自动测试创建 3. Monkey工具 4. ADB ...

  5. android 自动化压力测试-monkey 1 实践

    Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试.Monkey ...

  6. android app 压力测试工具-monkey tool

    一.什么是Monkey? Monkey测试是Android自动化测试的一种手段,Monkey测试本身非常简单,就是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常. Monkey是A ...

  7. APP压力测试 monkey(新猿旺学习总结)

    安卓APP做压力测试 需要配置JDK(Java)和 配置SDK 遮掩才能使用adb命令连接手机进行模拟动作事件进行压力测试 配置 K JDK 与 K SDK 环境 a java 与 与 sdk 用于 ...

  8. Android APP压力测试实战

    环境准备: Android SDK Python   压测实战步骤 1.在手机开发者工具中,将USB调试选上 2.确认手机,电脑成功连接(通过adb devices) 3.安装测试app(adb in ...

  9. android 自动化压力测试-monkey 3 命令参数

    使用monkey help 命令查看命令参数,如下: C:\Users\chenfenping>adb shell monkey -help usage: monkey [-p ALLOWED_ ...

随机推荐

  1. 浅析session&cookie

    session&cookie没有出现的黑暗时代 大家都知道,HTTP协议是一种无状态的协议,本次请求下一次请求没有任何的关联,所有没有办法直接用http协议来记住用户的信息,试想一向,每一次点 ...

  2. Delphi:与VCL同步(Synchronize()、用消息来同步)

    看本文时,可以同时参考:Delphi中线程类 TThread实现多线程编程(事件.临界区.Synchronize.WaitFor……) 先说一下RTL和VCL RTL(Run-Time library ...

  3. 8.Java格式化输出

    JAVA中字符串输出格式 1.使用format函数 System.out.format("%d  %f",10,10.5); 2.使用Formatter类 构造函数Formatte ...

  4. C++ 定义全局数组

    数组怎么用,全局数组就怎么用,只是他的作用域不一样才叫全局数组... 在A.h 或 A.cpp中定义char buf[10]; 如果在B.cpp要用,就在其开头中写成 extern char buf[ ...

  5. windows下安装python科学计算环境,numpy scipy scikit ,matplotlib等

    安装matplotlib: pip install matplotlib 背景: 目的:要用Python下的DBSCAN聚类算法. scikit-learn 是一个基于SciPy和Numpy的开源机器 ...

  6. Leetcode Edit Distance

    Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...

  7. 单元测试地二蛋 先弄个两个原生模块1个原始的一个jq插件

    放羊测试测完了再测这两个瞎搞的下拉列表组建 看看从单元测试模块化的角度组建会写成啥样 1:ajax请求 简单文本     2:1个页面多个实例     3:复杂展示+自定义点击+自定义处理函数     ...

  8. PHP+MySQL+Easyui tree菜单从后台加载json数据(一)

    实现功能:从数据库加载出所有的数据库名,相应的数据库加载对应的数据库表名 原理:(首先看一下参考手册的内容) 异步加载Tree tree 支持内置的异步加载模式,用户创建一个空的tree,然后定义一个 ...

  9. 如何解决Linux下通过root无法远程登录

    解决问题 1.确认ssh服务已安装,通过普通用户连接成功: 2.确认ssh配置是否对root进行特殊设置,修改/etc/ssh/sshd_config文件中 PermitRootLogin witho ...

  10. HDU 3743 Frosh Week (线段树+离散化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3743 Frosh Week Time Limit : 2000/1000ms (Java/Other) ...