本文通过作者在真实项目中使用 Rational Functional Tester 8.2 和 Jenkins 搭建测试复杂 Flex 应用程序的案例介绍了常见的使用 RFT 测试 Flex 应用时会遇到的问题以及解决方法。希望为您提供最真实有效的指导。
Flex 是基于 Flash 的 Web 前端应用程序开发框架。Flex 原先是 Adobe 私有的技术,后 Adobe 将其开源并捐赠给 Apache 开源社区。 Flex 应用运行在 Flash 虚拟机中,相较于标准 HTML 应用,Flex 应用的界面外观优美、交互性好、跨浏览器支持好。此外 Adobe 出品的 Flash Builder 为 Flex 提供了非常强大的集成开发环境 ,这也是 Flex 的一大优势。但是对 Flex 应用进行自动化测试并不容易。
在本文中,我们将介绍使用 IBM Rational Functional Tester (下文中使用缩写 RFT)的最新版以及开源的持续集成工具 Jenkins 来对 Flex 应用进行自动化测试。
Flex 自动化测试的原理
Flex Automation 是 Adobe 提供的用于测试 Flex 应用的一套 API。所有对 Flex 应用进行自动化测试的工具都使用了 Flex Automation API。 Flex Automation API 提供了一套机制供测试工具记录 Flex 应用中所有的事件,并提供了对这些事件进行回放的接口。下面我们会简单介绍 Flex Automation API 的一些基本概念。
Delegate
针对每个 UI 对象,Flex Automation API 中都包含一个对应的 Delegate 类。 Delegate 会在 Flex 应用运行时的每个对象实例上注册事件侦听器(Event Listener)从而监控每个对象上发生的事件。Flex Automation API 中包含了所有 Flex 标准对象的 Delegate。但是当您需要自动化测试一些非标准对象时,那您就需要自己去定制该对象的 Delegate 类。
Agent
除了 Delegate 的外,Flex 应用和自动化测试工具之间还需要一个媒介进行通信。 这就是 Automation Agent。 例如在脚本记录阶段, Delegate 捕获到某个对象上的事件后,需要将这些事件记录下来以便未来进行回放。Agent 就负责提供对这些事件持久化的功能。如何实现 Agent 是每个测试工具的内部实现,这里就不进一步展开了。
编译 Automation API
要使一个 Flex 应用可以被自动化测试工具测试,首先必须将 Automation API 的包编译进您的 Flex 应用中,可以通过如下命令完成:
mxmlc -include-libraries+=../frameworks/libs/automation.swc; \ ../frameworks/libs/automation_agent.swc MyApp.mxml
需要注意的是,包含了 Flex Automation API 包后编译出的 swf 文件会显著的增大。具体的大小跟您所包含的 swc 文件大小有关。 对最终用户而言这些用来支持自动化测试的类是无用的,因此常见的做法是通过编译脚本(例如 Ant 或 Maven)的参数控制编译两套应用。在功能测试阶段编译包含 Flex Automation API 的应用,而在生产环境上则使用不包含 Flex Automation API 的版本。
配置 RFT 对 Flex 应用进行自动化测试
相信很多您在接触 RFT 这类自动化测试工具后,都会有这样的疑问:它是如何做到操纵 Java 程序或者浏览器来自动测试应用的?
RFT 操控被测对象、完成用户指定的自动测试动作的前提是它需要具备与被测应用程序(Application Under Test,AUT)进行通讯的能力。要做到这一点,RFT 首先必须建立自身与被测应用的沟通渠道,该过程对于 RFT 而言,被称为“启用被测应用程序”。
目前 RFT 可以支持如下类型的应用程序:基于 Java 平台的程序、基于 .Net 平台的程序、HTML 程序,以及基于 Siebel、SAP、Flex 等特定平台的应用程序。
对于 Flex 应用,需要确保 JDK (With JRE)正确安装并在浏览器中启用 JRE 插件(SSV Helper)来确保 RFT 与 Flex 应用程序能够进行正常通讯。
Java 环境配置
安装好 JDK (With JRE) ,注意不能是免安装版的,否则 java 的相关插件无法成功安装到浏览器 (以下以 Windows 7 平台和 IE 浏览器为例) 中。 验证 JDK 是否安装好: 在控制面板下找到 Java 插件的图标并点击进入。
图 1. 控制面板中的 Java 图标
点击 Java 标签页,然后点 Java
Applet Runtime Settings 部分的 View 按钮确认 JRE 的 location 指向的是 JRE 的安装目录比如 C:\Program Files (x86)\Java\jre6 并且处于 Enabled 状态,此 JRE 将作为浏览器运行时默认的 JRE.
图 2.JRE 设置
在 RFT 中 JRE 以及默认浏览器的设置:
打开 RFT, 找到 Configure(配置) 菜单,点击 Enable Environments For Testing(启用环境进行测试)。打开 Java Environments 标签页,会发现已经默认添加了一个 JRE lib 的环境变量,路径指向的是 RFT 安装目录下的 JRE lib 目录(例如: C:\Program Files (x86)\IBM\SDP)。
图 3.Java 环境设置
当然我们也可以将其默认的 RFT 安装目录下 JRE 改为我们前面安装好的 JRE。