Android自动测试之Monkey工具

APP测试工作中经常会听到领导说,APP压力测试做了吗?刚入行时,不知道什么是 APP压力测试,找了半天没找到自己想要的。过了几年,回头想这个问题,发现牵扯了很多地方。下面我根据自己的理解说以下两点:

  • APP运行稳定性
  • 服务器高压情况下APP运行稳定性

APP运行稳定性

举个例子,我们打开APP,随便点两下,APP就停止运行,那么能说这个APP稳定吗?当然实际情况下,不会点两下就奔溃的。既然点两下不会奔溃,那么我点1万次,或者10万次呢?这个就不好做保证。当然我们既然提出这个需求,那么我们肯定

不会傻傻的用手去一次一次点击 APP。不用手有什么 好的办法呢?monkey是不错的选择!

服务器高压情况下APP运行稳定性

服务器高压这是前提条件。我们已经知道服务器是高压,那么客户端发送请求时,界面或者数据是否会出现错乱等情况?甚至是奔溃~当然今天我们讲的是monkey,所以这里不再多谈。

Monkey工具概述

Monkey是一个命令行工具,可以在任何仿真器实例或设备上运行。它将伪随机的用户事件流发送到系统中,作为您正在开发的应用程序软件的压力测试。

Monkey包含许多选项,但它们分为四个主要类别:

  • 基本配置选项,例如设置要尝试的事件数。
  • 操作约束,例如将测试限制为单个包。
  • 事件类型和频率。
  • 调试选项。

当Monkey运行时,它会生成事件并将它们发送到系统。它还可以监视 被测系统,并查找三种特殊情况:

  • 如果您已将Monkey限制为在一个或多个特定包中运行,则会监视尝试导航到任何其他包并阻止它们。
  • 如果您的应用程序崩溃或收到任何类型的未处理异常,Monkey将停止并报告错误。
  • 如果您的应用程序生成一个没有响应错误的应用程序,Monkey将停止并报告错误。

个人理解:monkey当然是猴子啦。我们上面提过一个需求,就是我想验证我点1万次或者10万次APP时,APP是否会出现运行异常。当然这1万次或者10万次是随机点击的。想象这样一个场景,把一个键盘放猴子面前,猴子是不是会乱敲键盘?所以我们把随机执行系统上的任何任务叫做monkey测试。不过我这里想了一下,把猴子变成其它动物不也是这样吗?难不成换成别的动物还能打出诗句不成~~哈哈,开玩笑了。我想应该是结合了猴子喜好乱动,但是二哈也喜欢啊。。。不纠结了。

monkey参数大全

类别 选项 描述
一般 --help 打印一个简单的使用指南。
-v 命令行上的每个-v都会增加详细级别。级别0(默认值)提供的信息除启动通知,测试完成和最终结果外几乎没有。级别1提供有关测试运行的更多详细信息,例如发送到您的活动的单个事件。级别2提供更详细的设置信息,例如选择或未选择用于测试的活动。
活动 -s <seed> 伪随机数发生器的种子值。如果您使用相同的种子值重新运行Monkey,它将生成相同的事件序列。
--throttle <milliseconds> 在事件之间插入固定的延迟。您可以使用此选项来减慢Monkey的速度。如果未指定,则没有延迟,并且事件尽可能快地生成。
--pct-touch <percent> 调整触摸事件的百分比。(触摸事件是屏幕上单个位置的下行事件。)
--pct-motion <percent> 调整运动事件的百分比。(运动事件包括屏幕上某处的向下事件,一系列伪随机运动和一个向上事件。)
--pct-trackball <percent> 调整轨迹球事件的百分比。(轨迹球事件由一个或多个随机动作组成,有时随后单击。)
--pct-nav <percent> 调整“基本”导航事件的百分比。(导航事件由上/下/左/右组成,作为来自方向输入设备的输入。)
--pct-majornav <percent> 调整“主要”导航事件的百分比。(这些导航事件通常会导致UI中的操作,例如5向键盘中的中心按钮,后退键或菜单键。)
--pct-syskeys <percent> 调整“系统”键事件的百分比。(这些是通常保留供系统使用的密钥,例如Home,Back,Start Call,End Call或Volume控件。)
--pct-appswitch <percent> 调整活动启动的百分比。在随机的时间间隔内,Monkey将发出一个startActivity()调用,作为最大化包中所有活动的覆盖范围的方法。
--pct-anyevent <percent> 调整其他类型事件的百分比。这是所有其他类型事件的全部功能,例如按键,设备上其他较少使用的按钮等等。
约束 -p <allowed-package-name> 如果以这种方式指定一个或多个包,Monkey将允许系统访问这些包中的活动。如果您的应用程序需要访问其他包中的活动(例如,选择联系人),您还需要指定这些包。如果您没有指定任何包,Monkey将允许系统在所有包中启动活动。要指定多个包,请多次使用-p选项 - 每个包一个-p选项。
-c <main-category> 如果以这种方式指定一个或多个类别,则Monkey将允许系统访问使用指定类别之一列出的活动。如果您未指定任何类别,Monkey将选择使用Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY类别列出的活动。要指定多个类别,请多次使用-c选项 - 每个类别一个-c选项。
调试 --dbg-no-events 指定后,Monkey将执行初始启动到测试活动,但不会生成任何其他事件。为了获得最佳效果,请结合-v,一个或多个程序包约束以及非零限制以使Monkey运行30秒或更长时间。这提供了一个环境,您可以在其中监视应用程序调用的包转换。
--hprof 如果设置,此选项将在Monkey事件序列之前和之后立即生成分析报告。这将在data / misc中生成大(~5Mb)文件,因此请小心使用。有关跟踪文件的更多信息,请参见 Traceview
--ignore-crashes 通常,当应用程序崩溃或遇到任何类型的未处理异常时,Monkey将停止。如果指定此选项,Monkey将继续向系统发送事件,直到计数完成。
--ignore-timeouts 通常,当应用程序遇到任何类型的超时错误(例如“应用程序无响应”对话框)时,Monkey将停止。如果指定此选项,Monkey将继续向系统发送事件,直到计数完成。
--ignore-security-exceptions 通常,当应用程序遇到任何类型的权限错误时,Monkey将停止,例如,如果它尝试启动需要某些权限的活动。如果指定此选项,Monkey将继续向系统发送事件,直到计数完成。
--kill-process-after-error 通常,当Monkey因错误而停止时,失败的应用程序将保持运行状态。设置此选项后,它将通知系统停止发生错误的进程。注意,在正常(成功)完成的情况下,启动的进程不会停止,并且设备在最终事件之后只是处于最后状态。
--monitor-native-crashes 观看和报告Android系统本机代码中发生的崩溃。如果设置了--kill-process-after-error,系统将停止。
--wait-dbg 阻止Monkey执行,直到调试器连接到它。

