本周开始启动手机输入法simeiji的自动化测试,同时开始接触手机浏览器自动化测试。接下来会对android自动化测试工具和方法做一个专题研究。

        第一篇介绍monkey测试工具。


1 自动化测试背景 
        软件测试是软件产品开发过程中的重要环节。测试对于发现软件中缺陷,保障软件的质量具有重要意义。统计表明,软件测试的时间通常占到软件开发时间的 40%,一些可靠性要求高的软件甚至高达 60%以上。 
        手工测试和自动化测试是软件测试的两种基本手段,二者相互补充,不可相互替代。其中,自动化测试能捕捉到资源冲突、多线程、死锁等手工测试难以发现的错误,可以高效的完成大量机械性、重复性测试,能模拟大量数据或大量并发用户等应用场景,从而有效的缩短软件测试周期,提高测试的可靠性及准确度。


2 什么是 Monkey 
        Monkey 测试是 Android 自动化测试的手段之一,它通过模拟用户的按键输入、触摸屏输入等,测试设备多长时间出现异常。Monkey 是一个命令行工具,可以运行在模拟器或实际设备中,通过向系统发送伪随机的用户事件流,实现对全系统或某个应用程序进行压力测试。 
        Monkey 工具使用非常简单,直接在命令窗口键入 monkey 命令即可进行测试。Monkey 命令有较多的配置选项,为便于理解这些命令,此处先将其命令选项简单划分为四大类,在后文中陆续介绍各种命令选项的使用,然后在附录中附上整个 monkey 命令选项便于查阅。
        Monkey 命令可简单分为如下四类: 

  • 基本配置选项,如设置尝试的事件数量 
  • 运行约束选项,如设置只对单独的一个包进行测试 
  • 事件类型和频率,如设置触摸屏事件的发生频率 
  • 调试选项,如设置忽略应用程序异常,继续向系统发送事件,直到计数完成

3 使用 monkey 进行自动化测试 
         Monkey 命令工具可以在模拟器和实际设备上使用。这里分别对两种环境下的 monkey 测试进行介绍。 
3.1 在模拟器上运用 Monkey 进行自动化测试 
3.1.1 monkey 命令最简单用
法 
         首先,介绍最简单 monkey 命令用法,其使用格式为如下: 
monkey  n 
其中,n 为一个整数,表示用于测试的伪随机事件发生的次数。 
如图 3.1 所示,启动模拟器。然后,在命令行窗口下输入 adb shell 命令,如图 3.2 所示。
登录 shell 之后,即可使用 monkey 命令。最简单的用法是,直接在其后面指定一个数字,表
示向系统发送事件的数量,如图 3.3 所示。模拟器的测试的结果如图 3.4 所示。




android ios自动化测试 android手机自动化测试_android ios自动化测试



3.1.2 指定测试的约束选项 
         所谓测试约束选项,即根据具体的测试需求,通过参数指定对系统的某些包或类进行测试。主要包括两类约束:包和类。 
(1) 指定测试的包 
如果需要对某一个具体的应用进行测试,可指定具体的包名。可以在系统目录/data/data
下查找对应的包名,如图 3.5 所示。



android ios自动化测试 android手机自动化测试_测试工具_02



查找到对应的包名后,使用 monkey 时可用“-p”参数进行指定,此外还可以使用“-v”
参数指定测试中反馈的信息。常用格式如下: 
monkey  –p  com.android.gallery  –v  50 
如图 3.6 和 3.7 分别为命令输入及测试过程的截图。 



android ios自动化测试 android手机自动化测试_软件测试_03



注意:每个“-p”只能指定一个包,若需指定对多个包进行测试,则要用多个“-p”参数进行指定。 
(2) 指定测试的类 
若需对某个具体类进行测试,可以使用“-c”参数指定,若需指定多个类别,则要用多个“-c”参数选项分别指定,每个“-c”只能指定一个类别。如图 3.1 所示,其使用的命令格式
为: 
Monkey  –c  android.intent.category.LAUNCHER  -v   50 
图 3.8 及图 3.9 分别为指定类测试命令输入及测试过程的截图。 



android ios自动化测试 android手机自动化测试_android ios自动化测试_04




