测试软件稳定性、健壮性之Monkey工具--简洁与深入


搭建环境这章节没做详细说明,因为我是前期做APP自动化是已经将 SDK 以及JDK给安装配置好了,这次是直接上来演示monkey的功能点以及运用

一、什么是稳定性测试?

通过随机点击屏幕一段时间,看看app会不会奔溃,能不能维持正常运行

二、Monkey是什么?

Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行测试,检测程序多久的时间会发生异常。和MonkeyRunner几乎是完全不同的,MonkeyRunner相当于是搞自动化测试的了

三、Monkey测试是什么?

Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法;
它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试

四、Monkey的介绍

Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar

Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey

Monkey 命令启动方式

a. 可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试

b. 在PC上adb shell 进入Android系统,通过执行monkey {+命令参数} 来进行Monkey 测试

c. 在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器

五、Monkey架构

六、monkey测试优缺点?

缺点:Monkey测试有部分缺陷,我们无法准确地得知重现步骤,虽然可以根据一个指定的命令脚本发送按键消息,但不支持条件判断,不支持读取待测界面的信息来执行验证操作
优点:模拟用户随机性的多次点击面前是否会闪退或者崩溃;

七、monkey测试常用命令

1、日志详细程度
-v : 最简单(默认),除了启动、测试完成和最终结果外只提供较少的信息。
-v -v : 提供了较为详细的测试信息,如逐个发送到Activity的事件信息
-v -v -v : 提供了更多的设置信息,如测试中选中或未选中的Activity信息 比较常用的是-v -v -v,一般会保存到指定文件中供开发人员查找bug原因时使用

2、-s(随机数种子) 指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
一般用在发现bug或需要重现 示例: monkey测试1:adb shell monkey -p test .control.com –s 10

3、–throttle <毫秒>
指定用户操作(即事件)间的时延,单位是毫秒;如果不指定这个参数,monkey会尽可能快的生成和发送消息。 示例:eg:adb shell
monkey --throttle 3000 -p test .control.com 1000
发送1000次随机事件,每次事件间隔为3秒。

4、-p <允许的包名列表>
用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果不指定包,monkey将允许系统启动设备中的所有app。

5、–ignore-security-exception
作用:通常情况下,指定应用程序发生许可错误时(如证书许可,网络许可等),monkey将停止运行。若指定了该参数,即使应用程序发生许可错误,monkey会继续向系统发送事件,直到指定事件全部运行完毕。

6、–ignore-timeouts 作用:通常,应用程序发生任何超时错误(如“Application Not
responding”对话框)Monkey将停止运行,设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

7、–ignore-crashes
作用:通常,应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

8、–pct-touch
作用:调整触摸事件的百分比.(触摸事件是指在屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作)比如一个应用80%的操作都是触摸,那就可以将此参数的百分比设置成相应较高的百分比。如触摸返回、触摸签到等

9、–pct-motion
调整motion事件百分比。(motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成)也就是直线滑动事件如从左到有滑动解锁

10、–pct-trackball
作用:调整滚动球事件百分比。(滚动球事件由一个或多个随机的移动事件组成,有时会伴随着点击事件)如不规则滑动解锁

11、—pct-syskeys
按键消息比例,主页、后退、音量增减

12、–pct-anyevent
其他不常用的按键比例的设置,不常用

13、–hprof monkey
测试完成后生成内存快照,data/misc路径下生成,不常用,比较占空间

14、–ignore-security-exceptions
忽略权限问题的

15、–kill-process-after-error
当错误发生时杀进程

16、–monitor-native-crashes
监视崩溃时的本地代码

17、杀monkey进程
按键:CTRL+C

18、adb logcat >电脑磁盘路径
把日志输出到电脑磁盘上,方便查看,之前可用命令:adb logcat -c清除日志的缓存
当不需要抓取日志可按下ctrl + c 按键,停止输出日志信息

八、monkey测试命令实践

1、首先将安卓手机开发者调试工具打开,用usb数据线连接手机选择传输文件

2、使用终端命令:win + R 进入cmd窗口,然后adb devices 进行查看是否连接手机成功,返回有devices则表示连接成功

3、进行查看你所需要测试的安装包,通常会使用 adb shell pm list packages -3(查看手机上所有的第三方安装包),如果安装包太多,你还可以使用 adb shell dumpsys activity | find "mFocusedActivity" 显示当前正在运行的包名

4、按照你的测试要求输入相应的命令,我的命令是:

命令:adb shell monkey -p  包名 --throttle 1000 --ignore-timeouts --ignore-crashes -s 100 -v -v 100 0>D:\monkeylog.txt

 执行结果如下:因为我没有指定触摸事件的百分比,所以这里是随机的

 5、最后,测试完成后,找到log日志分析

日志开头:
显示本次测试seed值,执行次数,测试包

日志结尾:
先查看日志结尾处是否表明测试顺利执行完成,而不是异常中断:
如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间;Monkey finished代表执行完成。(如果Monkey执行异常中断,在log的最后也能查看到当前已执行的次数,可以比对一下。)

第一、ANR问题:程序无响应
在日志中搜索“ANR”

第二、CRASH问题:崩溃
在日志中搜索“CRASH”

第三、其他问题:
在日志中搜索”Exception”

第四、若测试中断后无法搜索到上述信息
一般都是外界原因而非程序本身原因。比如电脑异常测试中断,需要重新测试

备注:可以先详细分析monkey日志(当然,这个通常是开发去分析,但是作为测试人员,我们也应该知道怎么找出问题所在):
方法:搜索Switch–查看log中的Switch,主要查看Monkey执行的是那一个Activity,两个swtich之间如果出现了崩溃或其他异常,可以在该Activity中查找问题的所在。
Sleeping–Sleeping for 500 milliseconds这是执行Monkey测试时,throttle设定的间隔时间,每出现一次,就代表一个事件。

一般重现问题的做法:
1.找到是monkey里面的哪个地方出错
2.查看Monkey里面出错前的一些事件动作,并手动执行该动作
3.若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样

以上所述即为monkey测试,当然,具体的项目情景测试需要配合不同的命令,需要大家熟悉运用常用的指令,才可以得心应手

相关