Android自带Monkey测试

Monkey是在模拟器上或设备上运行的一个小程序,它能够产生为随机的用户事件流,例如点击(click),触摸(touch),挥手(gestures),还有一系列的系统级事件。可以使用Monkey来给正在开发的程序做随机的,可重复的压力测试 。

Monkey基本用法

可以通过开发机器上的命令行或脚本来启动Monkey。由于Monkey运行在模拟器/设备环境中,所以必须用其环境中的shell来进行启动。可以通过在每条命令前加上adb shell来达到目的,也可以进入Shell后直接输入Monkey命令。基本语法如下:

$ adb shell monkey[options]

如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:

$ 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,直到有调试器和它相连接。

 

  

1.Android中的应用包名(可与开发确认)

  com.android.browser

 com.android.launcher

 com.android.settings

 com.android.calculator2

 com.android.contacts

 com.android.calendar

 com.android.alarmclock

 com.android.music

2.monkey 应用:

  (1)测试系统:

adb shell monkey –v 10000

(2)测试应用如Browser:

  adb shell monkey –pcom.android.browser –v 10000

(3)提取测试结果:

  1)先把结果存入模拟器或者设备的sdcard中:

    adb shell monkey –pcom.android.browser –v 10000 > /sdcard/browser1.log exit

   2)用adb 命令把log文件考到本地:

    adb pull/sdcard/browser1.log  D:\log\

   3)用Editplus 打开.即使可看到测试结果.

3.关于-p 与-v的说明:

  -p:指定应用包.一个-p只能指定一个应用包,可用多个-p指定多个应用包. 

  -v:

零个-v,得到的结果信息非常少(我测的时候,什么结果也没有)

一个-v:得到的信息稍多一些.

两个-v:得到的信息非常多.

关于-v的更具体的信息,请看上面的表格.

4.关于-s:

  s-------seed :种子的意思.看下面的例子:

 adb shell monkey –p com.android.browser–s 1 –v 1000

 以上命令会得到一系列事件的模拟,如果你还想把刚刚模拟的事件原模原样地重复一遍,那么就用同样的seed 值,如果不想重复刚刚模拟的随机事件,就换一个-s 值.如果你输入下面的命令:

monkey –p com.android.browser –s 2 –v 1000

你的随机事件就发生变化了.不再是原来的随机事件.缺省-s的模拟事件与上一次的相同,所以建议加上-s,以确保对随机模拟事件的控制.

5.关于--throttle

 这是事件延迟参数

 1)如果不加这个参数,两个事件之间不存在延迟,这样对系统的压力会比较大.

 2)加上延迟,其后面接的单位是毫秒.如:

  adb shell  monkey -pcom.android.browser -s 1 --throttle 300 -v 1000

  执行以上命令之后,monkey 的两个随机事件之间要有300毫秒的延迟.至于何时用这个参数,要根据性能测试的需要.

6.关于查看结果:

  1)如果一切正常.不会存在memeinfo以及 CUP 占用信息.

  2)如果应用有问题,在未加其他相关参数的情况下,会在有问题的事件/应用处停止,如果涉及到mem 以及 CPU信息,则会列出此信息.在停止的位置会显示出错的事件/应用的名字.查看时应留意.(关于如何查看,仍然在调查中)

7.关于其他参数.正在调查中. 


参考文章:

Android自带了很多方便的测试工具和方法,包括我们常用的单元测试、Robotium测试、Monkey测试、MonkeyRunner测试、senevent模拟等。这些方法对于我们编写高质量的APP十分有用。也可以提前暴露我们程序的隐藏问题。今天给大家讲一下Monkey测试,Monkey测试可以说是我上面提到过的测试方法里面最简单的。  

1、Monkey测试简介

  Monkey主要应用在压力和可靠性测试上,运行该命令可以随机地向目标程序发送各种模拟键盘事件流,并且可以自己定义发送的次数,以此观察被测应用程序的稳定性和可靠性,应用起来也比较简单,记住那几个命令就行了。

  • Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar
  • Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey

 

2、Monkey的基本用法

$ adb shell monkey [options]

  如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个常见用法的示例,它启动指定的应用程序,并向其发送100个伪随机事件:

$ adb shell monkey -p package_name -v 100

 

3、Monkey测试例子

  上面就是一个使用Monkey测试Launcher的例子,因为对某个APP进行测试的时候,需要指定APP的包名,我们可以先进入data\data目录下面,看看有哪些APP包。

 

