参考链接:https://www.cnblogs.com/yyh8/p/6707745.html

Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上。 Monkey会发送伪随机的用户事件流,适合对app做压力测试。

1为什么要开展压力测试?

提高产品的稳定性;

提高产品的留存率。

2什么时候开展压力测试?

首轮功能测试通过后和下班后的夜间进行。

3什么是Monkey,Monkey在哪里?

Monkey是发送伪随机用户事件的工具。在手机系统里。

顾名思义,Monkey就是猴子,  Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试。  猴子什么都不懂, 只知道乱敲,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常

Monkey 用来做什么

Monkey 主要用于Android 的压力测试  自动的一个压力测试小工具, 主要目的就是为了测试app 是否会Crash.

ADB 安卓调试桥(Android Debug Bridge)
adb的作用是什么

快速更新设备或手机模拟器中的代码,如应用或Android系统升级;
在设备上运行shell命令;
管理设备或手机模拟器上的预定端口;
在设备或手机模拟器上上传下载文件

4什么是MonkeyScript?

是一组可以被Monkey识别的命令集合。并且可以完成重复固定的操作。

5什么是MonkeyRunner?

提供了一系列API;可以完成模拟事件和截图操作。

6Monkey和MonkeyRunner的区别?

Monkey压力测试工具,MonkeyRunner自动化测试工具。

Monkey:在adb shell中,生成用户或系统的伪随机事件

MonkeyRunner:通过特定的API定义特定命令和事件控制设备。

7MonkeyRunner

MonkeyRunner APIs有:

MonkeyRunner:用来连接设备或模拟器

MonkeyDevice:提供安装、卸载应用、发送模拟事件

MonkeyImage:完成图像保存,及对比的操作

MonkeyRunner测试类型:可以帮助我们进行 多设备控制,功能测试,回归测试

8压力测试结果【重点关注以下几点内容】

1CEASH:即崩溃,应用程序在使用过程中非正常退出

2ANR:application not responding

9Monkey程序介绍

(1) Monkey程序由Android系统自带,使用Java诧言写成,在Android文件系统中的存放路径是: /system/framework/monkey.jar;

(2) Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey;  
(3)Monkey 命令启动方式:    
          a)可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试

b)在PC上adb shell 进入Android系统,通过执行 monkey {+命令参数} 来进行Monkey 测试

c )  在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器

10Monkey 架构

Monkey 运行在设备或模拟器上面,可以脱离PC运行(普遍做法是将monkey作为一个像待测应用发送 随机按键消息的测试工具。验证待测应用在这些随机性的输入面前是否会闪退或者崩溃)

11Monkey弱点

Monkey虽然可以根据一个指定的命令脚本发送按键消息,但其丌支持条件判断,也丌支持读取待测界 面的信息来执行验证操作。

12Monkey 高级参数大全

13Monkey 命令 基本参数介绍

-p <允许的包名列表>       【com.shjt.map是指定的包名】

用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果丌指定包, monkey将允许系统启动设备中的所有app。

指定一个包:adb shell monkey -p com.shjt.map 100

指定多个包:adb shell monkey -p fishjoy.control.menu  –p com.shjt.map  100

-v

用亍指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下 表所示:

Level 0  :  adb shell monkey -p com.shjt.map -v 100               // 缺省值,仅提供启动提示、测试完成和最终结果等少量信息

Level 1  :  adb shell monkey -p com.shjt.map -v  -v 100          // 提供较为详细的日志,包括每个发送到Activity的事件信息

Level 2  :  adb shell monkey -p com.shjt.map -v  -v  -v 100     // 最详细的日志,包括了测试中选中/未选中的Activity信息

-s(随机数种子) ——指定随机生成数的seed值    如:adb shell monkey -s <seed> <event-count>

用亍指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。  示例:

monkey测试1:adb shell monkey -p com.shjt.map –s 10 100

monkey测试2:adb shell monkey -p com.shjt.map –s 10 100

--throttle <毫秒>  指定事件之间的间隔  如:adb shell monkey --throttle <milliseconds>

用亍指定用户操作(即事件)间的时延,单位是毫秒;如果丌指定这个参数,monkey会尽可能快的 生成和发送消息。 示

例:adb shell monkey -p com.shjt.map --throttle 3000 100

--触摸事件  设定触摸事件百分比                   如:adb shell monkey --pct-touch <percent>

--动作事件 设定动作事件百分比                   如:adb shell monkey --pct-motion <percent>

--轨迹球事件 设定轨迹球事件百分比              如:adb shell monkey --pct-trackball <percent>

--基本导航事件 设定基本导航事件百分比        如:adb shell monkey --pct-nav <percent>

--主要导航事件 设定主要导航事件百分比        如:adb shell monkey --pct-majornav <percent>

--系统导航事件 设定系统导航事件百分比        如:adb shell monkey --pct-syskeys <percent>

