Monkey 是Android SDK提供的一个命令行工具,是一个黑盒压力测试工具,采用随机算法,对被测应用随机发送伪随机的用户事件流,如点击,拖拽,滑动,输入等,来确定应用是否会发生异常,并且会产生日志来进行分析,但是测试数据测试事件都是随机的,有一定局限性。

Monkey 适合作为压力或者稳定性测试工具来测试应用的崩溃率、稳定性。但是可以通过二次开发来进行业务流程控制或一定程度上控制测试覆盖。通过多次并且不同设定下的Monkey测试才算是一个稳定性足够的程序。

monkey 命令介绍

adb shell monkey -help

1、基础参数解析

-p   指定要进行monkey测试的包,如果不使用参数,则会随机选择应用进行测试。

指定一个包:adb shell monkey -p com.fenbi.android.solar 1000

指定多个包:adb shell monkey -p com.fenbi.android.solar -p com.tao.bao 1000

-c   指定activity的category类别

如果用此参数指定了一个或多个类别,则Monkey将只允许系统启动被这些类别中的某个类别列出的Activity。

如果不指定任何类别,则Monkey将选择下列类别中列出的Activity:Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKRY。

如果要指定多个类别,则需要使用多个 -c选项,每个 -c选项只能用于一个类别。

-v   指定日志级别

level1(-v):缺省值,仅提供启动提示、测试完成和最终结果等少量信息

level2(-v -v):提供较为详细的日志,包括每个发送到Activity的事件信息

level3( -v -v -v):最详细的日志,包括了测试中选中/未选中的Activity信息

adb shell monkey -p com.shjt.map -v 100adb shell monkey-p com.shjt.map -v -v 100adb shell monkey-p com.shjt.map -v -v -v 100

-s   用于指定伪随机数生成器的seed值。如果seed相同,则两次Monkey测试所产生的事件序列也相同的(不指定就会随机生成)。

(所以一般在测试时要记录seed值,以防出现无响应和crash,不容易验证。)

可以通过-s参数复现问题,如:

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

--throttle:用于设置每个事件结束后延迟多少时间再继续下一个事件,降低cpu压力;如果不设置,事件与事件之间将不会延迟,事件将会尽快生成;一般设置300ms。

adb shell monkey -p com.shjt.map --throttle 300 100

2、调试参数解析

--ignore-crashes:用于指定当应用程序崩溃(Crash)时,Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,monkey依然会发送事件,直到事件计数完成。

--ignore-timeouts :用于指定当应用程序发生无响应(ANR)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。

--ignore-native-crashes:如果使用此参数,则忽略native层代码的崩溃。

--ignore-security-exceptions :用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。

--monitor-native-crashes:用于指定是否监视并报告native层发送的崩溃代码。

--kill-procress-after-error:用于指定当应用程序发生错误时,是否停止其运行。如果指定此参数,当应用程序发生错误时,应用程序停止运行并保持在当前状态(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)。

--hprof:该选项设置后,将会在monkey事件序列前后立刻生成report,大小为大于5MB,存储在/data/misc。

3、事件类型

monkey在发送伪随机事件时,是有不同的类型的。默认随机分配比例,也可以指定其百分比。如果不设置,则--pct-anyevent总量为100%,也就是纯随机事件;可以单参数设置百分比,也可以多参数设置百分比,但百分比的总量不能大于100%。

#单个参数设置百分比

adb shell monkey -p com.huomaotv.com --pct-appswitch 20 1000

#多个参数设置百分比

adb shell monkey -p com.huomaotv.mobile --pct-appswitch 20 --pct-rotation 20 --pct-touch 30 --pct-motion 20 1000

在实际工作中,如果简单跑一下稳定性没有必要修改这些参数。如果想测试更精确一些,让 monkey 测试过程中减少一些无效的事件,可以根据项目 App 的特性调整事件的比例。

比如常见的应用中触摸和滑动的操作肯定是最频繁的,那么相对可以提高这两种事件的比例;或者如游戏和视频类的 App,会存在横竖屏切换的操作,就适当增加屏幕旋转事件的比例。

0:--pct-touch :设置触摸事件的百分比。触摸事件(down-up)是指在屏幕上的一个单独位置的一次点击/抬起的事件。

1:--pct-motion :设置滑屏的百分比设置。手势事件是由一个在屏幕某处的按下事件(down)、一系列的伪随机移动、一个抬起事件(up)组成)即一个滑动操作,但是是直线的,不能拐弯。

3:--pct-trackball :设置轨迹球事件百分比。轨迹球事件包括一个或多个随机移动,有时还伴有点击。(不常使用参数,但滚动球事件中包含曲线滑动事件,在被测程序需要曲线滑动时可以选用此参数。)

4:--pct-rotation:旋转屏幕。

