赞
踩
1.Monkey简介
在android的官方自动化测试领域有一只非常著名的“猴子”叫Monkey,这只猴子一旦启动,就会让被检测得Android应用程序像猴子一样活蹦乱跳,到处乱跑,人们常用这只猴子来对呗测试的程序进行压力测试,检查和评估被测试程序的稳定性。
Monkey是一个程序,运行在你的设备上,并生成随机的用户事件流,如点击,触摸或手势以及一些系统级事件,可以使用Monkey以随机但可重复的方式对你正在开发的应用程序进行压力测试
2.monkeyl的启动步骤
1)连接移动设备
2)连接成功后输入命令
命令:adb shell
3)进入到指定目录(monkey文件所在目录:system/bin)
命令:cd system/bin
4)输入命令:monkey
出现以下界面就说明是启动成功了
3.强制关闭monkey
1)adb shell ps查看全部在运行的进程
2)查找出com.android.commands.monkey进程PID
3)adb shell kill PID 杀掉monkey进程
4.monkey命令
命令格式:adb shell [options] [event-count]
[options] :是指monkey可传入的参数,是可选项(如果不指定option是,monkey将以无反馈模式启动,并把事件任意发送到安装在目录环境中的全部包)
[event-count]:是指随机发送事件数。如输入100就是执行100个伪随机事件,为必选项。
5.monkey的操作事件
1)触摸事件(–pct-touch)0
触摸事件是指在屏幕某处按下并抬起的操作,可通过–pct-touch参数来配置其事件百分比。
2)手势事件(–pct-motion)(滑屏事件)1
手势事件是在屏幕某处的按下,随机移动,抬起的操作,即直线滑动操作,可通过–pct-montion参数来配置其事件百分比
3)二指缩放事件(–pct-pinchzoom)2
二指缩放事件是指在屏幕上的两处同时按下,并同时移动,最后同时抬起的操作,即智能机上的放大缩小手势操作,可通过–pct-pinchzoom参数来配置其事件百分比
4)轨迹球(–pct-trackball)3
轨迹球事件包括一个或多个随机移动,有时还伴有点击。轨迹球现在智能手机上已经没有了,就是类似手柄的方向键一样
5)屏幕旋转事件(–pct-rotation)4
屏幕旋转时一个隐藏事件,在Android官方文档中并没有记录这个事件,它其实就是模拟手机的横竖屏切换,可通过–pct-rotation参数来配置其事件百分比
6)基本导航事件(–pct-nav)5
基本导航是指点击方向输入设备的上,下,左,右按键的操作,现在手机上很少有这几个按键,这种事件一般用的比较少,可通过–pct-nav来配置其事件百分比
7)主要导航事件(–pct-majornav)6
调整主要导航事件的百分比(如中间键、取消、确定或菜单引发的图形接口的动作)
8)系统按键事件(–pct-syskeys)7
调整系统按键事件,如:home/back/startcall/endcall以及音量控制键等
9)app切换(pct-appswitch)8
调整启动activity的百分比,在随机间隔中,执行一个startActivity()方法调用,作为一种最大化的覆盖安装包的所有的activity的方法
10)键盘事件(–pct-flip)9
键盘事件主要是一些键盘相关的操作,比如点击输入框,键盘弹起,点击输入框以外的区域,键盘收回等等。
11)其他类型事件(–pct-anyevent)10
调整其他类型的事件的百分比,比如按键或其他不太常用到的一些事件的百分比
monkey参数主要分为4大类:常规类参数,事件类参数,约束类参数,调试类参数。
1.常规类参数
常规类参数包括帮助参数和日志信息参数,帮助参数用于Monkey命令使用指导;日志信息参数将日志分为三个级别,级别越高,日志的信息越详细。
1)帮助类参数
monkey -h
tips:h是help的缩写
2)日志级别参数
adb shell monkey -v [event-count]
-v:打印出日志信息,每个v将增加反馈信息的级别,-v越多日志信息越详细,不过目前最多支持3个v,即::
adb shell monkey -v -v -v 1000
-v:0级,除启动提示,测试完成和最终结果外提供较少信息;
-v -v:1级,提供详细测试信息,如逐个发送到Activity的事件
-v -v -v:2级,提供更详细安装信息,如测试中未被选中或被选中的Activity
[event-count]:事件数
2.事件类参数
事件类参数的作用是对随机事件进行调控,从而使其遵照设定运行,如设置各种事件的百分比,设置事件生成所使用的种子值等,频率参数主要限制事件执行的时间间隔
1)执行指定脚本
命令:adb shell monkey -f [scriptfile] [event-count]
[scriptfile]是指脚本存放路径
2) 伪随机数生成种子值
使用-s命令可以重复执行之前的随机操作,本身每次执行伪随机事件操作也会默认生成一个seed值
命令:adb shell monkey -s [seed] [event-count]
3) 设置间隔,如果你希望在每一个指令之间加上固定的间隔时间,可以用–throttle(注意,前面是–)命令。
命令:adb shell monkey --throttle [milliseconds]
【milliseconds】:时间单位是毫秒为单位,表示事件之间的固定延迟(即执行每一个指令间隔的时间),若不接该选项,monkey将不会延迟
4)调整触摸事件百分比
如果你希望调整触摸事件的百分比,记住使用–pct-touch
命令:adb shell monkey --pct-touch 【事件百分比】【event-count】
*tips:-v是将日志打印出来*
3.约束类参数
1)包约束
-p:后面接一个或多个包名(packageName),如果应用需要访问其他包里德Activity,那相关的包夜需要在此同时指定,如果不指定任何包,monkey将允许系统启动全部包里的Activity。
例如:抖音的包名:com.ss.android.ugc.aweme
2)activity约束
-c:如果你希望将monkey限制在一个或几个类别中,使用如下命令:
adb shell monkey -c [activityname] [event-count]
4.调试类参数
1)应用程序崩溃后继续发送事件
如果你希望monkey在任何超时错误发生后继续发送事件,则需要用到–ignore-crashes
adb shell monkey --ignore-crashes [event-count]
设置此选项后,当应用程序发生失控异常时,monkey将继续运行直到计数完成,如果不设置此选项,脚本遇到异常则会停止运行。
还有一些其他的调试类参数,可自行百度了解。
1.测试场景
测试抖音APP Android版,测试希望通过Monkey来模拟用户操作,检查被测应用是否会出现异常(应用崩溃或者无响应)
2.需求分析
1)测试是指定应用,因此需要用-p指定被测app包名: com.ss.android.ugc.aweme
2)这个测试目的是希望模拟用户操作,因此需要让Monkey执行的事件尽可能地接近用户的常规操作,这样才可最大限度地发现用户使用过程中会出现的问题,因此需要对monkey执行的事件百分比进行调整。触摸事件和手势事件是用户最常用的操作,所以通过–pct-touch和–pct-motion将2个事件百分比调到40%和25%,目标应用包含多个Activity,为了能覆盖大部分的Activity,所以通过–pct-appswitch将Activity切换的事件比调整到10%;被检测应用在测试中出现过不少横竖屏之间切换的问题,这个场景也必须关注,因此通过–pct-rotation把横竖屏切换事件调整到10%
3)使用-s参数来指定命令执行的seed值Monkey会根据seed值来生成对应事件流,同一个seed生成的事件流完全相同的。这里指定了seed值,是为了测试发现问题时,便于进行问题复现。
4)使用–throttle参数来控制Monkey每个操作之间的间隔,因此通过–throttle设置monkey每个操作固定延迟0.4s
5)使用–ignore-crashes和–ignore-timeouts参数使monkey遇到意外时能继续执行。
6)使用-v指定log的详细级别 ,这里将日志级别设为-v-v
3.测试命令
adb shell monkey -p com.ss.android.ugc.aweme #指定被测试app的包名
–pct-touch 40 --pct-motion 25 #指定触摸事件和手势事件百分比为40%和25%
–pct-appswitch 10
–pct-rotation 10
-s 1666 --throttle 400
–ignore-crashes
–ignore-timeouts
-v -v 200
1.获取元素坐标点位置
Monkey脚本只能通过坐标的方式来定位点击和移动事件的屏幕位置
2.Monkey脚本API简介
LauncherActivity(pkg_name,cl_name):启动应用的Activity。参数:包名和启动的Activity。
Tap(x,y,tapDuration):模拟一次手指点击事件。参数:x,y为控件坐标,tapDuration为点击的持续时间
UserWait(sleeptime):休眠一段时间
DispatchPress(keyName):按键。参数:keycode。
DIspatchString(input):输入字符串。
DispatchFilp(true/false):打开或关闭软键盘
PressAndHold(x,y,pressDuration):模拟长按事件
Drag(xStart,yStart,xEnd,yEnd,stepCount):用于模拟一个拖拽操作。
PinchZoom(x1Start,y1Strat,x1End,y1End,x2Start,y2Strat,x2End,y2End,stepCount):模拟缩放手势。
3.Monkey脚本格式
Monkey脚本主要包含两部分,一部分是头文件信息,一部分是具体的monkey命令 (注意:头文件信息里面所有属性等号两边都要有空格;monkey脚本一定要是在英文状态下写的包括标点符号都要是英文状态的)
type = raw events
count = 1
speed = 1
//下面为monkey命令
start data >>
具体的monkey脚本内容
4.Monkey日志管理
保存在PC中
adb shell monkey -v -v 100 >保存路径
保存在手机上
adb shell
monkey -v -v 100 >保存手机路径
标准流和错误流分开保存
adb shell monkey -v -v 100 1>标准流路径 2>错误流路径
5.实例
运行:
1.日志管理作用
monkey日志管理是monkey测试非常重要的一个环节,通过日志管理分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和解决问题
2.monkey日志保存方法
1.保存在PC上
2.保存在手机上
3.标准流和错误流分开保存
2.1保存在PC中
命令:adb shell monkey [option] [count] >d:\monkey.txt
eg:adb shell monkey -v -v 100 >D:\monkeylog.txt
2.2保存在手机上
命令:1.adb shell
2.monkey -v 100 >/sdcard/monkeylog.txt
***注意adb shell 和第二条命令不能同时写,必须分开写
2.3标准流和错误流分开保存
标准流和错误流分开保存,代码如下:
monkey [option] [count] 1>/sdcard/monkey.txt 2>/sdcard/errolog.txt
1:表示标准流日志存放位置
2.表示错误流存放位置
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。