--启动activity事件 设定启动activity事件百分比 如:adb shell monkey --pct-appswitch <percent>

--不常用事件 设定不常用事件百分比              如:adb shell monkey --pct-anyevent <percent>

--崩溃事件 忽略崩溃和异常                         如:adb shell monkey --ignore-crashes <even-count>

--超时事件 忽略超时事件                            如:adb shell monkey --ignore-timeouts <even-count>

Monkey 实例

用monkey 命令 对上海公交 app进行 性能测试
adb shell monkey –p com.shjt.map –-throttle 100 –-pct-touch 50 –-pct-motion 50 –v –v 1000 >c:\monkey.txt 

如:

adb shell monkey -p com.hd.smartVillage --throttle 600 -s 3005
--pct-touch 25 --pct-motion 25 --pct-trackball 10 --pct-nav 5
--pct-majornav 5 --pct-syskeys 10 --pct-appswitch 5 --pct-anyevent 5
--ignore-crashes --ignore-timeouts --ignore-security-exceptions
--kill-process-after-error --ignore-native-crashes -v -v -v 1000000 >D:\monkey-test.log

Monkey 查看包名

1、手机中安装APK包名查看器

2、源码下的AndroidManifest.xml文件查看  
3、aapt命令查看

4、查看手机中存在的apk包,进入adb shell 命令后---手机的cd data/data文件夹--ls查看所有包名 找到要测apk的包名

5、adb logcat命令查看日志如:adb shell logcat -h。

Monkey  日志分析

正常情况,  如果Monkey测试顺利执行完成, 在log的最后, 会打印出当前执行事件的次数和所花费的时间; // Monkey finished 代表执行完成\

异常情况

Monkey 测试出现错误后,一般的分析步骤
看Monkey的日志 (注意第一个switch以及异常信息等)
1. 程序无响应的问题: 在日志中搜索 “ANR”
2. 崩溃问题:在日志中搜索 “Exception”   (如果出现空指针, NullPointerException)  肯定是有bug

Monkey 执行中断, 在log最后也能看到当前执行次数

必须重视Crash

虽然Monkey测试有部分缺陷,我们无法准确地得知重现步骤, Monkey测试所出现的NullPointException,  都是可以在用户使用时出现的, 何时出现只是时间问题

理论上来说,  Monkey所有的Crash 都需要在发布前修复掉

crash异常测试结果析取

实践过程:

1安装可以引起crash的app 如:微浏览器

2执行app压力命令

3析取crash的exception信息

ANR异常测试结果析取

1安装可以引起ANR的app 如:微浏览器

2执行app压力命令

3析取anr的exception信息

结束Monkey进程

执行 Monkey 的过程中如果想中途停止 Monkey 程序的运行,需要将 Monkey 的进程杀掉。

  • windows 下使用findstr,linux/mac 下用grep
  • 执行adb shell ps | findstr monkey 或 adb shell ps | grep monkey
  • 获取到 monkey 进程的 pid 之后运行   adb shell kill 进程ID

Android app的压测实践【最基本】

step1准备测试环境

1、准备Android sdk环境,下载完毕进行:环境变量设置。(这一步可能是开发人员需要)

2、下载adb。

step2压测过程:

确认手机和电脑已经成功连接,通过adb device连接确认的

step3压测过程:

安装测试app 在cmd或者苹果终端命令行中输入命令即可安装adb install pachage.apk

step4压测过程:

获取包名

 step5压测过程

发送压力指令 如:adb shell monkey 1000

step6压测过程:

给指定包打压力 如:adb shell monkey -p package 1000  【注意package是包名,如package改为:

com.Android.calculator2】或 adb shell monkey -p 包名 -v 300 >e:\test.ext

 或adb shell monkey -p com.vito.check -s 23 --throttle 300 --ignore-crashs -v -v -v 1000 
 

Monkey Script

monkey很强大,只能执行随机的一些列操作;monkeyscript是为了满足执行一些可重复操作,固定的一系列操作的需求。

执行monkey脚本的命令:

adb shell monkey -f <scriptfile> <event-count>

1DispatchTrackball命令

轨迹球事件

DispatchTrackball(long downtime....)后面省略号跟着一系列参数

2DispatchPointer命令

点击事件

DispatchPointer(long downtime....)后面省略号跟着一系列参数

3DispatchString命令

输入字符串事件

DispatchString(String text)

4LaunchActivity命令

启动应用

DispatchString(package,Activity)

5UserWait命令

等待事件

UserWait(100)

6DispatchPress命令

按下键值

DispatchPress(int keycode)#keycode 66 回车键  如:DispatchPress(66)

monkeyscript的实践:

启动app

点击输入框

输入查询词

点击键盘上的回车键

点击搜索按钮

等待结果的输出

点击clear按钮

 MonkeyRunner

只有MonkeyRunner可以进行截图操作。