android ios自动化测试 android手机自动化测试_软件测试_05



3.1.3 指定测试的事件类型和频率 
         Monkey 命令提供了众多选项用于指定事件的类型和发生频率, 例如触摸事件、 导航事件、轨迹事件(由一个或多个随机的移动组成,有时还伴随有点击)。有时为了测试某个具体应用,需要通过“事件”的反复发生来进行专项的功能测试,此时即可通过 monkey 的“—pct”选项来进行指定具体事件及其发生的频率。命令使用格式如下示例: 
Monkey --pct-syskeys  90  200 
以上命令表示系统按键事件的发生率为 90%,共测试 200 次,如图 3.10 及图 3.11 所示。 
注意: “pct”前面是英文输入状态下两杠“——” 。



android ios自动化测试 android手机自动化测试_测试工具_06



还可以分别指定两个事件的发生频率,命令使用方式如下所示: 


Monkey  --pct-touch 50  --pct-trackball  40  200 
以上命令表示触摸事件和轨迹事件发生概率分别为 50%和 40%,共测试 200 次,如图 3.12 和图 3.13 所示。



android ios自动化测试 android手机自动化测试_测试_07



        通过“--throttle”指定事件间的间隔,可以延缓事件的发生,如下图 3.14 所示为指定导航事件发生概率为 80%, 每次事件相隔 1 秒中发生, 共测试 200 次。 测试的效果图如 3.15 所示。



android ios自动化测试 android手机自动化测试_测试_08



3.1.4 指定测试的调试选项 
        Monkey 命令提供了若干用于控制测试过程的调试选项。例如参数“--ignore-crashes” ,将忽略应用程序崩溃或发生的任何异常,继续向系统发送事件,直到计数完成。使用命令格式如下: 
monkey  --ignore-crashes  -v 5000 
图 3.16 及图 3.17 分别显示了指定调试选项的测试及其测试过程的效果图。



android ios自动化测试 android手机自动化测试_测试_09



3.2 在开发板上运用 Monkey 进行自动化测试 
       上一节中主要介绍了用 monkey 命令工具在模拟器上进行测试, 列举了若干基本的命令使用示例。在实际的设备中,也可以方便的运用 monkey 工具进行应用程序的测试。 
       要在实际设备上进行 monkey 测试,首先需要启动 Android 系统,然后让设备通过串口与pc 相连,在 pc 上通过 SecureCRT 登录到 Android 系统的根目录下。此时,即可运用上一节介绍的各种命令对设备进行自动化测试。 
        注意, 登录到 Android 系统的根目录后, 若找不到 monkey 命令, 应先运行 system/bin/sh,切换 bash 环境。 


4 附录 
4.1 monkey 工具的命令选项
 

usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]   
               [-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]   
               [--ignore-crashes] [--ignore-timeouts]   
               [--ignore-security-exceptions]   
               [--monitor-native-crashes] [--ignore-native-crashes]   
               [--kill-process-after-error] [--hprof]   
               [--pct-touch PERCENT] [--pct-motion PERCENT]   
               [--pct-trackball PERCENT] [--pct-syskeys PERCENT]   
               [--pct-nav PERCENT] [--pct-majornav PERCENT]   
               [--pct-appswitch PERCENT] [--pct-flip PERCENT]   
               [--pct-anyevent PERCENT]   
               [--pkg-blacklist-file PACKAGE_BLACKLIST_FILE]   
               [--pkg-whitelist-file PACKAGE_WHITELIST_FILE]   
               [--wait-dbg] [--dbg-no-events]   
               [--setup scriptfile] [-f scriptfile [-f scriptfile] ...]   
               [--port port]   
               [-s SEED] [-v [-v] ...]   
               [--throttle MILLISEC] [--randomize-throttle]   
               [--profile-wait MILLISEC]   
               [--device-sleep-time MILLISEC]   
               [--randomize-script]   
               [--script-log]   
               [--bugreport]   
               COUNT



4.2 monkey 命令选项介绍 

android ios自动化测试 android手机自动化测试_android_10




android ios自动化测试 android手机自动化测试_android_11




参考资料:


Android Monkey自动测试工具使用报告】