怎么使用monkey对app进行稳定测试(安卓monkey测试)

最近项目组要开展稳定性测试,找了一些monkey的资料学习,在这里做个笔记吧。

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

可以通过官网来学习monkey的使用:https://developer.android.com/studio/test/monkey

当然也可以直接通过命令,查看monkey的传参构成:

怎么使用monkey对app进行稳定测试(安卓monkey测试)

monkey参数说明

monkey的基本使用:

adb shell monkey -p com.example.test --trottle 100 -s 55555 -v -v -v 10000 > monkey_test.log

对于上面使用的一些参数进行一下说明:

1.-p com.example.test :指定要测试的包名为com.mvp.demo的apk (-p可以用多次,表示指定测试的apk有多个,如果真的要多个apk,可以使用后面会提及的白名单功能);

2.--throttle 100:指定每次操作间隔100ms​ ;

​ ​3.-s 99999:表示生成一个随机事件的种子,可以指定一个值,使得每次执行的操作都是一样的,用于复现问题,如果不指定,执行的时候会随机分配一个​值;

​ ​4.-v:表示monkey所产生的的log的信息类别,可以指定1-3个,3个表示log信息最全面​;

​ ​5.100000:表示要执行的随机事件数​。这个参数和前面的--throttle一起决定了执行时间,当然每个随机时间执行肯定还是需要一点耗时的,所以只能计算出最少执行时间,实际的时间只会​更长​;

​ ​6.monkey_test.log​:表示将执行过程中的日志输出到这个指定文档中,可以是带目录的,不带目录就是​默认目录​。

​ ​然后说一下黑名单、白名单的使用方式​。

​ ​当需要对较多apk一起联合测试的时候,可以使用白名单:

--pkg-whitelist-file /sdcard/whitelist.txt:在whitelist.txt中指定需要测试apk的包名​,例如:

com.example.test
com.example.test2

​whitelist.txt这个文档需要自己push到Android里面,当然直接去android里面键一个文档​也是一样的。

当需求是除了某一些apk不参与测试,其他所有apk都要联合参与monkey测试时,可以使用黑名单​,比较适合主机厂:

adb shell monkey --pkg-blacklist-file /adcard/blacelist.txt --throttle 100 -s 55555 -v -v -v 10000 > monkey_test.log

--pkg-blacklist-file /sdcard/blacklist.txt:在blacklist.txt中指定不需要测试apk的包名,格式和​whitelist.txt一致。

​这里需要注意的是,--pkg-whitelist-file和--pkg-blacklist-file不能同时使用​。

monkey执行过程中的随机事件其实可以分成几大类,这几个大类是可以通过参数控制在总随机次数中的比例的​,参数格式:

--pct-{事件类别} {事件类别百分比}

​比如调整屏幕横竖切换的百分比:

adb shell monkey -p com.example.test --pct-rotation 10 --trottle 100 -s 55555 -v -v -v 10000 > monkey_test.log

比如调整触摸事件的百分比(触摸事件是指屏幕某处按下并抬起的操作):

adb shell monkey -p com.example.test --pct-touch 10 --trottle 100 -s 55555 -v -v -v 10000 > monkey_test.log

比如调整手势事件的百分比(手势事件是指在屏幕的某处按下、随机移动、抬起的操作,即直线滑动操作)​:

adb shell monkey -p com.example.test --pct-motion 10 --trottle 100 -s 55555 -v -v -v 10000 > monkey_test.log

比如调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)​:

adb shell monkey -p com.example.test --pct-syskeys 10 --trottle 100 -s 55555 -v -v -v 10000 > monkey_test.log

比如调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法:

adb shell monkey -p com.example.test --pct-appswitch 10 --trottle 100 -s 55555 -v -v -v 10000 > monkey_test.log

比如调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击。现在的手机几乎没有轨迹球,但是轨迹球事件包含曲线滑动操作,如果被测程序需要曲线滑动时可以选用此参数)​:

adb shell monkey -p com.example.test --pct-trackball 10 --trottle 100 -s 55555 -v -v -v 10000 > monkey_test.log

比如调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成,由于现在很少手机带键盘的,因此用的较少)​:

adb shell monkey -p com.example.test --pct-nav 10 --trottle 100 -s 55555 -v -v -v 10000 > monkey_test.log

比如调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)

adb shell monkey -p com.example.test --pct-majornav 10 --trottle 100 -s 55555 -v -v -v 10000 > monkey_test.log

比如调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等​:

adb shell monkey -p com.example.test --pct-anyevent 10 --trottle 100 -s 55555 -v -v -v 10000 > monkey_test.log

当然这些事件是可以同时指定多个的​,例如:

adb shell monkey -p com.example.test --pct-anyevent 10 --pct-appswitch 10 --trottle 100 -s 55555 -v -v -v 10000 > monkey_test.log

只要各事件类型的百分比总数不能超过100​就可以了。

还有一些忽略指定错误的命令最好有个了解,因为实际工作中monkey执行事件较久,apk比较容易遇到各种问题,monkey默认是遇到一些错误后不再执行剩下的随机事件的,这样遇到一个问题就处理一次会比较占用时间,最好是所有事件执行完,然后收集所有问题,在排查​处理。

比如用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行,当添加这个参数时,即使应用程序崩溃,Monkey依然会发送事件(重新运行app来测试),直到事件计数完成:

adb shell monkey -p com.example.test --trottle 100 --ignore-crashes -s 55555 -v -v -v 10000 > monkey_test.log

比如用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行​:

adb shell monkey -p com.example.test --trottle 100 --ignore-timeouts -s 55555 -v -v -v 10000 > monkey_test.log

比如用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行​:

adb shell monkey -p com.example.test --trottle 100 --ignore-security-exceptions -s 55555 -v -v -v 10000 > monkey_test.log

还有一些辅助用的参数,可以根据测试需要选择添加。

比如用于指定当应用程序发生错误时,是否停止其运行​:

adb shell monkey -p com.example.test --trottle 100 --kill-process-after-error -s 55555 -v -v -v 10000 > monkey_test.log

比如用于指定是否监视并报告应用程序发生崩溃的本地代码​:

adb shell monkey -p com.example.test --trottle 100 --monitor-native-crashes -s 55555 -v -v -v 10000 > monkey_test.log

我们平时使用monkey命令,用随机事件比较多,但是也可以通过参数-f来指定脚本来执行固定事件​。monkey脚本中的事件都是通过坐标来实现的,所以在指定事件时,需要提前​获取坐标信息。对于monkey自定义脚本感兴趣的同学,可以留言或者私信,这里就不展开了,因为用的的确是不多​。

monkey还可以通过参数-hprof来查看测试过程中是否存在内存泄漏​。不过Android studio的profiler也可以用来测试内存泄漏,在开发阶段其实就可以测试,没必要等到做稳定性测试的时候在去测试内存泄漏的问题​。

执行完了monkey一般都会有一份执行日志,先看日志末尾​:

//Monkey finished

如果是上面这个结尾,表示是正常结束,此次测试没有​检测到异常。

** Monkey aborted due to error.

如果是上面这个结尾,表示出现了异常​。

如果能在日志中搜索到CRASH​关键字的内容,例如:

...
// CRASH: com.example.test(pid 10086)
...

则表示执行过程中apk遇到了crash。

如果能在日志中搜索到NOT RESPONDING关键字的内容,例如:

...
// NOT RESPONDING: com.example.test(pid 10086)
ANR in com.example.test(com.example.test/com.example.test.activity.MainActivity)
...

则表示执行过程中apk遇到了ANR。​

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论