4、Monkey测试停止条件

Monkey Test执行过程中在下列三种情况下会自动停止:

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

 

 

5、Monkey详细参数

  下面是Monkey的详细参数表,图片是从CSDN一位开发者的博客上截取的。


6、结语

  Monkey测试是Android自动化测试里面使用比较简单的方法,可以很大程度检验我们的程序是否稳定,能否经得起压力测试,可以根据实际情况调整测试的强度和测试重点。这个也是我在开发APP的时候最常用的方法,基本上每个版本发布之前,我都会进行比较高强度的Monkey测试,就像我每次发布Launcher之前都会进行1W次Monkey测试。系统集成后,再进行整体的压力测试。

  最后说一句,Monkey测试只是一个模拟测试,很多时候跟实际情况时有差别的。所以这个只能是其中一个辅助测试,后面有空再讲解其他的自动化测试方法。 


参考网址:http://developer.android.com/tools/help/monkey.html

转载于:https://www.cnblogs.com/aikongmeng/p/3697329.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

捣蛋鹅显示服务器已满,无题大鹅模拟奖杯攻略分享

捣蛋鹅成就怎么解锁&#xff1f;游戏章节不是很长&#xff0c;不同章节中都有不同的奖杯需要解锁&#xff0c;有些比较简单&#xff0c;有的需要一点点技巧&#xff0c;小编这里给大家带来了“PSN lyplyp_lll”总结的无题大鹅模拟奖杯攻略分享&#xff0c;一起来看下文中具体的…

线程的属性 —— 分离的状态(detached state)、栈地址(stack address)、栈大小(stack size)

参考&#xff1a;&#xff08;四十二&#xff09;线程——线程属性 作者&#xff1a;FadeFarAway 发布时间&#xff1a;2017-01-17 14:09:55 网址&#xff1a;https://blog.csdn.net/FadeFarAway/article/details/54576771 目录引入线程属性初始化一、线程的分离状态(detached …

【微信小游戏实战】零基础制作《欢乐停车场》二、关卡设计

1、游戏立项 微信小游戏中有一款《欢乐停车场Plus》的小游戏&#xff0c;大家可以搜索玩下。这是一款益智类的小游戏&#xff0c;游戏中有红、黄、绿、蓝、紫5辆豪车6个停车位&#xff0c;玩家通过可行走路线移动小车&#xff0c;最终让各颜色的小车停到对应的颜色车位&#xf…

线程同步(互斥锁、条件、读写锁、信号量)

参考&#xff1a;&#xff08;四十三&#xff09;线程——线程同步&#xff08;互斥锁、读写锁、条件变量、信号量&#xff09; 作者&#xff1a;FadeFarAway 发布时间&#xff1a;2017-01-17 21:25:28 网址&#xff1a;https://blog.csdn.net/FadeFarAway/article/details/545…

Nginx使用Expires增加浏览器缓存加速(转)

转载自&#xff1a;Nginx使用Expires增加浏览器缓存加速 Nginx可以更改HTTP头部&#xff0c;这个是Web服务器必须的&#xff0c;当然Nginx更可以支持在HTTP头部中添加Expires等相关信息&#xff0c;增强浏览器缓存&#xff0c;是网页加载速度增强。 Nginx中使用Expires增强浏览…

Linux curl命令详解

转自&#xff1a;https://www.cnblogs.com/duhuo/p/5695256.html 命令&#xff1a;curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具&#xff0c;可以说是一款很强大的http命令行工具。它支持文件的上传和下载&#xff0c;是综合传输工具&#xff0c;但按传统…

MAC地址、IP地址、ARP协议

B站视频&#xff1a;计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09; 网址&#xff1a;https://www.bilibili.com/video/BV1c4411d7jb?p61 说明&#xff1a;讲的不错&#xff0c;后期可以继续看此视频学习网络知识 目录MAC地址IP地址ARP协议MAC地址 IP地址 ARP协…

编程学习网站

2019独角兽企业重金招聘Python工程师标准>>> ‍ 刚开始学习编程&#xff0c;如果只是拿着书本拼命敲代码&#xff0c;肯定是非常枯燥的。如果不是非常有决心和毅力可能就会轻易放弃了&#xff0c;有没有学习坡度不那么陡的教程呢&#xff1f; 让我们可以先学点基本的…

ARM指针寄存器——堆栈指针寄存器SP、程序计数器PC、连接寄存器LR

