Android测试之Monkey

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介:
Android官方对 Monkey进行了简单介绍,网上也有不错的翻译。这部分就直接引用官网的原文和网友的翻译。个人理解不同所以觉得有必要把官网原文贴出来。你也可以直接参见https://developer.android.com/tools/help/monkey.html。本文适合android测试人员阅读,欢迎交流讨论。
  Monkey是什么
  Monkey是可以运行在模拟器里或实际设备中的程序。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力 测试
  The Monkey is a program that runs on your emulator or device and generates pseudo-random streams of user events such as clicks, touches, or gestures, as well as a number of system-level events. You can use the Monkey to stress-test applications that you are developing, in a random yet repeatable manner.
   Monkey简介
  Monkey是一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行 压力测试。Monkey包括许多选项,它们大致分为四大类:
  · 基本配置选项,如设置尝试的事件数量。
  · 运行约束选项,如设置只对单独的一个包进行测试。
  · 事件类型和频率。
  · 调试选项。
  在Monkey运行的时候,它生成事件,并把它们发给系统。同时,Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理:
  · 如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。
  · 如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。
  · 如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。
  按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。
  The Monkey is a command-line tool that that you can run on any emulator instance or on a device. It sends a pseudo-random stream of user events into the system, which acts as a stress  test on the application software you are developing.
  The Monkey includes a number of options, but they break down into four primary categories:
  Basic configuration options, such as setting the number of events to attempt.
  Operational constraints, such as restricting the test to a single package.
  Event types and frequencies.
  Debugging options.
  When the Monkey runs, it generates events and sends them to the system. It also watches the system under test and looks for three conditions, which it treats specially:
  If you have constrained the Monkey to run in one or more specific packages, it watches for attempts to navigate to any other packages, and blocks them.
  If your application crashes or receives any sort of unhandled exception, the Monkey will stop and report the error.
  If your application generates an application not responding error, the Monkey will stop and report the error.
  Depending on the verbosity level you have selected, you will also see reports on the progress of the Monkey and the events being generated.
   Monkey的基本用法
  可以通过开发机器上的命令行或脚本来启动Monkey。由于Monkey运行在模拟器/设备环境中,所以必须用其环境中的 shell来进行启动。可以通过在每条命令前加上adb shell来达到目的,也可以进入Shell后直接输入Monkey命令。基本语法如下:
  $ adb shell monkey [options]
  如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:
$ adb shell monkey -p your.package.name -v 500
You can launch the Monkey using a command line on your development machine or from a script. Because the Monkey runs in the emulator/device environment, you must launch it from a shell in that environment. You can do this by prefacing adb shell to each command, or by entering the shell and entering Monkey commands directly.
The basic syntax is:
$ adb shell monkey [options] <event-count>
With no options specified, the Monkey will launch in a quiet (non-verbose) mode, and will send events to any (and all) packages installed on your target. Here is a more typical command line, which will launch your application and send 500 pseudo-random events to it:
$ adb shell monkey -p your.package.name -v 500
   命令选项参考
  --help
  列出简单的用法。
  -v
  命令行的每一个-v将增加反馈信息的级别。Level 0(缺省值)除启动提示、测试完成和最终结果之外,提供较少信息。Level 1提供较为详细的测试信息,如逐个发送到Activity的事件。Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。
  事件
  -s <seed>
  伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件序列。
  --throttle <milliseconds>
  在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定该选项,Monkey将不会被延迟,事件将尽可能快地被产成。
  --pct-touch <percent>
  调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。
  --pct-motion <percent>
  调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)。
  --pct-trackball <percent>
  调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。
  --pct-nav <percent>
  调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)。
  --pct-majornav <percent>
  调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)
  --pct-syskeys <percent>
  调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)。
  --pct-appswitch <percent>
  调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法。
  --pct-anyevent <percent>
  调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。
   约束限制
  -p <allowed-package-name>
  如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。如果你的应用程序还需要访问其它包里的Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个 -p选项,每个-p选项只能用于一个包。
  -c <main-category>
  如果用此参数指定了一个或几个类别,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流程
  总的来说使用monkey进行测试是比较简单的,只是需要做一些比较复杂的准备工作。下面详解测试步骤(很简单的哦),所讲内容是建立在已经配置好ADB环境的基础上(如果这部分不清楚请先google一下先配置好环境,这里不做描述)。
  1、ADB连接Android测试设备。
  2、确定你要测试的应用的PackageName。
  3、使用Monkey发一条测试命令。
   步骤详解
  步骤确实很简单吧。不敢保证读者都明白如何去完成上面的步骤,这里讲讲每步如何做。
   1、ADB连接Android测试设备。
  如果你用的是模拟器,那么启动后通常是已经连在ADB上了。对于真机来说两种方式都可以:
  方式一:使用USB把Android设备接到PC上,然后装上驱动(不好找驱动的话就用豌豆荚吧)。
  方式二:首先得确保你的Android已经成功root了,那么可以使用wifi无线连接。①下载一个wifi adb应用装在你的android设备上;②在android上打开wifi adb;③在pc上的命令行中输入wifi adb中显示的那部分内容:adb connect 192.168.x.x,命令行中显示connected 192.168.x.x那么说明连接好了。
  我比较喜欢方式二,这样可以不用去下载驱动(主要是驱动很多都不稳定),而且不伤害电池。长时间插在USB上对电池始终是不好的。只不过这种方式设备一旦休眠那么就可能需要重连。
   2、确定你要测试的应用的PackageName。
  先说明一下这里讲的方法是通用的,而网上其他方法获取PackageName不然不通用(因为他是建立在root的基础上的,我不敢保证你的设备已经root)。
  ①在android设备上点击一下你要测试的设备,然后就不用操作设备了。
  ②在PC上的命令行输入:adb logcat>D:/log.txt *:I
  在这里的D:/log.txt你可以改成其他的路径,但是一定要先确保路径下没有这个文件,不然的话你以前的文件就被改掉了,一定要小心。
  ③按下Ctrl+c先停掉(为了避免过多的新信息)。打开刚刚的那个文件D:/log.txt。从文件最下面开始找下面格式的信息
  I/ActivityManager( 数字): Displayed 包名/类名: +数字ms
  例如我的信息如下:
  I/ActivityManager(  272): Displayed com.vane/.act.ActLauncher: +315ms
  不过你可能会发现有很多这种格式的信息,到底哪个才是你需要的呢,如果你严格按照刚刚的步骤做的话,那么很可能是最下面那条信息,即使不是那么也肯定是最下面几条信息中的某一条,这需要你根据应用进行辨别。
  ④记下你刚刚得到的包名,例子中的包名为“com.vane”。马上就会用。
   3、使用Monkey发一条测试命令。
  这一步就比较简单了。直接在pc上的命令行输入:adb shell monkey -p com.vane -v 50
  备注:上面命令中的com.vane就是之前获得的包名;命令中的参数你可以自己根据需要参考上面的参数文档进行修改。
   4、观察android设备,直到Monkey停止。
  5、如果应用崩溃的话就好分析一下Monkey中的信息。
   总结
  Monkey的使用确实比较简单,但是在测试中确有不小的作用,值得使用。
  文字若有不妥之处希望读者提出你的宝贵意见。欢迎拍砖。
