Monkey框架(测试方法篇) - monkey测试实例

1、常规的稳定性测试          

测试背景:
这是一个海外的合做项目,被测程序是Android应用(App)。测试但愿经过Monkey来模拟用户长时间的随机操做,检查被测应用是否会出现异常(应用崩溃或者无响应)。
测试脚本:
adb shell monkey -p com.xxx.xxx --pct-touch 40 --pct-motion 25 --pct-appswitch
10 --pct-rotation 5 -s 12358 --throttle 400 --ignore-crashes --ignore-timeouts
-v 500000
显而易见,这个Monkey测试的命令相比上一节提到的要复杂得多,主要是对一些操做事件作了限制,从而减小了Monkey伪随机化的无效操做。这体如今如下几个方面。

1)使用-p参数来制定测试应用的包名(Package)

由于被测程序是一个特定的Android应用程序,须要指定被测程序的包名。指定包名后,Monkey会根据包名找到对应的应用,并启动其main activity,而后执行Monkey测试。
技巧
查找应用包名的方法有不少,这里简单列举几个经常使用方法:
(1)经过pm命令查看。
在命令行窗口输入:
>adb shell
>pm list package
此时将列出手机上全部的应用包名,在列表中找到要测试的应用包名便可。
(2)经过查看APK源码下的AndroidManifest.xml文件。
(3)经过aapt命令查看。
(4)经过adb logcat抓取当前Android机运行的App的包名。

2)使用--pct-xxx参数限制Monkey执行的事件类型和占比

前面已经说了,这个测试的目的是但愿模拟用户操做,所以须要让Monkey执行的事件尽量地接近用户的常规操做,这样才能够最大限度地发现用户使用过程当中可能出现的问题。所以须要对Monkey执行的事件百分比作一些调整。
触摸事件和手势事件是用户最多见的操做,因此经过--pct-touch和--pct-motion将这两个事件的占比调整到40%与25%;目标应用包含了多个Activity,为了能覆盖大部分的Activity,因此经过--pct-appswitch将Activity切换的事件占比调整到10%;被测应用以前在测试中出现过很多横竖屏之间切换的问题,这个场景也必须关注,所以经过--pct-rotation把横竖屏切换事件调整到10%。

3)使用-s参数来指定命令执行的seed值

Monkey会根据seed值来生成对应事件流,同一个seed生成的事件流是彻底相同的。这里指定了seed值,是为了测试发现问题时,便于进行问题复现。

4)使用--throttle参数来控制Monkey每一个操做之间的时间间隔

指定操做之间的时间间隔,一方面是但愿能更接近用户的操做场景,正经常使用户操做都会有必定的时间间隔;另外一方面也是不但愿由于过于频繁的操做而致使系统崩溃,尤为是在比较低端的手机上执行测试时。所以经过--throttle设置Monkey每一个操做固定延迟0.4秒。

5)使用--ignore-crash和--ignore-timeouts参数使Monkey遇到意外时能继续执行

在执行Monkey测试时,会由于应用的崩溃或没有响应而意外终止,因此须要在命令中增长限制参数--ignore-crash和--ignore-timeouts,让Monkey在遇到崩溃或没有响应的时候,能在日志中记录相关信息,并继续执行后续的测试。

6)使用-v指定log的详细级别

Monkey的日志输出有3个级别:默认的是level 0, -v -v日志级别为level 1, -v -v日志级别为level 2。日志的级别越高,其详细程度也越高。为了方便问题的定位,将日志级别设置为level2。
在常规的稳定性测试中,虽然能够自定义各类事件的操做占比,但毕竟是随机事件流。在实际测试过程当中,不免会遇到Monkey点了咱们不但愿它点击的地方,好比误点了工具栏致使网络断开的状况等。当测试过程当中Wi-Fi断开时,是否有可能自动重连呢?这在后面会讲到

2、自定义脚本的稳定性测试                          

常规Monkey测试执行的是随机的事件流,但若是只是想让Monkey测试某个特定场景(执行固定的事件流)呢?这时候就须要用到自定义脚本了,Monkey支持执行用户自定义脚本的测试,用户只须要按照Monkey脚本的规范编写好脚本,存放到手机上,启动Monkey经过-f scriptfile参数调用脚本便可。
Monkey自定义脚本的编写模板如代码清单4-1所示。
代码清单4-1 Monkey自定义脚本的编写模板
#头文件,控制Monkey发送消息的参数,固定写便可
#脚本类型,通常不用更改
type=raw events
#脚本执行次数,可是因为Monkey命令自己能够指定执行次数,因此这里的设置是不生效的
count=10
#命令执行速率,速率也能够经过Monkey命令设置,这里的设置是不生效的
speed=1.0
#如下为Monkey命令
start data>>
LaunchActivity(pkg_name, cl_name)
DispatchPress(KEYCODE_HOME)
 
