本文同时发表于本人个人网站 www.yaoxiaowen.com

monkey测试算是android自动化测试当中最简单的一种工具了。虽然简单,不过对于测试app的稳定健壮,减少崩溃还是比较有用的。所以建议app可以经常做些monkey测试,下班之后,打开monkey测试,就不用管了,第二天来了查看结果就好。

一:monkey介绍
Monkey就是Android的一个命令行工具,是运行在手机里的。(可以模拟器可以真机),它通过向系统发送伪随机的用户事件流(比如手势,按键,触摸屏触摸事件等),来实现对app的测试。当然,因为它的事件流数据是随机的,不能自定义,这点也算是一个缺陷。
所以monkey这个名字还是挺贴切的,就是像猴子那样乱点,

二,使用前期准备
1,我们平时在cmd命令工具里使用adb命令等,都要进入adb所在的文件目录,这点比较麻烦,所以我们要把adb命令添加进window的环境变量。方法如下(win7为例):
依次点击:计算机->属性->高级系统设置->高级->环境变量-> 系统变量 ->编辑 Path ,在在变量值后面添加一行 C:\Users\Administrator\AppData\Local\Android\sdk\platform-tools,(当然这是我自己的电脑目录,其他人的电脑目录可能会不同)。
这样 platform-tools文件夹下面的 adb,sqlite3,fastboot等工具都可以直接使用了。
2,手机打开开发者模式里面的usb调试,然后 通知栏选项里面要选择 传输文件,而不能选择 只充电,
  usb连接真机后,(或者打开模拟机),使用命令
  adb devices
  显示 内容:
  List of devices attached
  ec771855 device
这样就代表adb已经连接到手机了。

三,运行monkey

cmd命令行输入命令。
$ adb shell monkey -s 161218 -p com.tc.tickets.train.dev -v -v –throttle 500 60000 > C:\Users\Administrator\Desktop\tongcheng\log\moneky_12121802.txt

一些option的解释:
  adb shell monkey:启动monkey,monkey其实是通过android环境的shell来启动的。
  -s 伪随机数生成器的 seed 值。相同的种子值,生成相同的事件序列,所以每次运行前这个值要改成不同,改成当天的日期是最简单好记的。
  -p 需要测试的app包名,约束限制,不过其实可以指定多个包的,比如: adb shell monkey -p com.yaoxiaowen.prj –p com.yaoxiaowen.demo
  -v
  用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:
    日志级别 : Level 0
      写法示例 :–v
      说明 :默认值,仅提供启动提示、测试完成和最终结果等少量信息

    日志级别 : Level 1
      写法示例 :–v -v
      说明 :提供较为详细的日志,包括每个发送到Activity的事件信息

    日志级别 : Level 2
      写法示例 :–v -v -v
      说明 :最详细的日志,包括了测试中选中/未选中的Activity信息

  –throttle (毫秒)
  在事件之间插入固定延迟。通过这个选项可以减缓 Monkey 的执行速度。如果不指定该选项, Monkey 将不会被延迟,事件将尽可能快地被产成。所以我建议还是加入一定的延迟,因为一般人手指头的点击速度,  是无论如何也不可能跟得上机器的点击速度的,所以我认为,如果是因为 点击太快而引起的bug,那么是可以 忽略的。

  60000
  这条命令里,是代表共计运行60000次事件流。设定这个值之前,记得结合–throttle的值,计算一下你想让它运行的时间(一般我设置的就是 让它运行一夜然后结束,第二天上班,正好来看结果).

  > C:\Users\Administrator\Desktop\tongcheng\log\moneky_12121802.txt
  这条命令的意思是,让它输出的log信息导入到桌面的moneky_12121802.txt文件里,如果不设置这句话,log信息都输出在cmd命令行里的,不方便查看,所以还是把它输入到文件里好好查看吧。

当然,还有很多其他的命令,不过这几个简单的命令,就足够我们测试使用了。

四:monkey停止条件
如果应用程序崩溃 闪退,或者有其他失控异常,或者 app不响应(ANR)。monkey将会停止并报错。否则它就会执行你设定的次数。(比如 60000次),执行完成之后才会停止。

五:如何中途停止monkey
monkey有个很让人抓狂的特点,就是一旦跑起来之后,哪怕你把usb数据线和pc断开,monkey脚本还是会淡定的执行下去。所以我们如果想中途停止,那么这里有个办法。

  1. adb shell
  2. top | grep monkey (或者 ps | grep monkey 也行)
  显示如下:
  5447 0 1% S 10 262960K 10328K root com.android.commands.monkey
  5447 0 0% S 10 262960K 10324K root com.android.commands.monkey
  3,找到id为5447的进程,然后再kill掉就OK了
  kill -9 5447

六:Monkey测试结果分析
拿到monkey的log文件,我们是通过关键字来判断测试是否正常的
1,如果最后一行内容是,Monkey finished,那么就表明本次测试过程中,没有异常发生。
eg:
## Network stats: elapsed time=3799ms (3799ms mobile, 0ms wifi, 0ms not connected)
// Monkey finished
2,表明存在异常的关键字:CRASH ,NOT RESPONDING, ANR,Exception,Out of memory,error
如果存在这些关键字,就表明测试发生了异常,我们就要结合 log的上下文,来判断 异常发生的原因,然后修改代码了。

3,非正常结束,也没有对应的异常关键字。
那么这时候,就要看看log文件的最后几行是什么内容了,进行对应的分析 ,如果分析不出来啥异常,那就说明是外部原因而非程序本身原因了。比如断电关机,内存不足等等。

