Android测试工具-Monkey详解

Monkey详解

一 Monkey简介

Monkey是Android SDK自带的工具,其原理是利用socket通讯(Android客户端与服务器以TCP/UDP方式),模拟用户的按键输入,触摸屏输入以及手势输入
利用该工具对app进行压力测试,随机性与稳定性测试,开发人员可以结合Monkey打印的日志和系统打印的日志来分析测试的结果进行分析
测试的对象仅为应用程序包,有一定的局限性。
可对MonkeyTest的对象、事件数量、类型、频率等进行设置
Monkey测试使用的事件流数据流是随机的,不能进行自定义。
【如果需要自定义可以试试monkeyrunner工具,它是在工作站上通过API定义的特定命令和事件控制设备或模拟器。您可以写出一个Python程序去安装一个Android应用程序或测试包;运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。】

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

这样就可以通过在CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试了。

二 Monkey测试环境配置

  1. Android SDK下载及配置【已经详细介绍过,链接

  2. Mumu模拟器(网易出品)下载安装:http://mumu.163.com/

  3. 下载成功后打开并连接模拟器:
    在这里插入图片描述

  4. 查找所有的包:
    在这里插入图片描述

  5. 卸载包
    在这里插入图片描述

  6. 安装包
    在这里插入图片描述

  7. 如果在程序测试过程中,开发那边改完一阶段bug或一个严重程度级别很高的bug,我们在安装新的apk的时候不用去卸载原来的apk,只要重新安装的时候加上‘-r’参数覆盖掉原apk文件就好:
    在这里插入图片描述

三 执行Monkey

  1. 在apk放置的目录下创建一个目录,命名为’monkeylog’,用来保存monkey测试产生的日志文件,需要用日志文件进行问题分析
  2. 执行monkey测试,命令:
  adb shell monkey -p com.****包名 -s 1599897777753 --throttle 300 -v -v -v 1000 > F:\monkey\monkeylog\mon1.txt 
  1. 在包名后面加两个参数(操作事务只有点击和滑动事件)
adb shell monkey -p com.One.***包名 --pct-touch 70 --pct-motion 30 --throttle 300 -v -v -v 1000 > F:\monkey\monkeylog\mon6.txt 
  1. –pct-touch 70: ‘点击’事件占所有事件的70%
    –pct-motion 30: ‘滑动’事件占所有事件的30%
    两个加起来是100,代表不会进行其他事件操作,如轨迹事件,导航事件等等,指定这两种操作后,就极大的降低了monkey点到被测app外面的概率(触发到音量键等系统按键)
  2. -p: 指定包(指定测试的app)
    –throttle: 两个事务间的时间间隔
    -v -v -v: 日志输出等级3个v最高,1个v最低
    1000: 操作事务次数1000次

    F:\monkey\monkeylog\mon6.txt: 产生的日志文件保存到mon6.txt文件里面

  3. 测试产生了日志,最重要的是要学会分析日志  在log中搜索4种关键字加以分析: 
    1、crash 闪退  
    2、exception 异常 
    3、force closed 强制退出  
    4、anr(application no response) 程序无响应

四 常用monkey命令

 手机连上电脑检查:adb devices
 安装app:adb install+拖apk
 卸载app:adb uninstall+包名
 查看包名:aapt dump badging+apk
 杀掉adb进程:adb kill-server
 重启adb服务:adb start-server
 重启Android设备:adb reboot
 进入shell模式:adb shell
 查看文件详情/进入文件夹:cd sdcard
 列出当前文件夹目录:ls -a
 退出shell模式:exit
 Logcat日志:adb logcat|find adb logcat|grep

常用命令简单介绍

adb shell monkey -help  //获取简单帮助

adb shell monkey -p com.htc.Weather 100 //-p 约束限制 monkey程序模拟100次随机用户事件
adb shell monkey -p com.htc.Weather –p com.htc.pdfreader  -p com.htc.photo.widgets 100
adb shell monkey 100

adb shellmonkey -p com.htc.Weather –v 100 //-v 提供反馈信息,共3级
adb shellmonkey -p com.htc.Weather –v -v 100
adb shellmonkey -p com.htc.Weather –v -v –v 100


...详见Monkey命令.doc

五 Monkey测试问题分析

从日志中搜索:exception、crash、Fatal、ANR ,代表异常,崩溃,致命,程序终止。
找到错误关键后,可以分析下错误发生前的操作步骤,便于手动重现错误。也可以将测试日志给安卓开发看,便于更快更准的定位问题。

测试执行后打开测试日志,发现开头会有一个seed值,下次执行monkey测试的时候可以带上这个参数‘-s 1599897777753’,那么下次执行的时候会跟上一次的执行事务一样
:Monkey: seed=1599897777753 count=1000

测试日志中Event percentages事务百分比分别是什么事务
不同版本的Android SDK的Event percentages种类数和顺序是不一样的!

0:–pct-touch//touch events percentage触摸事件百分比(触摸事件是一个在屏幕单一位置的按下-抬起事件)
1:–pct-motion//motion events
percentage手势事件百分比(手势事件是由一个在屏幕某处的按下事件、一系列的伪随机移动、一个抬起事件组成)即一个滑动操作,但是是直线的,不能拐弯
2:–pct-pinchzoom//pinch zoom events percentage二指缩放百分比,即智能机上的放大缩小手势操作
3:–pct-trackball//trackball events
percentage轨迹球事件百分比(轨迹球事件包括一个或多个随机移动,有时还伴有点击。轨迹球现在智能手机上已经没有了,就是类似手柄的方向键一样)
4:–pct-rotation//screen rotation events percentage屏幕旋转百分比,横屏竖屏
5:–pct-nav//nav events
percentage”基本”导航事件百分比(导航事件包括上下左右,如方向输入设备的输入)老手机的上下左右键,智能机上没有
6:–pct-majornav//major nav events
percentage”主要”导航事件百分比(这些导航事件通常会引发UI的事件,例如5-way pad的中间键、回退键、菜单键)
7:–pct-syskeys//system(key) operations
percentage”系统”按钮事件百分比(这些按钮一般专供系统使用,如Home, Back, Start Call, End
Call,音量控制) 8:–pct-appswitch//app switch events
percentage启动activity事件百分比。在随机的间隔里,Monkey会执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
9:–pct-flip//keyboard flip
percentage键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回
10:–pct-anyevent//anyevents
percentage其他类型事件百分比。包括了其他所有的类型事件,如按键、其他不常用的设备上的按钮等等。

测试执行结束后,打开日志最后查看最后5行信息
Events injected: 1000
//执行事务次数:1000次

:Sending rotation degree=0, persist=false
//对屏幕旋转事件的旋转度数=0,没有执行旋转事务

:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
//丢弃的数据包:键=0,指针=0,轨迹球=0,键盘点击=0,屏幕翻转=0

Network stats: elapsed time=71424ms (0ms mobile, 0ms wifi, 71424ms not connected)
//网络统计信息:运行时间=71424ms(手机 0ms,wifi 0ms,未连接 71424ms)

// Monkey finished //monkey 测试结束

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪敏wangmin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值