Monkey测试系列:1. Monkey入门

什么是Monkey测试

顾名思义,Monkey就是猴子,Monkey测试,就像一只猴子,在电脑面前,乱敲键盘在测试。猴子什么都不懂,只知道乱敲,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。

  1. Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar;
  2. Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey;
  3. Monkey 命令启动方式:
    a)可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试
    b)在PC上adb shell 进入Android系统,通过执行 monkey {+命令参数} 来进行Monkey 测试



Monkey测试有什么作用

压力测试



Monkey测试常用命令

使用命令行 adb shell monkey 就可以查看monkey的所有可用命令了

先来一个简单的命令:

# 以后打monkey命令之前,都默认先打了adb shell命令
adb shell

# 对手机点击1000次,不限制应用
monkey 1000



限制应用:-p

# 限制在 设置 这个应用里面做monkey测试
monkey -p com.android.settings 1000



设置点击事件的间隔为50ms

monkey -p com.android.settings --throttle 50 1000



设置测试过程中输出log的位置

#输出到手机上
adb shell
monkey -p com.android.settings 2>/sdcard/error.txt 1>/sdcard/info.txt 1000

#输出到电脑上,手机必须要用usb线连接着电脑
adb shell monkey  -p com.android.settings 2>/Users/guangmomo/Desktop/Test/error.txt 1>/Users/guangmomo/Desktop/info.txt 1000

注意到:当先启动adb shell命令的时候,log会输出到手机上;否则是输出到电脑上




停止Monkey

adb shell

#查看monkey的进程id
ps | grep monkey

#根据pidnum来杀死进程
kill pidnum




程序在测试过程中发生异常时,你不希望终止测试可以选用以下参数

#忽略崩溃
--ignore-crashes

#忽略ANR
--ignore-timeouts

#忽略证书或认证异常
--ignore-security-exceptions

#忽略本地代码发生的崩溃
--ignore-native-crashes





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

monkey -v 1000

可以看到输出的日志如下:

Monkey的日志输出有3个级别:默认的-v是level 0,-v-v日志级别为level 1,-v-v-v日志级别为level 2。日志的级别越高,其详细程度也越高。为了方便问题的定位,将日志级别设置为level2。





使用--throttle参数来控制Monkey每个操作之间的时间间隔

#每个操作之间间隔50ms
monkey --throttle 50 1000




Monkey可以随机注入11种事件,Monkey通过这11大事件来模拟用户的常规操作

这里写图片描述

0:触摸事件百分比,即参数--pct-touch
1:滑动事件百分比,即参数--pct-motion
2:缩放事件百分比,即参数--pct-pinchzoom
3:轨迹球事件百分比,即参数--pct-trackball
4:屏幕旋转事件百分比,即参数--pct-rotation
5:基本导航事件百分比,即参数--pct-nav
6:主要导航事件百分比,即参数--pct-majornav
7:系统事件百分比,即参数--pct-syskeys
8:Activity启动事件百分比,即参数--pct-appswitch
9:键盘翻转事件百分比,即参数--pct-flip
10:其他事件百分比,即参数--pct-anyevent

我们还可以控制事件注入的比例

#将系统事件的比例提升到10%
monkey -p com.android.settings --throttle 50 --pct-syskeys 10 1000




使用-s参数来指定命令执行的seed值
Monkey会根据seed值来生成对应事件流,同一个seed生成的事件流是完全相同的。这里指定了seed值,是为了测试发现问题时,便于进行问题复现。




Monkey测试策略

  1. 使用 --throttle 来控制事件间隔
    指定操作之间的时间间隔,一方面是希望能更接近用户的操作场景,正常用户操作都会有一定的时间间隔;另一方面也是不希望因为过于频繁的操作而导致系统崩溃,尤其是在比较低端的手机上执行测试时。因此通过–throttle设置Monkey每个操作固定延迟0.4秒。

  2. 使用 --ignore-crashes --ignore-timeouts
    在执行Monkey测试时,会因为应用的崩溃或没有响应而意外终止,所以需要在命令中增加限制参数–ignore-crash和–ignore-timeouts,让Monkey在遇到崩溃或没有响应的时候,能在日志中记录相关信息,并继续执行后续的测试。

  3. 修改注入事件的比例
    比如增加–pct-syskeys的比例,这样就可以增加触发返回键的比例,避免monkey测试长时间停留在一个界面,增加monkey覆盖的界面范围。

  4. 指定要启动的Activity
    如果没有指定的activity,那么就会启动含有 Intent.CATEGORY_LAUNCHER 或 Intent.CATEGORY_MONKEY 的activity。可以使用 -c 来指定启动一个Activity,该activity必须至少包含一个指定的category,才能被启动,否则启动不了。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章