6:--pct-nav:设置导航按键事件的百分比。导航事件由方向输入设备的上下左右按键所触发的事件组成(不常用参数)。

7:--ptc-majornav:设置主导航事件的百分比。((如中间键、取消、确定或菜单引发的图形接口的动作))。

8:--pct-syskeys:设置系统物理按键事件百分比,比如home键,音量键,返回键,拨打电话键,挂电话键等。

9:--pct-appswitch:调整启动activity的百分比。在随机间隔中,执行一个startActivity()方法调用,作为一种最大化的覆盖安装包的所有的activity的方法,保证界面的覆盖情况。

10:--pct-flip:键盘翻转。

11:--ptc-anyevent:设置其它事件百分比,比如按键或其他不太常用到的一些事件的百分比(不常用参数)。

将monkey日志输出到文件:

adb shell monkey -p xxx.xxxx.xxx -v -v 100 > E:\monkeyLog.txt

日志报告分析

可参考:https://www.cnblogs.com/kekouwen/archive/2018/11/21/9995635.html

该博文分别讲述了如何初步、详细分析日志、内存泄漏等问题。

参考:https://www.cnblogs.com/dreamyu/p/11716925.html

参考:https://www.cnblogs.com/smallstone2018/p/10024500.html

参考:https://www.cnblogs.com/yuntimer/p/10779617.html

monkey android 教程,Android Monkey使用详解相关推荐

  1. 基于百度地图实现Android定位功能实现(详解+教程)

    基于百度地图实现Android定位功能实现(详解+教程) 1.初始化 (一)获取到SHA1 (1)找到View中的Tool Windows并打开Terminal (2)找到你的jdk的bin目录,小编 ...

  2. android+发邮件,Android发送邮件的方法实例详解

    Android发送邮件的方法实例详解 时间:2021-05-20 本文实例讲述了Android发送邮件的方法.分享给大家供大家参考,具体如下: 在android手机中实现发送邮件的功能也是不可缺少的. ...

  3. android demo示例代码,Android Service demo例子使用详解(示例代码)

    Android Service demo例子使用详解\ 概述 Service 是 Android 的四大组件之一,它主要的作用是后台执行操作,Activity 属于带有 UI 界面跟用户进行交互,而 ...

  4. Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!...

    Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...

  5. iPhone和Android的WEB应用开发详解

    iPhone和Android的WEB应用开发详解 在我们现在的生活中,移动设备的作用日益重要.我们使用它们进行交流.我们使用它们进行导航.我们甚至可以将它们用作方便的手电筒.面向 iPhone 和 A ...

  6. Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

    Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...

  7. Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!

    Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...

  8. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

  9. Android Telephony分析(五) ---- TelephonyRegistry详解

    本文紧接着上一篇文章<Android Telephony分析(四) -- TelephonyManager详解 >的1.4小节.  从TelephonyRegistry的大部分方法中:  ...

  10. Android Telephony分析(三) ---- RILJ详解

    前言 本文主要讲解RILJ工作原理,以便更好地分析代码,分析业务的流程.  这里说的RILJ指的是RIL.java (frameworks\opt\telephony\src\java\com\And ...

最新文章

  1. 如何学习数据挖掘和数据科学的7个步骤
  2. 【ACM】DFS 全排列 回溯
  3. 【USACO training】Chapter 1 入门
  4. About Javascript MVC
  5. eclipse恢复默认布局
  6. [译] 新手和老手都将受益的JavaScript小技巧
  7. 【PC工具】常用USB转串口芯片CP210x驱动,CH340G驱动安装有可能遇到的问题及解决办法...
  8. Docker入门 三 用服务来扩展和负载均衡你的应用
  9. IOS关于UIViewController之间的切换
  10. 安卓5.1自带浏览器主页设置–转载
  11. 大学计算机专业找对象,单身率最高的大学专业是什么?这5个专业为什么成脱单最难专业...
  12. 哔哩哔哩前端笔试(卷1)
  13. 大二综合项目:数据库Mysql,Navicat
  14. 液晶弹性自由能计算_液晶材料预倾角与弹性常量的关系
  15. 广州电信宽带的四大优势
  16. web前端基础-HTML篇
  17. 行泊一体方案「换道超车」,TOP10本土供应商领跑新赛道
  18. 关于PWA的各种问题
  19. DMA基本概念与常见寄存器设置
  20. [分析]欢乐时光源码

热门文章

  1. JavaWeb项目之租车系统管理系统
  2. Android FCM:测试工具(PostMan)
  3. unity设置分辨率
  4. thinkphp5 mongodb Authentication failed
  5. easy-x常用函数
  6. Python中if判断语句
  7. Python 爬虫使用代理 IP 的正确方法
  8. 指数定投(行不行学习)
  9. RuneWords(神符之语)
  10. PullScrollView详解(五)——完全使用listview实现下拉回弹(方法二)