参考&#xff1a;堆栈指针寄存器 SP详解以及栈的作用 作者&#xff1a;蓝色鲜橙多 网址&#xff1a;https://blog.csdn.net/qq_36588941/article/details/89873633?utm_sourceapp&app_version4.16.0&codeapp_1562916241&uLinkIdusr1mkqgl919blen 目录堆栈的实现方…

U-Boot 图形化配置及其原理

目录U-Boot 图形化配置体验&#xff08;如何使能dns 命令&#xff09;menuconfig 图形化配置原理make menuconfig 过程分析Kconfig 语法简介1、mainmenu2、调用其他目录下的Kconfig 文件3、menu/endmenu 条目3、config 条目4、depends on 和select4、choice/endchoice5、menuco…

类与对象(三)

定义一个描述教师的类Teacher&#xff0c;数据成员包括工号(Num),姓名(Name、性别(Sex、家庭住址( Addr}、联系电话(Tel}, E-mail地址(Email )、职务(Headship )、职称(Post)和工资(Salary对于数据成员&#xff0c;要求用字符数组实现工号、姓名、家庭住址、联系电话、E-mail地…

OpenStack tokens id获取测试

转载于:https://www.cnblogs.com/heidsoft/p/3524711.html

Linux 内核获取、初次编译、源码目录分析

目录Linux 内核获取Linux 内核初次编译Linux 内核源码目录分析1、arch 目录2、block 目录3、crypto 目录4、Documentation 目录5、drivers 目录6、firmware 目录7、fs 目录8、include 目录9、init 目录10、ipc 目录11、kernel 目录12、lib 目录13、mm 目录Linux 内核获取 关于L…

PHP里10个鲜为人知但却非常有用的函数

PHP里有非常丰富的内置函数&#xff0c;很多我们都用过&#xff0c;但仍有很多的函数我们大部分人都不熟悉&#xff0c;可它们却十分的有用。这篇文章里&#xff0c;我列举了一些鲜为人知但会让你眼睛一亮的PHP函数。 levenshtein() 你有没有经历过需要知道两个单词有多大的不同…

学会阅读硬件的原理图、数据手册大全

参考&#xff1a; 郭天祥&#xff1a;https://www.bilibili.com/video/BV1DW411a7mz?p8 韦东山&#xff1a;https://www.bilibili.com/video/BV1ga4y1Y7PL?p4 https://www.bilibili.com/video/BV17g411F7oR?spm_id_from333.999.0.0 洋桃电子&#xff1a;https://www.bilibil…

解决替换weblogic的commons-fileupload.jar后引发的问题

为什么80%的码农都做不了架构师&#xff1f;>>> 上一篇博文中提到通过替换weblogic自带的commons-fileupload.jar来解决FileUpload类的NoSuchMethodError问题。在完成替换后&#xff0c;该问题得到顺利解决&#xff0c;但是也会引发其他的一些问题&#xff0c;下面…

Python for Data Analysis 学习心得(二) - pandas介绍

一、pandas介绍 本篇程序上篇内容&#xff0c;在numpy下面继续介绍pandas&#xff0c;本书的作者是pandas的作者之一。pandas是非常好用的数据预处理工具&#xff0c;pandas下面有两个数据结构&#xff0c;分别为Series和DataFrame&#xff0c;DataFrame之前我在一些实战案例中…

Euler:欧拉函数&素数筛

一、欧拉函数 欧拉函数是小于x的整数中与x互质的数的个数&#xff0c;一般用φ(x)表示。 通式&#xff1a; 其中p1, p2……pn为x的所有质因数&#xff0c;x是不为0的整数。比如x12&#xff0c;拆成质因数为122*2*3&#xff0c;12以内有1/2的数是2的倍数&#xff0c;那么有1-1/2…

大小端字节序

想起以前在汇编语言和数字逻辑的时候也有接触到一些这个概念&#xff0c;已经有点模糊了&#xff0c;搞不清楚哪个是低位在前哪个是高位在前。后来在Wiki和Google的帮助下也算摸清楚了一些Endianness的概念。 一、字节序的起源 在计算机中&#xff0c;字节序&#xff08;Endian…

docker 部署nginx 使用keepalived 部署高可用

一&#xff0e;体系架构 在Keepalived Nginx高可用负载均衡架构中&#xff0c;keepalived负责实现High-availability (HA) 功能控制前端机VIP&#xff08;虚拟网络地址&#xff09;&#xff0c;当有设备发生故障时&#xff0c;热备服务器可以瞬间将VIP自动切换过来&#xff0c…