查看APP包名

使用包名查看器APP,链接:https://pan.baidu.com/s/1hx5JKlUiMWuTRz9AJ9xFpA 密码:d0gq

monkey常用命令介绍

-p

用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果不指定包, monkey将允许系统启动设备中的所有app(包括系统自身功能,如:电话、短信等也就是说everything都将可能被启动)。

指定一个包:

adb shell monkey -p xxx.xxx.xxx 100   //xxx.xxx.xxx为包名,100为次数

指定多个包

adb shell monkey -p  xxx.xxx.xxx  –p  xxx.xxx.xxx  10  //xxx.xxx.xxx为包名,10为次数

-v

用于反馈日志级别,也就是详细程度,总共分3个级别,分别对应的参数如下 表所示:

adb shell monkey -p xxx.xxx.xxx -v 10 // 缺省值,仅提供启动提示、测试完成和最终结果等少量信息  

adb shell monkey -p xxx.xxx.xxx -v -v 10 // 提供较为详细的日志,包括每个发送到Activity的事件信息 

adb shell monkey -p xxx.xxx.xxx -v -v -v 10 // 最详细的日志,包括了测试中选中/未选中的Activity信息

-s(随机数种子)

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

monkey测试1:adb shell monkey -p xxx.xxx.xxx –s 1 10      //指定seed值为1,运行次数为10          

monkey测试2:adb shell monkey -p xxx.xxx.xxx –s 1 10      //指定seed值为1,运行次数为10

--throttle

每个事件结束后的间隔时间——降低系统的压力(如不指定,系统会尽快的发送事件序列)。如:--throttle 100

adb shell monkey -p xxx.xxx.xxx --throttle 100 100       // 指定间隔时间为100ms,运行次数为100

--pct-touch <percent>

指定触摸事件的百分比

adb shell monkey -p xxx.xxx.xxx --pct-touch 5 100       // 指定触摸事件为5%,运行次数为100

--pct-motion <percent> (滑动事件)

adb shell monkey -p xxx.xxx.xxx --pct-motion 5 100       // 指定滑动事件为5%,运行次数为100

--pct-trackball <percent> (轨迹球事件)

adb shell monkey -p xxx.xxx.xxx --pct-trackball 5 100       // 指定轨迹球为5%,运行次数为100

--pct-nav<percent> (基本导航事件 up/down/left/right)

adb shell monkey -p xxx.xxx.xxx --pct-nav 5 100       // 指定基本导航事件为5%,运行次数为100

--pct-majornav<percent> (主要导航事件 back key 、 menu key)

adb shell monkey -p xxx.xxx.xxx --pct-majornav 5 100       // 指定主要导航事件为5%,运行次数为100

--pct-syskeys<percent> (系统按键事件 Home 、Back 、startCall 、 endCall 、 volumeControl)

adb shell monkey -p xxx.xxx.xxx --pct-syskeys 5 100       // 指定系统按键事件为5%,运行次数为100

--ignore-crashes(忽略崩溃)

