前言:一般是功能测试完成后或者测试后期会进行Monkey测试

一、Monkey测试简介

          Monkey意指猴子,顾名思义也就像猴子一样在软件上乱敲按键;Monkey测试是Android自动化测试的一种手段,是Android提供的一个运行在手机上的一个程序,用来伪随机地模拟点击和触摸等用户事件。Monkey可以用于对应用程序进行随机和重复的压力测试。通过统计Monkey连续无故障运行的时间,可以衡量软件稳定性。

          Monkey测试本身非常简单,就是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常。

二、Monkey参数说明

     •adb shell monkey [options]

         我们需要通过电脑端cmd命令行或脚本来启动Monkey。由于Monkey运行在模拟器或真实设备环境中,所以必须用其环境中的shell来进行启动。可以通过在每条命令前加上adb shell来达到目的,也可以进入shell后直接输入Monkey命令。

     如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:

          例如: adb shell monkey -p com.xxxx.xxx(待测app包名)  -v 500

    •-p <allowed-package-name>

             如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。如果你的应用程序还需要访问其它包里的Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个 -p选项,每个-p选项只能用于一个包。

   •-v

       命令行的每一个-v将增加反馈信息的级别

Level 0(缺省值)除启动提示、测试完成和最终结果之外,提供较少信息。

Level 1提供较为详细的测试信息,如逐个发送到Activity的事件。

Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity事件。

  例如:monkey -p com.xxx.xxx --ignore-crashes --ignore-timeouts  --throttle 500 -v -v -v 3700000 > /sdcard/Monkeylog_`date +%Y%m%d%H%M`.txt 2>&1 &

   •--ignore-crashes

        指定了此选项,待测应用崩溃或发生异常时,继续发送系统消息,直到指定个数的消息全部发送完毕,否则停止运行
   •--ignore-timeouts

        指定了此选项,待测应用停止响应(如弹出“应用无响应”对话框)时,继续发送系统消息,直到指定个数的消息全部发送完毕,否则停止运行

    •--throttle <milliseconds>

         在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定该选项,Monkey将不会被延迟,事件将尽可能快地被产成。

    •--pct-touch <percent>

            调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)   

    •-s <seed>

             伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件序列。

        例如: adb shell monkey -p com.xxxx.xxx --throttle 750 --pct-touch 50  -v -s  3000 200000 > D:\monkey_log.txt

三、Monkey测试目的

2.1  用于App压力稳定性测试

常见的问题如:ANR:(Application Not Responding) 无响应;

                         CRASH:崩溃,程序闪退等非正常退出;

2.1.1 环境准备

         手机保持充电状态

        手机保持不熄屏(设置-开发人员选项-保持唤醒状态-开启);

        手机设置--显示和亮度-休眠:10分钟后

        手机中尽量不要插入SIM

        通知栏最好不要有通知消息  (注:可能误触跳转到非待测应用中)

2.1.2 进入shell环境后,执行命令

       示例: monkey -p com.xxxx.xxx --ignore-crashes --ignore-timeouts --ignore-native-crashes --throttle 500 -v -v -v 3700000 > /sdcard/Monkeylog_`date +%Y%m%d%H%M`.txt 2>&1 &

2.1.3 停止Monkey

方法:强制长按电源(power)键重启

2.1.4 Monkey日志路径 

日志路径和名称根据你喜好自己设定,示例中是放在/sdcard中,日志名称是Monkeylog_年月日时分秒

补充说明:

        2>&1  表示把所有的输出都输出到前面的日志文件中;

        最后一个&  表示把条命令放到后台执行;

2.2  用于手机整机稳定性测试

2.2.1 环境准备

         手机保持充电状态

        手机保持不熄屏(设置-开发人员选项-保持唤醒状态-开启);

        手机设置--显示和亮度-休眠:10分钟后

        手机中尽量不要插入SIM卡 (注:否则可能会呼出电话)

        打开手机设备日志开关,如:荣耀手机(在拨号盘输入 *#*#2846579#*#* -->后台设置-->APLOG设置-->打开)

2.2.2 命令

         adb shell “monkey  --ignore-crashes  --ignore-timeouts --ignore-security-exceptions  --pct-trackball 0 --pct-nav 0 --pct-majornav 0 --pct-anyevent 0  -v -v -v --throttle 500 1200000000 > /sdcard/monkeysys.log 2>&1 &”

补充说明:

 --pct-trackball 0 --pct-nav 0 --pct-majornav 0 --pct-anyevent 0 这些是设定轨迹球,导航按键(上下左右) ok按钮、返回按钮、menu按钮这些在操作中占的比例为0;

 1200000000 是总的次数

-v 表示monkey反馈log信息级别(3个-v这个级别的反馈信息最详细))

2.2.3 停止Monkey

方法:强制长按电源(power)键重启

2.2.4 Monkey日志路径

  /sdcard

注:Monkey测试一般是在下班前挂上,然后第二天来上班再导出日志;

四、Monkey日志定位问题步骤

4.1 将日志导出到本地

4.1.1 在cmd命令行中输入adb shell,进入shell环境

   进入到/sdcard目录,然后执行导出命令

         adb pull /sdcard/monkeysys.log D:\log\Monkeylog

4.2  搜索关键词

        用文档编辑器(如:Notepad++)打开日志,然后在monkeysys.log日志文件搜索关键词anr、crash等,点击搜索结果,可以定位到发生anr、crash的详细堆栈信息

注:搜索结果中标记黄色的是关键词,前面几个是我们命令中的参数,不是报错信息哈~

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