最新内容请见作者的GitHub页:http://qaseven.github.io/

相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
Linux Android开发
测试程序之提供ioctl函数应用操作GPIO适用于Linux/Android
测试程序之提供ioctl函数应用操作GPIO适用于Linux/Android
310 0
|
7月前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
750 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
8月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
188 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
Java 测试技术 Android开发
Android性能测试——发现和定位内存泄露和卡顿
本文详细介绍了Android应用性能测试中的内存泄漏与卡顿问题及其解决方案。首先,文章描述了使用MAT工具定位内存泄漏的具体步骤,并通过实例展示了如何分析Histogram图表和Dominator Tree。接着,针对卡顿问题,文章探讨了其产生原因,并提供了多种测试方法,包括GPU呈现模式分析、FPS Meter软件测试、绘制圆点计数法及Android Studio自带的GPU监控功能。最后,文章给出了排查卡顿问题的四个方向,帮助开发者优化应用性能。
773 4
Android性能测试——发现和定位内存泄露和卡顿
|
测试技术 Shell Android开发
Android 性能测试初探 (六)
本节聊聊性能测试的最后一项- 流量,当然我所指的性能测试是针对大部分应用而言的,可能还有部分应用会关注网速、弱网之类的测试,但本系列文章都不去一一探讨了。
179 6
|
测试技术 Shell 定位技术
Android 性能测试初探 (五)
聊聊大家不常关注的测试项- 功耗
133 4
|
JavaScript 测试技术 Android开发
Android 性能测试初探 (四)
本文介绍了GPU在移动端性能测试中的重要性,并详细解释了过度绘制、帧率和帧方差的概念。针对GPU测试,文章列举了三项主要测试内容:界面过度绘制、屏幕滑动帧速率和平滑度。其中,过度绘制测试需遵循特定标准,而帧速率和平滑度测试则可通过软件或硬件方法实现。在软件测试中,使用Systrace插件和高速相机是两种常用手段。对于不同机型,帧率及帧方差的测试标准也需相应调整。
143 5
|
测试技术 Shell Android开发
Android 性能测试初探 (三)
本文承接《Android性能测试初探(二)》,深入探讨CPU与内存测试。介绍了移动端内存测试的重要性及其测试目标,并详细列举了不同状态下应用内存消耗情况的测试项目。此外,还提供了多种内存测试方法,包括使用`procrank`等工具的具体操作步骤。最后,文章也简要提及了CPU测试的相关内容,帮助读者更好地理解Android性能测试的关键要素。
119 5
|
算法 测试技术 Android开发
Android 性能测试初探 (二)
上回大体介绍了下在 android 端的性能测试项,现在我们就细节测试项做一些阐述(包括如何自己 DIY 测试)
156 4
|
测试技术 API Android开发
Android 性能测试初探 (一)
Android 性能测试,跟pc性能测试一样分为客户端及服务器,但在客户端上的性能测试分为 2 类: 一类为 rom 版本的性能测试;一类为应用的性能测试。
197 3