1MonkeyRunner API -alert

警告框

void alert(string message,string title,string okTitle)

2MonkeyRunner API -waitForConnection

等待设备连接,有多个device id,需要指明具体哪个设备

waitForConnection(float timeout,string deviceid)

3MonkeyRunner API -drag

拖动

drag(tuple start,tuple end,float duration,integer steps)

4MonkeyRunner API -press

按键

press(string keycode,dictionary type)

keycode名,Down、UP、DOWN_AND_UP

5 MonkeyRunner API - startActivity

启动应用

startActivity(package+'/'+activity)

6 MonkeyRunner API - touch

点击

touch(integer x,integer y,integer type)

x坐标,y坐标,type:Down、UP、DOWN_AND_UP

7MonkeyRunner API - takeSnapshot

截屏

MonkeyImage takeSnapshot ()

8MonkeyRunner API -sameAs

图像对比

Boolean sameAs (MonkeyImage other,float percent)

9MonkeyRunner API - writetoFile

保存图像文件

void writetoFile(string path,string format)

MonkeyRunner的补充说明:

还可以进行一系列多线程和线程操作等

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

  1. Android Monkey压力测试环境搭建及使用

    Android Monkey压力测试学习笔记 步骤:下载SDK -> 解压进入SDK Manager下载系统 -> 配置环境变量 -> 创建虚拟设备或连接真机 -> 进入命令模 ...

  2. Android Monkey 压力测试 介绍

    Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上. Monkey会发送伪随机的用户事件流,适合对app做压力测试 阅读目录 ...

  3. Android Monkey压力测试使用

    一.Monkey简介: Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送伪随机的用户事件流(点击.滑动.Application切换.横竖屏.应用关闭)实现对 ...

  4. Android Monkey压力测试(转)

    参考链接:https://www.cnblogs.com/yyh8/p/6707745.html Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Andr ...

  5. 转 Android Monkey压力测试使用

    转自:https://www.jianshu.com/p/c8844327f5e9 一.Monkey简介: Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送 ...

  6. Android Monkey压力测试介绍

    monkey:通过Monkey程序模拟用户触摸屏幕.滑动Trackball. 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常. Monkey的构架 Monkey的参数 Monke ...

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

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

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

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

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

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

随机推荐

  1. [deviceone开发]-日程日历示例

    一.简介 用户Wang利用Gridview和其它组件绘制的日历和任务,基本实现一个完整的在线日程管理功能.另外还封装了很多js对象,非常值得参考学习.二.效果图 三.相关下载 https://gith ...

  2. HTML5自定义属性之data-*

    HTML5 增加了一项新功能是 自定义数据属性 ,也就是  data-* 自定义属性.在HTML5中我们可以使用以 data- 为前缀来设置我们需要的自定义属性,来进行一些数据的存放.当然高级浏览器下 ...

  3. 更改pip源至国内镜像,显著提升下载速度(转载)

    经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样就能解决被墙导致的装不上库的 ...

  4. SharePoint 2013 图文开发系列之自定义字段

    SharePoint使用的优势,就在于开箱即用.快速搭建,SharePoint自身为我们提供了很多字段类型,已经很丰富了.但是,在实际应用中,我们还需要一些功能特殊的字段,下面,我们简单介绍下字段的开 ...

  5. iOS开发之功能模块--Apns推送中的的json格式介绍

    在开发向苹果Apns推送消息服务功能,我们需要根据Apns接受的数据格式进行推送.下面接受我在进行apns推送时候总结的一点apns服务接受的Json数据格式 示例 1: 以下负载包含哦一个简单的 a ...

  6. Android Studio连接真机没反应?

    刚好遇到这个问题,在网上百度了一下,看到有人分享了引起该问题的几个原因: 手机设置问题.开USB调试 方法: 手机设置 - 开发人员选项 - USB调试 - 勾选 数据线问题. 有的数据线只能用来充电 ...

  7. MySQL修改root账号密码

    MySQL数据库中如何修改root用户的密码呢?下面总结了修改root用户密码的一些方法   1: 使用set password语句修改 mysql> select user(); +----- ...

  8. MySQL查看数据库相关信息

    使用MySQL时,需要了解当前数据库的情况,例如当前的数据库大小.字符集.用户等等.下面总结了一些查看数据库相关信息的命令   1:查看显示所有数据库 mysql> show databases ...

  9. iOS 10 的坑:新机首次安装 app,请求网络权限“是否允许使用数据”(转)

    症状 iOS 10 之后,陆陆续续地有用户联系我们,说新机第一次安装.第一次启动的时候,app 首屏一片空白,完全没数据.kill 掉重新打开就好了. 一开始以为是用户网络情况不好,但随着越来越多的用 ...

  10. 每天一个linux命令目录

    出处:http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html 开始详细系统的学习linux常用命令,坚持每天一个命令,所以这个系列为每 ...