七:monkey日志自动分析脚本
对于monkey的分析,手动搜索太麻烦,所以有脚本来处理是最好的。我在 http://www.cnblogs.com/findyou/p/4106285.html 这篇博客上找到一个bat脚本(再次感谢对方的分享),(不过他那篇博客的代码部分,直接复制到bat文件中,有错误,让我折腾了 好久,估计是因为编码问题吧),我把这个bat脚本,做了一点修改。放在csdn上(下载地址 http://download.csdn.net/detail/yaowen369/9759769),可以直接下载使用。
使用方法:直接将Monkey日志的txt文件,用鼠标拖到此bat文件上,就输出执行了。

八:其他问题
有个问题困扰了我好久,因为app代码中有部分h5页面,monkey测试有时候可能会进入这些html页面,进入容易, 跳出就很难了,也找不到更好的解决办法,只能在代码中添加一个 MONKEY_TEST 的boolea值开关,然后在进入h5页面的button按键事件时进行判断,进行 monkey测试时打开这个值,专门编译一个apk,就可以避免其跳入h5页面了。

希望这篇博客能够帮助到使用monkey测试的同行们,文中有什么不足或错误的地方,欢迎批评指正。

-------
作者: www.yaoxiaowen.com
github: https://github.com/yaowen369

android之monkey测试相关推荐

  1. Android 自动化测试——Monkey测试

    2019独角兽企业重金招聘Python工程师标准>>> 1.Monkey测试简介 Monkey主要应用在压力和可靠性测试上,运行该命令可以随机地向目标程序发送各种模拟键盘事件流,并且 ...

  2. Android软件测试Monkey测试工具

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

  3. Android 的monkey测试及排错步骤

    1. 环境准备:1.开启eclipse,并显示到Logcat界面:2.开启模拟器:3.进入shell,准备Monkey测试:4.准备两把屏幕尺子(方便找到测试时找到的点及一些动作的变化):2. 开始测 ...

  4. Android的Monkey测试

    (1)名词和原理 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力 ...

  5. android测试之monkey测试

    1.首先安装SDK包 2.配置环境变量 3.打开CMD命令窗口,查看是否安装成功 命令:adb version 4.要做monkey测试的安卓包名,获取方式如下(必须启动要获取报名的app) 1.ad ...

  6. Android 为何Monkey测试后不能关机

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  7. 行意天下正文 Android Day02-Android中单元测试(junit测试)monkey测试

    Android中junit测试有2种实现方式 第1种:一般Android工程的实现方式 1.在清单文件中添加2项内容 首先在AndroidManifest.xml中加入下面红色代码: <mani ...

  8. Android App压力测试(Monkey和ADB)

    压力测试简介 压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分.压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试.通常 ...

  9. android服务器压力测试,Android压力测试Monkey工具

    最近在Android程序测试过程中接触到了自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey.Monkeyrunner其它test t ...

最新文章

  1. win7中安装mysql_windows7下安装Mysql5.6数据库图文教程(压缩包安装)
  2. python自动化办公入门书籍推荐-好书推荐 | Python 如此神奇,让繁琐工作自动化...
  3. PHP获取IP地址所在的地理位置
  4. 《剑指offer》和为s的连续正数序列
  5. 设计模式学习笔记——工厂(Factory)模式
  6. Spring基于注解的方式一
  7. 目标检测(8):CenterNet-Objects as Points-将目标建模为边界框中心点的方法
  8. Win10更改系统背景颜色(设置护眼模式)
  9. 使用GenyMotion模拟器+抓包工具SRSniffer分析网络请求
  10. 有手就行:零基础渗透网站步骤
  11. Android锁屏壁纸 代码,android 锁屏壁纸和桌面壁纸的设置实现
  12. 求职必看:后端工程师就业公司选择解析
  13. 数据挖掘项目(一)Airbnb 新用户的民宿预定结果预测
  14. python的撤销和回退_撤销和回退
  15. 打怪小游戏 勇者打恶龙1.1
  16. 苹果企业证书_IOS_苹果企业签名_企业签名的圈外证书 拒绝频繁掉签!
  17. python井字棋游戏大作业实验报告_Part 1.2 - 实现一个井字棋游戏的gym环境
  18. 学计算机专业的打字要快么,怎样学电脑打字最快电脑新手如何快速学会打字
  19. 质安码区块链直推新零售通过线上线下资源整合,实现信息传递的最大化
  20. wargame v2.1 Web Wrtteup By Assassin

热门文章

  1. 三菱melsec-a系列plc的指令与编程_三菱Q系列PLC定时器、计数器结构化编程基础
  2. python按位处理二进制文件_对如何在python shell中对16位二进制数执行按位运算感到困惑...
  3. python重写和重载的区别_Java 重写(Override)与重载(Overload)
  4. 查询MySQL中某个数据库中有多少张表
  5. IntelliJ IDEA 快捷键 Windows
  6. 鼠标悬浮显示全部内容 不然隐藏部分内容
  7. 安卓app开发工具_手机APP开发会涉及到哪些知识点呢?
  8. math库是python语言的数学模块_Python入门-函数库(模块)
  9. pca百分比取多少比较好_欧式家具沙发价格是多少?沙发怎么护理会比较好?
  10. 辅助驾驶等级_BBA霸榜、特斯拉折戟 E-NCAP辅助驾驶评测结果公布