做过压力测试的同朋友应该对monkey工具都不陌生!

Monkey是AndroidSDK中附带的一个工具。可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流,实现对正在开发的应用进行压力(稳定性)测试。

Monkey测试的特点:所有的事件都是随机产生的,不带任何人的主观性。今天我们来学习monkey工具,以及常用命令+APK集合测试。好了废话不多说,开始吧!

一、monkey简介

在android手机上做自动化测试,monkey比cts,Android Unit Test好用多了,他其实是继承与adbshell中的一段的shell指令。

Monkey测试的原理就是利用socket通讯的方式来模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常。当Monkey程序在模拟器或设备运行的时候,如果用户触发了比如点击,触摸,手势或一些系统级别的事件的时候,它就会产生随机脉冲,所以可以用Monkey用随机重复的方法去负荷测试软件。

Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/sdk/sdk/tools/lib/monkey.jar;Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/sdk/sdk/tools/bin/monkey,这样就可以通过在CMD窗口中执行:adbshellmonkey{+命令参数}来进行Monkey测试了。

google对monkey命令分了以下四类:

基本配置选项,如设置事件的数量、查看帮助信息等。

操作的约束,如通过包名限制哪些应用可以被测试。

事件的类型和频率,如点击事件占比多少、触摸事件又占多少以及事件之间的间隔时间等。

调试选项,如是否忽略crashes、ANR等。

二、monkey指令参数介绍

要获取Monkey命令自带的简单帮助,在CMD中执行命令:adbshellmonkey–help,这样子,就有他的各种各样的提示命令的参数。如下图:

以下是各个约束限制的参数的释义:

(1)-p:参数-p用于约束限制,用此参数指定一个或多个包(Package,即App)。指定包之后,Monkey将只允许系统启动指定的APP。如果不指定包,Monkey将允许系统启动设备中的所有APP。对包的指定有以下几种方式:

指定一个包指令如下。说明:com.example.sellClientAPP为包名,100是事件计数(即让Monkey程序模拟100次随机用户事件)。

指定多个包:

adbshellmonkey-pcom.htc.Weather–pcom.htc.pdfreader-pcom.htc.photo.widgets100

不指定包:adbshellmonkey100,说明:Monkey随机启动APP并发送100个随机事件。

要查看设备中所有的包,在CMD窗口中执行以下命令:

>adbshell#cddata/data#ls

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

日志级别level0,示例如下,说明:缺省值,仅提供启动提示、测试完成和最终结果等少量信息相应源代码如图所示了,这十分有利于调试了。

adbshellmonkey-pcom.htc.Weather–v100

日志级别Level1,示例如下,说明:提供较为详细的日志,包括每个发送到Activity的事件信息。

adbshellmonkey-pcom.htc.Weather–v-v100

日志级别Level2,示例如下,说明:最详细的日志,包括了测试中选中/未选中的Activity信息。

adbshellmonkey-pcom.htc.Weather–v-v–v100

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

Monkey测试1:adbshellmonkey-pcom.htc.Weather–s10100Monkey测试2:adbshellmonkey-pcom.htc.Weather–s10100

两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的。

(4)–throttle<毫秒>:用于指定用户操作(即事件)间的时延,单位是毫秒,示例如下:

adbshellmonkey-pcom.htc.Weather–throttle3000100

(5)–ignore-crashes:用于指定当应用程序崩溃时(Force&Close错误),Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。示例如下:

示例1:adbshellmonkey-pcom.htc.Weather--ignore-crashes1000示例2:adbshellmonkey-pcom.htc.Weather1000

示例1说明: 测试过程中即使Weather程序崩溃,Monkey依然会继续发送事件直到事件数目达到1000为止。

示例2说明: 测试过程中,如果Weather程序崩溃,Monkey将会停止运行。

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

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

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

(9)–monitor-native-crashes:用于指定是否监视并报告应用程序发生崩溃的本地代码。

(10)–pct-{+事件类别}{+事件类别百分比}:用于指定每种类别事件的数目百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比),使用类型分别如下:

–pct-touch{+百分比}:调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。示例如下:

adbshellmonkey-pcom.htc.Weather--pct-touch101000

–pct-motion{+百分比}:调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)adbshellmonkey-p。示例如下:

com.htc.Weather--pct-motion201000

–pct-trackball{+百分比}:调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。示例如下:

adbshellmonkey-pcom.htc.Weather--pct-trackball301000

–pct-nav{+百分比}:调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)。示例如下:

adbshellmonkey-pcom.htc.Weather--pct-nav401000

–pct-majornav{+百分比}:调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)。示例如下:

adbshellmonkey-pcom.htc.Weather--pct-majornav501000

–pct-syskeys{+百分比}:调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、StartCall、EndCall及音量控制键)。示例如下:

adbshellmonkey-pcom.htc.Weather--pct-syskeys601000

–pct-appswitch{+百分比}:调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法。示例如下:

–pct-anyevent{+百分比}:调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。示例如下:

–pct-anyevent:1001000*指定多个类型事件的百分比,注意:各事件类型的百分比总数不能超过100%。示例如下:

(11)–dbg-no-events:设置此参数,monkey将执行初始启动,进入到一个测试Activity后,不会进一步生成事件。

三、APK集合测试的设置方法

APK集合测试的设置方法APK应用集合分为黑名单和白名单,黑名单是指系统将执行除了黑名单中以外的apk;白名单则是只执行在白名单中的apk。

(1)黑名单的设置方法:

a.)创建一个名称为blacklist的txt文档,在文件中输入应用程序的包名,如mms应用,则在文件中输入com.android.mms;如果有多个应用程序不想被执行,则在文件中添加多个包名,注意包名与包名之间均用回车键。

b.) 将blacklist.txt的文件导入到手机的/data目录下,然后在执行monkey测试的时候使用–pkg-blacklist-file参数再加上blacklist文件的存储路径,其他的参数设置则和测试单一apk没有区别。

(2)白名单的设置方法:

白名单的设置方法和黑名单的设置方法基本一致,只是在创建txt文档的时候,文件的命令应为whitelist。在执行monkey的时候,只执行白名单中的应用。

补充说明:在执行monkey测试的时候,如果将monkey测试的日志存放在手机的sdcard或者其他目录下,在monkey测试命令的最后加上一个&符号,则可以再不连接USB的情况下继续执行monkey。

如:

monkey–pcom.android.mms–s100–throttle1000–v–v–v15000>/mnt/sdcard/monkey_test.txt&

下面是测试资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:伤心的辣条 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