monkey脚本常见API
 
技巧
Monkey脚本只能经过坐标的方式来定位点击和移动事件的屏幕位置,这里就须要提早获取坐标信息。获取坐标信息的方法不少,最简单的方法就是打开手机中的开发人员选项,打开“显示指针位置”。随后,在屏幕上的每次操做,在导航栏上都会显示坐标信息
 
下面来看一个简单的例子:
这里要测试的是应用宝App,测试的操做是打开应用宝,点击输入框,输入“yyb”,点击搜索。搜索完成后,点击返回键返回应用宝首页。
首先,将在本地编写须要的测试脚本命名为monkey.script(文件格式无要求),脚本内容如代码清单4-2所示。
代码清单4-2 Monkey自定义脚本实现进入应用宝进行搜索
 
#启动测试
type = user
count = 49
speed = 1.0
start data >>
#启动应用宝
LaunchActivity(com.tencent.android.qqdownloader, com.tencent.assistant.activity.
SplashActivity)
UserWait(2000)
#点击搜索框
Tap(463,150,1000)
UserWait(2000)
#输入字母“yyb”
DispatchString(yyb)
UserWait(2000)
#点击搜索
Tap(960,150,1000)
UserWait(2000)
#点击返回键返回首页
DispatchPress(KEYCODE_BACK)
其次,将文件push到手机或模拟器的sdcard中:
>adb push monkey.script /sdcard/
最后,执行脚本:
>adb shell monkey -f /sdcard/monkey.script -v 1
 
若是须要重复执行某个脚本,只要在monkey启动命令中修改执行次数便可。例如
>adb shell monkey -f /sdcard/monkey.script -v 10
 

3、结合辅助命令,获取更多信息                        

常规测试只要记录下Monkey日志,再分析Monkey日志检查是否有异常便可。可是,不少时候,测试除了想知道执行过程是否有异常,还须要能获取执行过程当中的一些详细信息或性能数据,好比想知道Monkey执行过程当中是否存在内存泄漏,须要获取内存信息。这时候就须要借助一些辅助的命令来获取更多信息了。下面列举了几种Monkey测试中经常使用的辅助命令,使用方法也很是简单,只要在执行Monkey的同时,另起一个CMD命令行窗口输入对应命令执行便可。
❑ 获取logcat日志信息:
adb shell logcat -v time>log.txt
❑ 获取内存信息:
adb shell dumpsys meminfo <进程名>
❑ 获取CPU消耗信息:
adb shell top -n 1 |find“进程名”
❑ 获取电量信息:
adb shell dumpsys battery
❑ 获取GPU信息:
GPU信息命令:adb shell dumpsys gfxinfo <进程名>
❑ 获取流量信息:
adb shell cat/proc/uid_stat/<被测应用的uid>/tcp_rcv
技巧
如何获取被测应用的UID
步骤1:查看被测应用的进程ID(PID)
adb shell ps | grep <被测应用包名>
步骤2:查看被测应用的用户ID(UID)
adb shell cat /proc/$pid/status

4、Monkey测试策略制定思路             

前面介绍了几种常见的Monkey测试方法,但在实际项目中,选择哪一种Monkey测试策略,则须要根据实际项目的状况来作判断。主要是看测试目的及被测应用自身的特色。假如咱们想测试浏览器的双指缩放功能是否有异常,那就须要选择--pct-pinchzoom参数,调大双指缩放事件的占比进行Monkey测试;假如咱们想验证ROM的横竖屏切换功能是否正常,那就须要选择--pct-rotation参数,调大横竖屏切换事件的占比进行Monkey测试;假如咱们想验证重复某种特定操做时,应用是否会存在异常,那能够选择-f参数,自定义Monkey脚本进行验证;假如咱们想验证长时间操做时应用是否会存在内存泄漏,那就须要结合-hprof参数和dumpsys meminfo <进程名>进行Monkey测试。
总之,Monkey测试策略是须要依据测试目的和被测程序的特色来制定的。
相关文章
相关标签/搜索