Introduction
FoneMonkey records and plays back user interface interactions with native Android applications.
要使用FoneMonkey,则将FoneMonkey构建到你的Android应用程序。然后,您可以使用FoneMonkey控制台录制和播放用户界面交互。 控制台是一个独立的桌面应用程序可以连接到Android模拟器或实际设备(通过USB)或到达的IP地址连接上运行的应用程序。
可以插入些验证步骤到你录制的脚本代码中,作为持续集成构建的一部分,生成可执行的JUnit 测试脚本。
下载与安装
- 下载 fonemonkey.zip.
- 通过以下更新网站安装Fonemonkey 控制台插件
注意:当您第一次启动控制台,系统将提示您提供的Android SDK安装目录的路径。
3. 实现你的android项目FoneMonkey 自动化.具体步骤如下:
1)Eclipse中安装AspectJ开发工具 插件;
2)右击你的待录制工程,select Configure > Convert to AspectJ Project...
3)AspectJ jar 将被加入到classpath,和AspectJ builder被加入到android project builder(你可撤销select AspectJ Tools > Remove AspectJ Capability)
4)解压FoneMonkeyAndroid.zip文件。 fonemonkey文件夹复制到您的android project项目的根目录,展开项目目录文件夹;
5)右击fonemonkey/aspects文件夹,select Build Path > Use as Source Folder(aspects 包括FoneMonkey要求拦截应用程序事件有关AspectJ切入点的定义);
6)打开fonemonkey/libs目录,选择fonemonkey.jar 和servlet-api.jar,右击select Build Path > Add to Build Path
7)打开工程的manifest file,添加下列权限:
(1).android.permission.GET_TASKS
(2).android.permission.INTERNET
8)Clean-build 和运行程序
启动控制台 如果尚未运行过FoneMonkey控制台 ,首次运行控制台,会被提示输入你的Android SDK的位置。
你设置SDK location 通过 Edit > Set Android Home... 菜单项。
连接到您的应用程序 Select the menu option Connect > Emulator/Local Device ;
Select Connect > Remote Device ,连接到远程设备的应用程序上;
控制台将显示一条消息,表明它是否可以成功连接。
开始录制
正如您与您的应用程序互动,FoneMonkey记录相应的命令。 每个记录的命令有以下值:
- action - 记录interfaction,例如“Click”或“EnterText”。
- component - 接受动作的组件类型,例如“Button”或“InputField” 。 此组件可跨平台,许多不同的Android类可以映射到相同的FoneMonkey组件类型。
- monkeyID - 组件的标识符。 FoneMonkey派生一个默认标识符基于一些逻辑元件。 例如,一个按钮的默认monkeyID是其标签文本。
- Args - 有些命令有关联的参数。 例如,EnterText命令有一个参数,它提供了输入值的文本价值。
- Timeout - 以毫秒为单位,等待命令的相应时间。默认的超时时间通过 Play > Set Default Timeout... 菜单来设定.
播放您的脚本 单击工具栏上的“播放”按钮,播放你的脚本。 双击某一行将自动播放此行脚本,也可以选择并播放多行命令。
若只有一行被选中,则点击播放按键,将从此行开始播放脚本直至末尾。如果脚本回放过程中发生故障,例如,如果无法找到组件,突出失败的地方和消息显示在控制台窗口的底部。
编辑你的脚本
你可以在控制台表格中直接改写你的脚本代码, 右击表中的单元格将显示各种编辑选项。 你可进行 Edit > Insert Row or Edit > Append Row
增添验证步骤
要添加一个验证步骤,需创建一个新行,右击菜单中选择Duplicate Row,或通过选择Edit > Insert Command,即可插入一个验证步骤在此两行中。
右击此行,可改变和选择某个验证命令,每个验证命令需要两个参数。第一个参数是验证组件属性,而第二个参数是预期值。
例如,你可以通过以下命令验证当前“Planets”的下拉列表中被选项为Mercury.VerifyExact DropDownList Planets selectedItem Mercury The property selectedItem is the property of an Android Spinner component that contains the currently selected value.如下的验证命令可用。
- VerifyExists - 验证是否存在此monkeyID的组件。
- VerifyExact - 验证是否存在此类型和monkeyID的组件,ARG1指定属性,ARG2指定精确值。
- VerifyWildcard - 验证是否存在此类型和monkeyID的组件,ARG1指定属性,ARG2指定一个通配符模式匹配(文件模式匹配包含*通配符?)。
- VerifyRegex - 验证是否存在此类型和monkeyID的组件,ARG1指定一个匹配正则表达式属性,ARG2指定精确值。
认识组件属性
如上所述,FoneMonkey验证组件的属性。 这些属性是“JavaBean属性”的组成部分,它们的值是通过getSomeProperty 和 isSomeProperty 方法提供的。属性名是方法的名字去掉"get" or "is", 并以小写字母开头。
For example, the isChecked() value of a CheckBox is accessed by the property "checked", and the getSelectedItem() value of a List is accessed by the "selectedItem" property.
您可以通过阅读组件的Javadoc文档,查找组件属性的名称。
所有属性值转换为字符串值比对预期值或形式。
某些情况下需设定执行脚本等待时间
FoneMonkey会重试执行命令,直到执行完成或执行超时。超时值设置菜单项:Play > Default Timeout。 在控制台上设置超时值(以毫秒为单位),您可以设置单个命令的超时。
例如,假定应用程序的一个按钮是采取从一到十秒的计时方式,来控制检索所有数据的所需的时间的。则执行验证此按钮时,你可以强制脚本等待10秒,设置VerifyExists 超时值为10000.
设定播放速度
选择菜单项 Play > Playback Speed,设置执行完每个命令后迟延多少毫秒,来控制播放速度。 Because FoneMonkey retries failed commands, it's possible to set the delay time to zero in which case the script will run as fast as possible.由于FoneMonkey会重试失败的命令,在这样情况下,尽可能设置延迟时间为零,以便尽快的执行脚本。
生成 JUnit Tests
控制台可以导出JUnit tests的执行脚本。这些脚本用例作为独立的进程,运行在任何JDK的平台上。不能直接运行在android模拟器和设备。
要在Eclipse中运行测试,需创建个新的Java项目。 选择菜单项 File > Export JUnit TestCase 生成一个 JUnit TestCase.保存TestCase的源代码到你新创建的java项目的默认包中。
认识生成的 JUnit Tests
下面是一个生成的JUnit TestCase的例子:
对每个命令,FoneMonkey每行代码会生成相对应的命令行
app.find("ComponentType", "monkeyID").action(args)
运行生成的测试用例
运行在Eclipse中生成的TestCase,右击此源文件,并选择Run As...> JUnit Application。 Eclipse会提示TestCase运行情况,然后将执行的TestCase的结果以JUnit视图形式显示出来。