Android平台测试介绍(一) 前言:该文档针对新入职员工及首次接触Android测试平台测试着,对Android系统、测试工具进行简单介绍。 作者:严君 Android系统介绍 Android一词本意是指“机器人”,当然现在大家都知道它是Google推出的开源手机操作系统。Android基于Linux平台,有操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。 Android系统具有5个特点: 开放性。Google与开放手机联盟合作开发了Android,Google通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,希望通过建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。 应用程序无限性。Android上的应用程序可以通过标准API访问核心移动设备功能。通过互联网,应用程式可以声明它们的功能可供其他应用程序使用。 应用程序是在平等条件下创建的。移动设备上的应用程序可以被替代或扩展,即使是拨号程序或主屏幕这样的核心组件。 应用程序可以轻松的嵌入网络。应用程序可以轻松的嵌入HTML、JavaScript和样式表,还可以通过WebView显示网络内容。 应用程序可以并行运行。Android是一种完整的多任务环境,应用程序可以在其中并行运行。在后台运行时,应用程序可以生成通知以引起注意。 通过上述内容的介绍,我们对Android的特点有了初步的了解。下面将讨论Android的系统架构,先让我们看看Android的体系结构,如图1—1所示。 从图1—1中可以看出Android分为4层,从高到低分别是应用层、应用框架层、系统运行层和Linux内核层。下面将对这4层进行简单的分析和介绍。 应用层 应用层是指用Java语言编写的运行在虚拟机的程序,如图1—1中最上层部分所示。其实,Google最开始就在Android系统中捆绑了一些核心应用,比如E-mail客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序等。 应用框架层 这一层是编写Google发布的核心应用是所使用的API框架,开发人员同样可以使用这些框架来开发自己的应用,在使用时必须遵守其框架的规则。 从图1—1中可以看出,Android提供了如下一些组件。 View(可扩展的视图):可以用来构建应用程序,它包括List、Grid、Text Box、Button,以及可以嵌入的Web浏览器。 Content Providers(内容提供器):它可以让一个应用访问另一个应用的数据或共享它们自己的数据库。 Resource Manager(资源管理器):提供非代码资源的访问,如本地字符串、图形和布局文件。 Notification Manager(通知管理器):应用可以在状态栏中显示自定义的提示信息。 Activity Manager(活动管理器):用来管理应用程序生命周期并提示常用的导航退回功能。 Window Manager(窗口管理器):管理所有的窗口程序。 Package Manager(包管理器):Android系统内的程序管制。 系统运行库(C/C++库以及Android运行库)层 当使用Android应用框架时,Android系统会通过一些C/C++库来支持我们使用的各个组件,使其更好的为我们服务。 Bionic系统C库:C语言标注库,系统最底层的库,C库通过Linux来调用。 Media Framework(多媒体库):Android系统多媒体库,基于PacketVideo OpenCORE,该库支持多种常见格式的音频、视频的回放和录制,以及图片。 SGL:2D图形引擎库。 SSL:位于TCP/IP协议与各种应用层协议之间,为数据通信提供支持。 OpenGL:3D效果的支持。 SQLite:关系数据库。 Webkit:Web浏览器引擎。 FreeType:位图和矢量图。 每个Java程序都运行在Dalvik虚拟机上。每一个Android程序都有自己的进程,Dalvik虚拟机只执行.dex的可执行文件。当Java程序通过编译,最后还需要通过SDK中的dx工具转化成.dex格式才能正常在虚拟机上运行。 Linux内核层 Android的核心系统服务于Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖与该内核。Linux内核同时也作为硬件和软件之间的轴向层。 Android更多的是需要一些与移动设备相关的驱动程序,主要的驱动如下所示。 Display Driver(显示驱动):基于Linux的Frame Buffer(帧缓冲)驱动。 KeyBoard Driver(键盘驱动):作为输入设备的键盘驱动。 Flash Memory Driver(Flash内存驱动):基于MTD的Flash驱动程序。 Camera Driver(照相机驱动):常用的基于Linux的v412(Video for Linux)驱动。 Audio Driver(音频驱动):常用的基于ALSA(Advanced Linux Sound Architecture)的高级Linux声音体系驱动。 Bluetooth Driver(蓝牙驱动):基于IEEE802.15.1标准的无线传输技术。 Binder IPC驱动:Android的一个特殊驱动,具有单独的设备节点,提供进程间通信的功能。 Power Management(电源管理):电池电量等。 对Android的系统架构进行剖析后,我们知道Android分为应用层、应用框架层、系统运行库层和Linux内核。在开发应用时都是通过框架来与Android底层进行交互,接触最多的就是应用框架层了。 Android提供给应用开发者的本身就是一个框架,所有应用开发都必须遵守这个框架的原则。开发应用时就是在这个框架上进行扩展,下面介绍Android的这个框架提供了哪些功能。 android.app:提供高层的程序模型和基本运行环境。 android.content:包含对各种设备上的数据进行访问和发布。 android.databses:通过内容提供者浏览和操作数据库。 android.graphics:底层的图形库,包含画布、颜色过滤、点、矩形、,可以将它们直接绘制到屏幕上。 android.location:定位和相关服务的类。 android.media:提供一些类管理多种音频、视频的媒体接口。 android.net:提供帮助网络访问的类,超过常用的java.net.*接口。 android.os:提供了系统服务、消息传输和IPC机制。 android.opengl:提供OpenGL工具。 android.provider:提供访问Android内容提供者的类。 android.telephony:提供与拨打电话相关的API操作。 android.view:提供基础的用户界面接口框架。 android.util:涉及工具性的方法,例如时间日期的操作。 android.webkit:默认浏览器操作接口。 android.widget:包含各种UI元素在应用程序的布局中。 Android系统基于Linux,做Android测试,掌握一定的 Linux知识是必要的。下面我们就对Linux进行简单的介绍。从最简单的文件系统开始介绍(该部分是Linux的基础,更深远的只是在该文档中不做介绍,有兴趣的朋友可以自己查阅)。 Linux文件系统结构 用户空间和内核中与文件系统相关的主要组件之间的关系,如图1—2所示。 图1—2 用户空间包含一些应用程序和GUN C库。它们为文件系统调用提供用户接口。VFS是底层文件系统的主要接口。这个组件导出一组接口,然后将它们抽象到各个文件系统,各个文件系统的行为可能差异很大。有两个针对文件系统对象的缓存(inode和dentry)。它们缓存最近使用过的文件系统对象。每个个体文件系统实现导出一组通用接口,供VFS使用。缓冲区缓存会缓存文件系统和和相关块设备之间的请求。例如,对底层设备驱动程序的读写请求会通过缓冲区缓存来传递。这就允许在其中缓存请求,减少访问物理设备的次数,加快访问速度。 Linux文件系统采用阶层式树状目录结构,最上层是“/”,然后在下边创建其他的目录,如表1—1所示。
表1—1 此外,下面补充一下一些比较重要的字目录的用途。 /etc/init.d 这个目录用来存放系统或服务器以System V模式启动的脚本,这在以System V模式启动或初始化的系统中常见。比如Fedora/RedHat。 /etc/initx.d 如果服务器是通过xinetd模式运行的,它的脚本要放在这个目录下。有些系统没有这个目录,比如Slackware,有些老的版本也没有。 /etc/rc.d 这事Slackware发行版本的一个目录,是BSD方式启动脚本的存放地。比如定义网卡,服务器开启脚本等。 /etc/X11 这事X-Windows相关的配置文件存放地。 /usr/bin 这个目录是可执行程序的目录,普通用户就有权限执行。 /usr/sbin 这个目录也是可执行程序的目录,但大多数情况下存放涉及系统管理的命令。 /usr/local 这个目录通常用来存放用户自编译安装软件。 /usr/lib 库文件存储目录 /usr/share 系统共用的东西存放地,如/usr/share/fonts是字体目录,是用户都共用的。 /usr/src 这事内核源码存放的目录。 /var/adm 比如软件包安装信息、日志、管理信息等。某些操作系统中没有这个目录。 /var/log 系统日志存放,分析日志要看这个目录的东西。 /var/spool 打印机、邮件、代理服务器等假脱机目录。 介绍完Linux文件系统后,让我们来看看Android的文件系统是什么样的。如图1—3所示。 图1—3 图1—3列出了Android的文件目录,下面简单阐述一些目录的功能。 cache : 是缓存临时文件夹,据说是除了T-mobile的OTA更新外,别无用处。 sdcard:是SD卡中的FAT32文件系统挂载的目录。 etc :指向 /system/etc ,众所周知的配置文件存放目录。 proc :/proc 文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。 sys :用于挂载 sysfs文件系统。 在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可以修改sysfs中的文件属性来修改设备的属性值。 sbin: 只放了一个用于调试的adbd程序。 data :存放用户安装的软件以及各种数据。 root :什么都没有。 dev :不用多说了,设备节点文件的存放地。 system : /system目录是在Android文件系统占有及其重要的位置,基本上所有的工具和应用程序都在这个目录下。在Android手机中存放在nandflash的mtd3中,是一个yaffs2文件系统,在启动时被挂载在root的/system目录下。以下是目录结构,如图1—4所示: 图1—4 bin:该目录下放了很多系统管理工具,这些工具不是到toolbox的链接,每个都是可执行程序。如果你看到这些命令你会发现他们根本不常用,他们都是为系统管理员准备的,是一些系统管理和配置工具。这个文件夹的作用相当于标准Linux文件系统中的/sbin。 framework:JAVA平台的一些核心文件,属于JAVA平台系统框架文件。里面的文件都是.jar和.odex文件。 fonts:字体库文件的存放目录。 etc :这里存放了系统中几乎所有的配置文件,根目录下的/etc就链接于此。 build.prop :是一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置和改变,类似于/etc中的文件。 media:里面主要是存放了系统的铃声的,分为 notifications(通知)、ui(界面)、alarms(警告)和ringtones(铃声),里面都是.ogg音频文件。 bin:存放用户常用的工具程序的,其中大部分是到toolbox的链接 usr:用户的配置文件,如键盘布局、共享、时区文件等等。您可以cat 来看看。 app:顾名思义,存放的是Android系统自带的JAVA应用程序。 lost+found:yaffs文件系统固有的,类似回收站的文件夹,只有是yaffs文件系统都会有。 lib:存放几乎所有的共享库(.so)文件。 init.rc:一个初始化脚本,用于将/system/modules和/system/xbin挂载为cramfs,避免系统被无意破坏。 在其他Android版本中,/system目录下可能还存在如sd、modules等目录,再次不做解释。在根目录下还有一些非目录的文件,例如,init.trout.rc,init.rc,init.goldfish.rc 是初始化文件.。init是系统启动到文件系统的时候第一个运行的程序。 测试 Android系统测试平台搭建 Android SDK贯穿于Android测试的整个测试过程。该工具可以从Android官网上下载(地址http://developer./sdk/index.html)。 下载完成后,解压该zip包,解压后生成的目录如图1—5所示: 图1—5 使用该工具之前,先将环境变量配置好,配置方法如下所示。 “鼠标右键”我的电脑,点击“属性”,打开系统属性对话框后,选择“高级”标签页,点击“环境变量”,系统变量的“Path”中添加参数,该参数=android SDK所在目录。如sdk在D:\,这里就可以写成D:\android sdk\tools。 配置好环境变量后,第一次启动SDk,可以双击“SDK Manager.exe”。首次启动SDK Manager需要下载SDK platform,可能需要下载一段时间。 创建Android模拟器很简单,在这里不做说明。 在Android SDk目录下有一个tools目录,该目录下存放了许多工具,如图1—6所示。 图1—6 其中有几个必要常用的工具adb.exe、sqlite.exe、ddms.bat。 abd.exe 该工具的功能强大,如向存取文件、安装或删除应用等。如果在下载SDK且解压后发现tools目录中没有adb.exe,难么将\ platform-tools目录下的adb.exe、AdbWinApi.dll、AdbWinUsbApi.dll三个文件复制到tolls目录下,然后重启adb即可。 该工具在DOS下使用,点击“开始”后点击“运行”,输入“cmd”进入DOS,在命令行中输入“abd”显示所有abd命令,如图1—7所示。 图1—7
其中比较常有的有,adb push、adb pull、adb install、adb uninstall、adb remount、adb shell等。(命令较多在这里不做解释,如有兴趣可自行查看) 例: 将PC C:下的aaa文件放入手机sd卡中,用命令adb push C:\aaa /mntsdcard。 将手机/data目录下的aaa文件取出到PC D:,用命令adb pull /data/aaa D:\。 安装一个aaa应用,用命令adb install C:\aaa.apk。 进入shell,输入adb shell。 如果在shell中,发现root用户无法删除某个文件,可以退出shell,再输入adb remount,重新进入shell后即可删除。 Sqlite.exe Sqlite是android的关系数据库,可以在shell使用,也可以将数据库文件取出后使用sqlite.exe打开。 在shell中使用,只需要找到该数据库文件的路劲后输入sqlite 数据库路径。在sqlite.exe中使用,可以将该文件从手机去取出,取出方法上文已说明,用命令adb pull ,然后打开sqlite.exe将文件拖入,回车即可。 Sqlie数据库设置可在数据库中输入.help查看。该工具的语法和基本采用sql语法,在此不做说明。 ddms 这个工具主要用途是可以获取手机运行日志,双击ddms,打开该工具 ,如图1—8所示。 图1—8 手机运行的日志在“log”区域,在“name”加载了该手机各运行模块和已启动的服务。 该工具还可以模拟电话、短信事件。选择Emulator Control标签页,在Telephony Actions区域中Incoming number输入框中输入号码,Voice和Sms按钮,如选择Voice,然后点击Call,模拟器将收到模拟的电话事件,如输入选择Sms,可在其后的文本框中输入短信内容,然后点击call,模拟器将模拟手机短息事件。 其他工具的使用方法在这里不做说明,读者可自行查阅。 busybox工具 该工具是Linux常用命令集,集成Linux常用操作命令,很方便的一个工具。Android自身也有一个命令集工具toolbox,不过该工具比较简陋,不建议使用。 Busybox工具可在网上获得,可直接使用成品,或下载该工具的源码,自行编译后使用,建议初学者使用成平 。 下载该文件后,将该文件push进手机中,不要将该工具push进sd卡,那样将无法使用该工具,应为用户和组权限非用户权限且不可修改。 busybox放进手机/data目录以后需要修改用户权限,组权限无需修改,如图1—9所示。 图1—9 我们可以看到,push进手机后该文件的权限是“-rw-rw-rw-”,第一个“-”说 明该文件的类型,此处是执行文件;后面依次三个字符一组,对应的权限为当 前用户、用户组、其他用户,我们只需要给当权用户赋予执行权限即可。用命 令chmod 766 busybox后即可使用busybox,busybox的用法举例,如果需要显 示当前目录下的文件,使用命令busybox ls –al;如果需要常看当前网卡信息可 以用busybox ifconfig等。当然在使用之前需要修改环境变量,可以用以下方法 修改,如export PATH=$PATH:/data(busybox在/data目录)。 当然你也可以先建立busybox的链接,不同的链接名完成不同的功能。 #ln -s busybox ls #ln -s busybox rm #ln -s busybox mkdir 然后分别运行这三个链接 #./ls #./rm #./mkdir 但是只要链接名不同,完成的功能就不同。 当然也可以将busybox作为脚本写入/system/xbin当中(具体方法这里不做讨论),此过程需要重新挂载手机文件系统,初学者慎用。方法如下: 将busybox传入手机的SD卡,可以使用下面的命令或自己想其他办法。打开terminal(Linux,Mac)或cmd(Windows)输入命令: adb push ~/Desktop/busybox /mnt/sdcard 输入以下命令,为了在/system目录写入文件 adb shell su mount -o remount,rwx -t yaffs2 /dev/block/mtdblock3 /system 使用 ls 检查一下 /system 里是否有 xbin 目录,没有的话输入 mkdir xbin 创建,因为本示例是要把busybox安装到 /system/xbin 。 复制 busybox 文件到 /system/xbin,并为其分配“可执行”的权限 cp /mnt/sdcard/busybox /system/xbin chmod 766 busybox 这时就可以使用 busybox 的命令了,例如以前没有清屏的clear命令,现在只需输入 busybox clear 就可以实现清屏功能,使用完整版的 ls 只需输入 busybox ls 。但是每次前面都加上个busybox太麻烦了,所以我们还要继续完成安装。在 /system/xbin 下输入busybox --install如果想安装到别的目录,则把点替换成别的路径。
tcpdump tcpdump是一个命令行方式的嗅探工具。它诞生的时候较早,是许多图形化嗅探工具的雏形。主要作用是截获制定接口或所有接口的数据包,且能按照一定规则过滤截获的数据包,以此满足使用者分析其内容的目的。 在一些Linux发行版本中,tcpdump通常作为标准的软件包被默认安装,当然Android也不例外。执行“tcpdump”命令可以确定是否已安装了tcpdump。如果未安装,可以去http://www.下载最新的tcpdump源码包。在编译之前,应先确定pcap库(libpcap)已经安装完毕。这个库是编译tcpdump时所必需的。如果该库已经安装,就可以执行下面的命令来编译安装tcpdump: cp tcpdump-x.x.x.tar.gz /usr/local/src/ cd /usr/loacal/src/ tar xzvf tcpdump tcpdump-x.x.x.tar.gz ./configure make make install 编译完成后会生成tcpdump的执行文件。 tcpdump的用法其实很简单,不需要太多的关注,直接输入tcpdump命令可产看详细用法。 上图列出了tcpdump详细的用法,我们常用的方法是使用: tcpdump –i interface –s snaplen –w file i参数的作用是指定需要抓哪个网卡的数据,关于网卡,我们可以用ifconfig查出当前的网卡。在命令行输入“ifconfig”即可。 -s参数指定是否需要分割数据包,一般用0 -w捕获的数据包的存储路径。 关于数据包的查看方法我们可以直接用strings命令来查看数据包,如在/sdcard目录下有一个数据包aa.cap,我们要查看他可以用strings /sdcard/aa.cap进行查看,也可以用strings /sdcard/aa.cap > /data/aa.txt命令,将数据包已字符串形式输入aa.txt文档后再使用命令cat –bn /data/aa.txt查看,当然还可以将数据包取出,放入PC机查看。 至此该文档已结束,希望对阅读者有一定的帮助。
Android自动化测试框架Robotium学习笔记刚好前段时间也研究了一下Android的自动化测试框架。感觉用起来还是比较方便的。 几点体会也一起和大家交流下,有一些内容还在慢慢学习中: 1.Java5(2004-10)开始推出了Instrumentation,这是一个可以在main之前Java虚拟机加载类时改变Java类字 节码或类classpath等内容的工具,同时JDK1.6还提供了运行过程中的动态改变,如在方法执行前后加入度量时间的代码,使Java代码可度量就 是一个很典型的应用。不过这需要涉及到Java字节码有较深入的理解进行字节码直接编辑改写,或者需要借助开源字节码项目如bcel,ASM或 javassist等,以简化对字节码的操作。 2.Instrumentation与Btrace。Btrace是基于Instrumentation和ASM的,只要理解了Instrumentation的原理和ASM对字节码的操作原理,了解Btrace就不困难了。 3.Android的 测试框架robotium框架,使用的类也是Instrumentation,其原理应该也类似。为某工程新建了一个测试工程,在安装原有工程项目时,也 将测试的工程项目安装到AVD(模拟器)上面,同时通过测试的工程项目来与运行时的项目交互,触发其组件的动作等。这种方法的缺点是要求两个项目同时安装 到AVD上面。Google将会考虑采取Remote Control的方式实现自动化测试框架,类似于selenium的Remote Control,即在AVD上运行一个监控程序,而测试项目只需要连接这个监控程序,并发送相应的指令即可与程序进行交互,进行测试。希望早日实现这种方 式~,目前的自动化测试使用前种方法也可。Robotium其底层仍是采用Android的Instrumentation! 4.Android的Instrumentation对某个监控程序进行交互时,其大致采用如下步骤: 1)启动时将项目配置文件AndroidManifest.xml文件中的instrumentation标签中的内容进行初始化,其中标明了所使用的测试运行类,目标项目的包名等 2)执行测试时(可用adb命令触发),将启动目标应用的Activity,同时将待测试ActivityThread作为一个引用进行初始化,如果找不到目标应用则会报错 3)在测试时测试项目的任何对目标项目进行的操作,都会用异步的方式,将消息体放在目标程序的MessageQueue里面,这样目标程序在看到自己的MessageQueue里有内容时,就会执行之。 整个初始化过程还有待研究,关键应该是在于AndroidManifest.xml文件中内容的标识 Android自动化测试工具-Monkey前言: 最近开始研究Android自动化测试方法,整理了一些工具、方法和框架,其中包括android测试框架,CTS、Monkey、Monkeyrunner、benchmark,以及其它test tool等等。 一、 什么是Monkey Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。 Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。 二、 Monkey的特征 1、 测试的对象仅为应用程序包,有一定的局限性。 2、 Monky测试使用的事件流数据流是随机的,不能进行自定义。 3、 可对MonkeyTest的对象,事件数量,类型,频率等进行设置。 三、Monkey的基本用法 基本语法如下: $ adb shell monkey [options] options选项(adb -d shell monkey):
如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送9999个伪随机事件: $ adb
shell monkey -p your.package.name -v 9999 四、Monkey测试的一个实例 通过这个实例,我们能理解Monkey测试的步骤以及如何知道哪些应用程序能够用Monkey进行测试。 Windows下(注:2—4步是为了查看我们可以测试哪些应用程序包,可省略): 1、 通过eclipse启动一个Android的emulator 2、 在命令行中输入:adb devices查看设备连接情况 C:\Documents and Settings\Administrator>adb devices List of devices attached emulator-5554 device emulator-5556 device 015ED9A50C00A01A device 3、 在有设备连接的前提下,在命令行中输入:adb shell 进入shell界面 C:\Documents and Settings\Administrator>adb shell 4、 查看data/data文件夹下的应用程序包。注:我们能测试的应用程序包都在这个目录下面 C:\Documents and Settings\Administrator>adb shell # ls data/data ls data/data com.google.android.btrouter com.android.providers.telephony com.android.mms com.android.providers.downloads com.android.deskclock com.android.email com.android.browser com.android.calculator2 .... 5、 以com.android.calculator2作为对象进行MonkeyTest #monkey -p com.android.calculator2 -v 9999 其中: -p表示对象包 –v 表示事件数量 运行过程中,Emulator中的应用程序在不断地切换画面。 按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。 注:具体参数的设定可参考: http://developer./guide/developing/tools/monkey.html 五、关于Monkey测试的停止条件 Monkey Test执行过程中在下列三种情况下会自动停止: 1、如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。 2、如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。 3、如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。 通过多次并且不同设定下的Monkey测试才算它是一个稳定性足够的程序。
Monkey测试简介[附示例]一、Monkey测试简介 Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。 二、Monkey程序介绍 1) Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar; 2) Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径 是:/system/bin/monkey;这样就可以通过在CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试了。 三、Monkey命令的简单帮助 要获取Monkey命令自带的简单帮助,在CMD中执行命令: 四、Monkey命令参数介绍 Monkey测试1:adb shell monkey -p com.htc.Weather –s 10 100 Monkey 测试2:adb shell monkey -p
com.htc.Weather –s 10 100 adb shell monkey -p com.htc.Weather --pct-touch 10 1000
adb shell monkey -p com.htc.Weather --pct-motion 20 1000
adb shell
monkey -p com.htc.Weather
--pct-trackball 30 1000 调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成) adb shell
monkey -p com.htc.Weather --pct-nav 40 1000 调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键) adb shell
monkey -p com.htc.Weather
--pct-majornav 50 1000 调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键) adb shell
monkey -p com.htc.Weather --pct-syskeys 60 1000 调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法 adb shell
monkey -p com.htc.Weather --pct-appswitch 70 1000 调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等 adb shell
monkey -p com.htc.Weather adb shell monkey -p com.htc.Weather --pct-anyevent 50 --pct-appswitch 50 1000 注意:各事件类型的百分比总数不能超过100%; monkey测试工具当Monkey程序在模拟器或设备运行的时候,如果用户出发了比如点击,触摸,手势或一些系统级别的事件的时候,它就会 产生随机脉冲,所以可以用Monkey用随机重复的方法去负荷测试你开发的软件. 最简单的方法就是用用下面的命令来使用Monkey,这个命令将会启动你的软件并且触发500个事件. $ adb shell monkey -v -p your.package.name 500更多的关于命令Monkey的命令的信息,可以查看UI/Application Exerciser Monkey documentation
page. 用程序进行压力测试。Monkey包括许多选项,它们大致分为四大类: · 运行约束选项,如设置只对单独的一个包进行测试。 · 事件类型和频率。 · 调试选项。 行特殊处理: · 如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。 · 如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。 · 如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。 按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。
可以通过开发机器上的命令行或脚本来启动Monkey。由于Monkey运行在模拟器/设备环境中,所以必须用其环境中的shell 来进行启动。可以通过在每条命令前加上adb shell来达到目的,也可以进入Shell后直接输入Monkey命令。基本语法如下: $ adb shell monkey [options] 如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典 型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件: $ adb shell monkey -p your.package.name -v 500 命令选项参考 下表中列出了Monkey命令行可用的全部选项。 类别 常规 -v 1提供较为详细的测试信息,如逐个发送到Activity的事件。Level 2提供更加详细的设置信息,如测试中被选中的或未被选 中的Activity。 事件 --throttle <milliseconds> 将尽可能快地被产成。 --pct-touch <percent> --pct-motion <percent> --pct-trackball <percent> --pct-nav <percent> --pct-majornav <percent> 键) --pct-syskeys <percent> --pct-appswitch <percent> 一种方法。 --pct-anyevent <percent> 约束限制 里的Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里 的Activity。要指定多个包,需要使用多个 -p选项,每个-p选项只能用于一个包。 -c <main-category> 何类别,Monkey将选 择下列类别中列出的Activity: Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要 指定多个类别,需要使用多个-c选项,每个-c选 项只能用于一个类别。 调试 与-v、一个或几个包约 束、以及一个保持Monkey运行30秒或更长时间的非零值联合起来,从而提供一个环境,可以监视 应用程序所调用的包之间的转换。 --hprof 小心使用它。 --ignore-crashes 直到计数完成。 --ignore-timeouts ,Monkey将继续向系统发送事件,直到计数完成。 --ignore-security-exceptions Monkey将继续向系统发送事件,直到计数完成。 --kill-process-after-error 生错误的进程。注意,正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状 态。 --monitor-native-crashes --wait-dbg
定规律可循,但是并不是我们就可以指定动作,但是我们可以通过添加命令选项来将操作限制在一定的范围内。 指定事件之后 # monkey -v -p com.android.camera
--throttle 5000 --pct-anyevent 100 500 最后count就是事件数设定为500 |
|