软件测试 | 手把手教你快速掌握 Monkey 工具,指令参数+APK集合测试相关推荐

  1. js制定一个单选按钮_【下】每个月整理发票太头疼?手把手教你快速开发一个工具解决!...

    "NightTeam",一个值得加星标的公众号. 在上篇中,我们已经将我们的发票管理工具开发到了能一键导入发票.能看到效果.能仍然不太方便地管理的状态,接下来我们来继续将还没有加进 ...

  2. 软件测试 | 手把手教你如何使用 Charles 抓包工具(电脑+手机端)

    软件测试 | 手把手教你如何使用 Charles 抓包工具(电脑+手机端) 一.Charles简介 二.Charles下载与安装 三.Charles配置 (1)Charles-PC端的配置如下: (2 ...

  3. 手把手教你查看常用理财工具

    手把手教你查看常用理财工具 同学们好,这节课我们来学习下如何查看理财工具的信息. 了解理财工具,最快捷的方法就是在行情软件或者网站上查看.不过里面的信息太多,很容易让刚开始接触理财的同学眼花缭乱.其实 ...

  4. 《从零构建前后分离的web项目》:前端完善 - 手把手教你快速构建网站布局

    添砖加瓦 - 手把手教你快速构建网站布局 项目地址 本章源码地址 文章地址 本文为方便讲述重构去除了 Element.vux 库,用了最近比较火的 bulma 轻量.快捷.易读. 项目截屏 Layou ...

  5. 手把手教你快速入门知识图谱 - Neo4J教程

    手把手教你快速入门知识图谱 - Neo4J教程 前言 1. Neo4J简介 2. Neo4J安装 3. Neo4J使用 4. Cypher查询语言 5. Neo4J实战教程 1. 首先,我们删除数据库 ...

  6. 手把手教你快速搭建私服环境

    手把手教你快速搭建私服环境,简单实用,一看就懂 1.准备工作:先下载Nxus Nexus 是 Maven 仓库管理器, 通过 nexus 可以搭建 maven 仓库,同时 nexus 还提供强大的仓库 ...

  7. 测试手机新机软件,玩机小技巧 篇一:手把手教你快速验新机——写给剁手节买了新手机的值友...

    玩机小技巧 篇一:手把手教你快速验新机--写给剁手节买了新手机的值友 2020-12-10 17:39:14 29点赞 97收藏 11评论 创作立场声明:本文旨在分享购入新机器后如何检验手机完好的小技 ...

  8. 手把手教你快速搞定4个职场写作场景

    " [写作能力提升]系列文章: 为什么建议你一定要学会写作? 手把手教你快速搞定 4 个职场写作场景 5 种搭建⽂章架构的⽅法"免费赠送! " 一.前言 Hello,我是 ...

  9. 手把手教大家快速构建自动回复机器人

    手把手教大家快速构建自动回复机器人 聊天机器人可以说在我们生活中的应用非常普遍了. 它们依托于互联网资源,回答用户的日常问题,或者主动提醒和推荐.比如,苹果的Siri,微软的Cortana这种的语音机 ...

最新文章

  1. 第一阶段站立会议08
  2. Java基础:JVM垃圾回收算法
  3. Indy10收发Hotmail邮件
  4. B-树 B+树复习总结
  5. 不停止nginx服务的情况下替换nginx执行文件
  6. java jpanel隐藏_java – 绘制JPanel隐藏菜单
  7. java swing预览pdf_java – 如何使用iText将Swing组件绘制为PDF文件?
  8. php 同步退出,Ucenter 的同步登录与同步退出
  9. html5中defer的属性,HTML5中defer和async的比较
  10. 自定义函数:删除数组B中与数组A重复的值
  11. Win7梦幻桌面字体有问题怎么办
  12. 十进制计算机算法,计算机知识--二进制,十进制,十六制算法
  13. from_tensor_slices()
  14. 天猫为海澜之家打造“智慧门店”;东方网力联手电子科技大学,共建人工智能联合实验室...
  15. 四川阆中2021中学高考成绩查询入口,2021年四川高考体检报告结果查询时间及查询网址入口...
  16. php 高洛峰 正则,PHP 自定义 Smarty 模板引擎类 高洛峰 细说PHP
  17. win服务器系统2012和2016,将 Windows Server 2012 升级到 Windows Server 2016
  18. 简洁的安卓软件下载页源码
  19. 【chrome插件开发二】chrome常用语法汇总
  20. python从网址爬图片协程_python协程gevent案例 爬取斗鱼图片过程解析

热门文章

  1. try catch对异常进行输出到日志、_spring Boot手把手教学(7): 抛弃try-catch, 如何优雅统一处理异常(含404)...
  2. 【免费毕设】基于PHP的产品报价系统的设计与开发(源代码+论文)
  3. matlab 省略号,matlab知识集锦 | 学步园
  4. java 类型转string类型_java常用类String与其他数据类型之间的转化
  5. dvd清洗碟效果好吗_【你用对了吗?】清洗果蔬哪个好?盐水?淘米水?清洗液......
  6. DALSA相机开发记录(01)
  7. Halcon例程学习:print_check.hev(光学字符检测)
  8. 产品研发过程管理专题——编写软件测试计划需要考虑的几个问题
  9. c语言指针交换字符串组,c语言 指针交换两个字符串
  10. 性能测试的需求如何确定