- Monkey是Android SDK提供的一个命令行工具,可以简单方便的发送伪随机的用户事件流,对Android APP做压力(稳定性)测试。主要是为了测试app是否存在exception,error,crash,nar等情况。目前在某些Android应用平台,新版app发布时,平台会执行monkey,如果有crash等相关问题,会被打回。
安装sdk后,可在命令行通过 adb shell monkey 查看可用命令
2.monkey常用参数说明:
<colgroup><col><col></colgroup>
| 基本参数 | 说明 |
| -p <allowed-package-name> | 指定一个或多个包 |
| -s <seed> | 指定一个随机数生成器的seed值 |
| --throttle <milliseconds> | 指定事件之间的固定延迟(ms) |
| -v | 指定反馈信息级别(信息级别就是日志的详细程度) |
| -c <main-category> | 指定一个或多个类别名 |
| -f <scriptfile> | 运行指定的monkey脚本 |
<colgroup><col><col></colgroup>
| 事件参数 | 说明 |
| --pct-touch <percent> | 指定触摸事件百分比 |
| --pct-motion <percent> | 指定动作事件百分比 |
| --pct-trackball <percent> | 指定轨迹事件百分比 |
| --pct-syskeys <percent> | 指定系统按键事件百分比 |
| --pct-nav <percent> | 指定基本导航事件百分比 |
| --pct-majornav <percent> | 指定主要导航事件百分比 |
| --pct-appswitch <percent> | 指定应用启动事件百分比 |
| --pct-flip <percent> | 指定flip(弹)事件的百分比 |
| --pct-anyevent <percent> | 指定其他类型事件百分比 |
| --pct-pinchzoom <percent> | 指定缩放(捏)事件百分比 |
| --pct-permission <percent> | 指定 |
<colgroup><col><col></colgroup>
| 调试参数 | 说明 |
| --ignore-crashes | 忽略因崩溃或异常引起的停止运行 |
| --ignore-timeouts | 忽略应用发生超时错误(ANR) |
| --ignore-security-exceptions | 忽略应用发生任何权限错误 |
| --monitor-native-crashes | 监视并报告monkey运行时native code的崩溃事件 |
| --ignore-native-crashes | 忽略因native code的崩溃事件 |
| --kill-process-after-error | 在应用出错后通知系统杀死发生错误的进程 |
| --hprof | 在事件序列前后立即生成profilfing report |
| --dbg-no-events | 监视应用程序所调用的包之间的转换 |
| --wait-dbg | 暂停执行中的monkey,直到有调试器与它连接 |
3.使用真机环境针对皮皮Android客户端进行monkey测试
A.开启手机调试模式,通过USB连接电脑,查看是否连接成,可以使用adb devices命令
B.关闭手机下拉通知栏,锁定手机界面(视机型而定,操作方式不一样),避免测试工程中切出app,影响测试结果。
C.执行monkey测试,使用脚本命名如下,参数请参照上面参数说明理解。
adb shell monkey -p com.chudiangameplay.android -s 10086 --pct-touch 70 --pct-motion 30 --ignore-crashes --ignore-timeouts --monitor-native-crashes --throttle 200 -v -v -v 50000 >D:\monkeylog\20200525.log
4.日志分析
日志分析可手动在日志中搜索crashes 、crashes 、error等内容,查看对应区域日志。
日志量较大,可使用如下提供的bat脚本,分析对应日志文件。
@ECHO OFF
ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
ECHO.:: 分析Monkey日志 ::
ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
REM 方法一:手动设置Monkey日志路径
SET monkeyLogFile=D:\monkeylog\20200525.log
REM 方法二:直接将Monkey日志拖到此bat文件上
IF NOT "%1"=="" SET monkeyLogFile=%1
ECHO.[ INFO ] Monkey日志: %monkeyLogFile%
ECHO.[ INFO ] 开始分析
SET blnException=0
ECHO.
ECHO.
::ANR日志
FOR /F "delims=" %%a IN ('FINDSTR /C:"ANR" %monkeyLogFile%') DO (
SET strANR=%%a
)
::崩溃日志
FOR /F "delims=" %%a IN ('FINDSTR /C:"CRASH" %monkeyLogFile%') DO (
SET strCRASH=%%a
)
::异常日志
FOR /F "delims=" %%a IN ('FINDSTR /C:"Exception" %monkeyLogFile%') DO (
SET strException=%%a
)
::正常
FOR /F "delims=" %%a IN ('FINDSTR /C:"Monkey finished" %monkeyLogFile%') DO (
SET strFinished=%%a
)
IF NOT "%strANR%" == "" (
ECHO.[ INFO ] 分析Monkey日志存在: ANR
ECHO.[ INFO ] ------------------------------------
ECHO. "%strANR%"
SET /a blnException+=1
ECHO.
)
IF NOT "%strCRASH%" == "" (
ECHO.[ INFO ] 分析Monkey日志存在: CRASH
ECHO.[ INFO ] ------------------------------------
ECHO. "%strCRASH%"
SET /a blnException+=1
ECHO.
)
IF NOT "%strException%" == "" (
ECHO.[ INFO ] 分析Monkey日志存在: 异常
ECHO.[ INFO ] ------------------------------------
ECHO. "%strException%"
SET /a blnException+=1
)
IF NOT "%strFinished%" == "" (
ECHO.[ INFO ] 分析Monkey日志存在: 执行成功标记
ECHO.[ INFO ] ------------------------------------
ECHO. "%strFinished%"
ECHO.
) ELSE (
IF %blnException% EQU 0 ECHO.[ INFO ] 分析Monkey日志结果: Monkey执行异常中断,请重新执行Monkey脚本!
ECHO.
)
REM 如果blnException不为0,说明存在异常,改变字体为淡紫色
IF %blnException% NEQ 0 (
Color 0D
ECHO.[ INFO ] 分析Monkey日志结果:存在异常日志,请手工再仔细检查!
ECHO.
) ELSE (
ECHO.[ INFO ] 分析Monkey日志结果:正常
ECHO.
)
ECHO.
ECHO.[ EXIT ] 按任意键关闭窗口...
PAUSE>nul