adb shell monkey -p xxx.xxx.xxx --ignore-crashes 100       // 忽略奔溃,运行次数为100

--ignore-timeouts(忽略超时)

adb shell monkey -p xxx.xxx.xxx --ignore-timeouts 100       // 忽略超时,运行次数为100

实例

1、事件、间隔时间、调试、输出日志整合

adb shell monkey -p xxx.xxx.xxx -s 1 --pct-touch 5 --throttle 100 --ignore-crashes --ignore-timeouts -v -v 10000 > D:\monkey_log.txt  

// 指定包、设置seed值为1,触摸事件5%,每个事件间隔时间100ms 忽略奔溃 忽略超时 日志级别为2级 10000次事件,保存日志到d盘monkey_log.txt 

2、停止monkey运行

adb shell
ps | grep monkey

kill 5540

monkey日志分析

日志分析呢,我们主要看异常。常见的异常为ANR Exception

1. 程序无响应的问题: 在日志中搜索 “ANR”
2. 崩溃问题:在日志中搜索 “Exception”   (如果出现空指针, NullPointerException)

如下图所示:

monkey优缺点

优点肯定是简单好用啦~缺点吗,硬说的话我觉得有一个,比如我想单独点击APP某个页面的某个区域,比如我只想点击登录按钮,那么就不好做了,不过好像是可以写脚本解决的。之前研究过,给忘掉了。后面再用的话再进行补充。

2、Android自动测试之Monkey工具的更多相关文章

  1. Android自动测试之Monkey工具

    Monkey工具 前言: 最 近开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey. Monkeyrunner. ...

  2. [转] Android自动测试之monkeyrunner工具(二)

    monkeyrunner工具  前言: 最近开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey.Monkeyru ...

  3. Android自动测试之monkeyrunner工具

    monkeyrunner工具  前言: 最近开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括 android测试框架.CTS.Monkey.Monkeyr ...

  4. Android自动化测试之Monkey工具

    前言:Android自动化测试工具.方法和框架,包括android测试框架.CTS.Monkey.Monkeyrunner.benchmark.test tool等. 一. 什么是MonkeyMonk ...

  5. Android自动化测试之Monkey 转自:LupuX

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u011436666/article/details/53998332 在之前的文章Android自动 ...

  6. Android自动化测试之monkeyrunner工具

    一.什么是monkeyrunner monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器.通过monkeyrunner,您可以 ...

  7. Android自动化测试之Monkey

    本来是做Web后端的,来公司实习变成微信小程序前端了,到这周变成Android APP测试人员了,也是微醺啊. 由于对手工测试终究是有些抵触,所有昨天小试了一下不用写代码的自动化压力测试,在此记下我的 ...

  8. Android自动化测试之Monkey Test 安装(二)

    因为Monkey Test是在eclipse上执行的,所以玩monkey test的时候要先配置安卓开发环境 一.Android开发环境搭建指南 1.安装JDK JDK下载链接:http://www. ...

  9. Android自动化测试之Monkey Test(一)

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

随机推荐

  1. 转载! 一图读懂 SignalR

  2. jekyll介绍安装.github静态页面工具

    jekyll build # => 当前文件夹中的内容将会生成到 ./site 文件夹中. $ jekyll build --destination <destination> # ...

  3. Find a Way (双bfs)

    Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year ...

  4. upc组队赛3 Congestion Charging Zon【模拟】

    Congestion Charging Zon 题目描述 Tehran municipality has set up a new charging method for the Congestion ...

  5. redis基本介绍搭建篇

    1.redis基本介绍 1.1 redis介绍 Redis属于非关系型数据库和Memcached类似,redis也是一个key-value型存储系统. 但redis支持的存储value类型相对更多,包 ...

  6. Linux NIO 系列(03) 非阻塞式 IO

    目录 一.非阻塞式 IO 附:非阻塞式 IO 编程 Linux NIO 系列(03) 非阻塞式 IO Netty 系列目录(https://www.cnblogs.com/binarylei/p/10 ...

  7. shell eval命令

    1. eval command-line 其中command-line是在终端上键入的一条普通命令行.然而当在它前面放上eval时,其结果是shell在执行命令行之前扫描它两次.如: pipe=&qu ...

  8. Linux下JDK1.6升级1.8版本

    先不管是否已安装JDK1.6还是JDK1.7,先下载 jdk-8u45-linux-x64.rpm 然后上传到  /usr/local/src  去.当然其他目录也可以.这里是默认位置   给所有用户 ...

  9. Sed的查,删,增,改

    sed的查,删,增,改 1.sed的查找 2.sed的删除 3.sed的上下左右增加文件内容 4.sed的改

  10. 关于 群晖 docker 百度云盘下载的使用心得

    因为有了群晖,所以想折腾一下看看有什么更多的功能,今天就来折腾一下群晖百度云盘下载.毕竟现在云盘都限速了嘛... 在群晖里,要想用到百度云盘下载,就需要有个小东西,就是docker.docker很简单 ...