Monkey学习心得

简介

Monkey是Android系统自带的一款测试工具,通过它可以产生一些随机事件(例如,触摸、滑动、 按键等)来对设备中的app进行压力测试,以此来检测程序是否会发生异常(Crash、ANR)。

使用

1.monkey参数
可以通过官网Monkey介绍或者命令行查看一些可选参数,命令行输入:

adb shell monkey

如果有多个设备,可以通过指定某个设备来查看,例如:adb -s 123456 monkey (这里假设设备号为123456,设备号可通过adb devices来查看)
这里写图片描述
2.基本使用
2.1 通过参数-p指定某个app

adb shell monkey -p com.mvp.demo --throttle 100 -s 99999 -v -v -v 100000 > monkey_test.txt

参数说明:

  • -p com.mvp.demo:指定要测试的包名为com.mvp.demo的app (-p可以用多次,表示指定测试的app有多个)
  • –throttle 100:指定每次操作间隔100ms
  • -s 99999:表示生成一个随机事件的种子,可以指定一个值,使得每次执行的操作都是一样的,用于复现问题
  • -v:表示monkey所产生的的log的信息类别,可以指定1-3个,3个表示log信息最全面
  • 100000:表示要执行的随机事件数
  • monkey_test.txt:将log生成到monkey_test.txt文件里

2.2 通过参数–pkg-whitelist-file指定要测试的app

adb shell monkey --pkg-whitelist-file /sdcard/whitelist.txt --throttle 100 -s 99999 -v -v -v 1000

参数说明:

  • –pkg-whitelist-file /sdcard/whitelist.txt:指定要测试所有在whitelist.txt文件中列出的app
    注意:/sdcard/whitelist.txt–>需要放到设备中,如果设备目录中没有,需要先push进去
  • 其它参数与2.1一样

whitelist.txt内容格式如下:

com.mvp.demo
com.mvp.demo1

2.3 通过参数–pkg-blacklist-file 指定不需要测试的app
备注:此参数适合手机厂商

adb shell monkey --pkg-blacklist-file /sdcard/blacklist.txt --throttle 100 -s 99999 -v -v -v 1000

参数说明:

  • –pkg-blacklist-file /sdcard/blacklist.txt:指定过滤掉在whitelist.txt文件中列出的app
    注意:/sdcard/blacklist.txt–>需要放到设备中,如果设备目录中没有,需要先push进去
  • 其它参数与2.1一样

blacklist.txt内容格式如下:

com.mvp.demo
com.mvp.demo1

2.4 –pkg-blacklist-file和–pkg-whitelist-file不能同时使用

3.使用进阶

3.1 参数: –pct-{+事件类别}{+事件类别百分比}
用于指定每种类别事件的数目百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比),实际项目中可根据需要调整,如果点击事件多,则可以加大点击事件类型的百分比。

  • –pct-rotation {+百分比}
    调整屏幕横竖屏切换的百分比。
adb shell monkey -p com.mvp.demo --pct-rotation 10 1000
  • –pct-touch {+百分比}
    调整触摸事件的百分比(触摸事件是指在屏幕某处按下并抬起的操作)
adb shell monkey -p com.mvp.demo --pct-touch 10 1000
  • –pct-motion {+百分比}
    调整手势事件的百分比(手势事件是指在屏幕的某处按下、随机移动、抬起的操作,即直线滑动操作)
adb shell monkey -p com.mvp.demo --pct-motion 20 1000
  • –pct-syskeys {+百分比}
    调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)
adb shell monkey -p com.mvp.demo --pct-syskeys 60 1000
  • –pct-appswitch {+百分比}
    调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
adb shell monkey -pcom.mvp.demo --pct-appswitch 70 1000
  • –pct-pinchzoom {+百分比}
    调整二指缩放事件的百分比(二指缩放事件是指在屏幕上的两处同时按下,并同时移动,最后同时抬起的操作,即智能手机上的放大缩小手势操作)
adb shell monkey -p com.mvp.demo --pct-pinchzoom 20 1000
  • –pct-trackball {+百分比}
    调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击。现在的手机几乎没有轨迹球,但是轨迹球事件包含曲线滑动操作,如果被测程序需要曲线滑动时可以选用此参数)
adb shell monkey -p com.mvp.demo --pct-trackball 30 1000
  • –pct-nav {+百分比}
    调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成,由于现在很少手机带键盘的,因此用的较少)
adb shell monkey -p com.mvp.demo --pct-nav 40 1000
  • –pct-majornav {+百分比}
    调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)
adb shell monkey -p com.mvp.demo --pct-majornav 50 1000
  • –pct-anyevent {+百分比}
    调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等
adb shell monkey -p com.mvp.demo --pct-anyevent 100 1000
  • 指定多个类型事件的百分比:
adb shell monkey -p com.mvp.demo --pct-anyevent 50 --pct-appswitch 50 1000
  • 注意:各事件类型的百分比总数不能超过100;

3.2 参数–ignore-crashes:
用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件(重新运行app来测试),直到事件计数完成。

adb shell monkey -p com.mvp.demo --throttle 100 --ignore-crashes -s 99999 -v -v -v 1000 > monkey_test.txt

3.3 参数–ignore-timeouts:
用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。

adb shell monkey -p com.mvp.demo --throttle 100 --ignore-timeouts -s 99999 -v -v -v 10000 > monkey_test.txt

3.4 参数–ignore-security-exceptions:
用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。

