monkey--小记-1

       Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件稳定性、健壮性的快速有效的方法。下面我将对自己已知的monkey进行整理,方便以后的学习以及巩固。

      Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar。Monkey.jar程序是由一个名为“monkey”的shell脚本来启动执行,shell脚本在Android文件系统中的存放路是:/system/bin/monkey;

        在进行monkey使用前,我们需要安装及配置安卓环境,前面的文章中介绍我这里不做细说。

       之后就是对monkey 的使用,只需要在windows命令窗口中数据命令:adb shell monkey -v -p com.package.name 500  点击回车就可以对指定的程序:com.package.name(这里是你要测试APP的包名)进行500个随机事件  从而达到测试目的,下面我将对相关的一下常用参数进行整理及解释,来满足我们monkey命令的定制化。

-v                               {0,1,2}三级,-v越多,反馈信息更详细 
-s                               伪随机数生成器 
–throttle                     延迟执行速度,缺省则尽快 
–pct-touch <%>        down-up事件百分比 
–pct-motion <%>      down-[伪随机事件]-up 
–pct-trackball <%>    轨迹事件百分比, 轨迹事件为move,有时伴有点击 
–pct-nav <%>            基本导航事件百分比,上下左右 
–pct-majornav <%>   主要导航事件的百分比,5-way的中间按键,回退,菜单等 
–pct-syskeys <%>      系统按键事件的百分比 
–pct-appswitch <%>  启动activity的百分比 
–pct-anyevent <%>    其它事件的百分比 
-p                                指定启动包下面的activity (可以为多个)


     运行的过程中就会命令窗口就会一直保持,直到运行完成。基本上一个简单的monkey就算完成了,是不是觉得很简单。在做完简单的monkey测试后,我们将去思考我们为什么要去做这个测试。是为了测试软件的稳定性,那如何判断他有足够的稳定性,如果出现问题我们将如何去定位问题,那问题来了:如何定位测试过程中出现的一系列问题。

          在运行中可能会发现出现了相关错误:SYS_KEYS has no physical keys but with factor 2.0%  需要在运行命令中加入:--pct-syskeys 0   即可 如:adb shell monkey -v -p com.package.name  --pct-syskeys 0  500

           运行过程会很快,我们可以通过:--throttle 进行设定,我们为了过程简单就不设定了

      首先我们要做的就是记录日志,只有我们知道了在那里出的错,我们才能找到原因。我们可以使用命令:adb shell monkey -v -p com.package.name  --pct-syskeys 0  500  > D:\monkeytest.txt      这样我们就可以将这个日志文件打开来进行问题的一些定位。

       打开之后我们需要去读取文件中的信息,下面我会将日志中的一下信息进行解读:
第一行::Monkey: seed=1516353665423 count=500     伪随机码(可以通过这个随机码进行问题的复现)+模拟事件次数

第二行::AllowPackage: com.tencent.wecarnavi         我们需要测试的包名

第三行-第四行    默认Activity类型    是由于Activity没有设定(可以通过-c 进行设定,这里不做多的说明)

下面一段// 的是执行各动作的百分比,可以在命令中分别进行设定

:Switch:  标签后面是找到了程序启动的Activity并成功启动(如果出现问题可以进行问题定位)

:Sending Touch (ACTION_DOWN):    :Sending Touch (ACTION_UP):   代表执行了一个点击事件

:Sending Trackball (ACTION_MOVE):   代表执行了一个滑动事件

Events injected:   代表执行次数(monkey中断也会有,可以用以判断是否有异常)

elapsed time=     代表执行事件(单位毫秒)

// Monkey finished   代表执行完成

      通过上面的了解,发现这个monkey测试需要人在旁看着不然程序发送错误会导致异常停止。那我们就有出现了两个需要面对的问题:1.如何重现或者找到这个问题;2.如何将这些情况进行一个规避呢?

     先说第一个:如何复现该问题

            1.找到问题:在日志中搜索“ANR”"CRASH"“Exception”字样

            2.手工重复一下错误之前的事件动作

            3.如重复步骤无法找出可通过设定seed 的值再次执行monkey,如不能复现该问题属于偶先问题


      之后将会列出几个规避的参数来增加monkey的健壮性:

--ignore-crashes     通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。

--ignore-timeouts    通常,当应用程序发生任何超时错误(如“ApplicationNot Responding”对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。

--ignore-security-exceptions    通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。

--kill-process-after-error    通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。注意,正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态

--monitor-native-crashes    监视并报告Android系统中本地代码的崩溃事件。如果设置了--kill-process-after-error,系统将停止运行。

             到这里就完成了monkey的基础工作,之后的文章中会介绍通过.bat 脚本来完成:日志收集;日志自动化分析等操作。

猜你喜欢

转载自blog.csdn.net/qq_33668011/article/details/79093071