adb shell monkey -p com.mvp.demo --throttle 100 --ignore-security-exceptions -s 99999 -v -v -v 10000 > monkey_test.txt

3.5 参数–kill-process-after-error:
用于指定当应用程序发生错误时,是否停止其运行。如果指定此参数,当应用程序发生错误时,应用程序停止运行并保持在当前状态(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程),但是实际测试,保持的时间比较短。

adb shell monkey -p com.mvp.demo --throttle 100 --kill-process-after-error -s 99999 -v -v -v 10000 > monkey_test.txt

3.6 参数–monitor-native-crashes:
用于指定是否监视并报告应用程序发生崩溃的本地代码。

adb shell monkey -p com.mvp.demo --throttle 100 --monitor-native-crashes -s 99999 -v -v -v 10000 > monkey_test.txt

3.7 参数-f
常规monkey测试执行的是随机的事件流,但是可以通过-f指定脚本来执行固定事件。

Monkey脚本只能通过坐标的方式来定位点击和移动事件的屏幕位置,因此需要提前获取坐标信息,相当于Monkey的局限吧。

Monkey自定义脚本的编写模板:

#启动测试
type = user
#脚本执行次数,但是由于Monkey命令本身可以指定执行次数,所以这里的设置是不生效的
count = 10
#命令执行速率,速率也可以通过Monkey命令设置,这里的设置是不生效的
speed=1.0
#以下为Monkey命令
start data>>
#启动要启动的应用,pkg_name表示包名,cl_name表示Activity名
LaunchActivity(pkg_name, cl_name)
#模拟按键点击
DispatchPress(KEYCODE_HOME)

可参考Monkey详解(脚本篇—Monkey API)
3.8 参数-hprof
查看Monkey执行过程是否存在内存泄漏。

4. Monkey日志结果分析

4.1 正常结束
查看log最后面,可以看到

  // Monkey finished

表示正常结束,此次测试没有检测到异常
4.2 异常终止

** Monkey aborted due to error.

在日志的最后,如果出现这个,表示出现异常。
异常分类:crash和ANR
在日志信息中搜索:CRASH ,如果是crash会出现以下语句

省略...
// CRASH: com.mvp.demo (pid 10329)
省略...

在日志信息中搜索: NOT RESPONDING ,如果是ANR会出现以下语句

省略...
// NOT RESPONDING: com.mvp.demo (pid 13217)
ANR in com.mvp.demo(com.mvp.demo/com.mvp.demo.activity.UserLoginActivity)
省略...

4.4 其它
更详细的分析,请参考Android之monkey Test,Monkey测试中的黑名单和白名单,Monkey测试中的黑名单和白名单

4.5 使用bat脚本统计
创建一个后缀为.bat的文件,例如:monkey_report.bat,其内容如下:

@echo off&setlocal enabledelayedexpansion
:设置所有Monkey日志存放的目录,根据实际修改成自己存放Monkey的目录
set ff=E:\log\*.txt
:设置查询关键字
set str=CRASH crash ANR died
:设置保存查询结果的文件
set fileName=Result.txt
:开始查询
echo 正在统计&echo;
echo %date% %time% >%fileName%
echo.>>%fileName%
echo 分析结果:>>%fileName%
echo ---------------------------------------------------->>%fileName%
:依次打开目录下每一个Monkey日志查询关键字并输出个数
(for %%a in (%str%)do (
    set n%%a=0&set /p= %%a : <nul>con
    for /f "delims=" %%b in ('findstr "%%a" "%ff%"') do (
        set h=%%b
        call :yky %%a
    )
    echo !n%%a!>con
    echo 关键字 %%a 共有 !n%%a! 处
))>>%fileName%

echo.>>%fileName%
:针对崩溃的日志输出其所在文件行数
echo 崩溃日志: >>%fileName%
findstr "%str%" "%ff%">>%fileName%
echo &pause&exit
:yky
set /a n%1+=1
set h=!h:*%1=!
if defined h if not "!h:*%1=!"=="!h!" goto :yky

执行bat脚本后,会生成一个Result.txt文件,其内容如下:
未崩溃,正常结束的内容:

2018/05/04 周五 10:43:44.85 

分析结果:
----------------------------------------------------
关键字 CRASH 共有 0 处
关键字 crash 共有 0 处
关键字 ANR 共有 0 处
关键字 died 共有 0 处

崩溃日志: 

发生崩溃的内容如下:

2018/05/04 周五 11:29:37.32 

分析结果:
----------------------------------------------------
关键字 CRASH 共有 3 处
关键字 crash 共有 0 处
关键字 ANR 共有 0 处
关键字 died 共有 0 处

崩溃日志: 
E:\log\monkey_test.txt:// CRASH: com.mvp.demo (pid 10678)

E:\log\monkey_test.txt:// CRASH: com.mvp.demo (pid 10785)

E:\log\monkey_test.txt:// CRASH: com.mvp.demo (pid 10829)

5. Monkey功能扩展
主要是通过二次开发Monkey,来达到扩展。局限:需要重新编译打包,而且不同Android版本的Monkey不通用,不利于做版本适配。

参考

1.Android Monkey基础测试命令整理
2.Android之monkey Test,Monkey测试中的黑名单和白名单,Monkey测试中的黑名单和白名单
3.Android命令Monkey压力测试,详解
4.Monkey详解(脚本篇—Monkey API)

猜你喜欢

转载自blog.csdn.net/fengyulinde/article/details/80112168