通过扩展 Rational Functional Tester 对 Adobe Flex 或 Flash 应用程序进行测试

本文介绍如何使用Selenium和FlexMonkium扩展RationalFunctionalTester,以实现对Adobe Flex和Flash应用程序的一致自动化测试。通过解决由频繁的浏览器安全补丁和Flash更新带来的挑战,本文提供了一个分步指南,帮助读者构建稳定的自动化测试框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过扩展 Rational Functional Tester 对 Adobe Flex 或 Flash 应用程序进行测试

添加 Selenium 和 FlexMonkium 以避免由于频繁的浏览器安全补丁和 Flash 更新引起的限制

Tim Hague, 质量保障自动化工程师, IBM

简介: Rational Functional Tester 及其 Eclipse IDE 的最大好处之一是,可以利用数百个有用的开源组件轻松地对其进行扩展。由于浏览器安全补丁的不断出现,使用对 Flex 自动化的内置支持,对 GUI Flex 应用程序实现一致的自动化,这对于我们的团队来说是一段艰苦的日子。我们使用开源组件解决了这个问题,开源组件更新更加频繁,可以与似乎每天都出现的浏览器安全更新保持同步。本文将介绍 Rational Functional Tester 如何与 Selenium 和 FlexMonkium 进行协作。Tim Hague 提供了分步指南,帮助您实现一个类似的解决方案。

发布日期: 2012 年 6 月 11 日
级别: 初级 原创语言: 英文
访问情况 : 1771 次浏览
评论: 0 (查看 | 添加评论 - 登录)

平均分 5 星 共 1 个评分 平均分 (1个评分)
为本文评分

免费下载:IBM® Rational® Functional Tester 试用版  |  IBM® Rational® 测试人员资源工具包
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

扩展 Rational Functional Tester

使用 Rational Functional Tester 的最大优势之一就是能够使用任何数量的开源组件对其进行扩展。GUI 自动化开发人员经常受到测试工具的限制,但利用 Rational Functional Tester 的可扩展性,我们往往可以消除这些限制。本文将告诉您如何将 Selenium 和 FlexMonkium 与 Rational Functional Tester 结合使用来测试 Adobe Flex 或 Flash 应用程序。

测试基于浏览器的 Flex 应用程序的挑战

我们也许都认可的一点是,在目前普遍使用的软件中,最经常打补丁或更新的软件是 Internet 浏览器及其支持的 Flash 插件。因为 Flex 应用程序通常运行在浏览器上的 Flash 插件内,这些 Flex 应用程序为自动化测试工具带来了挑战,即能够一致地识别接受测试的应用程序 (AUT) 内的 GUI 测试对象。想像一下,构建一个自动化框架来测试您的企业 Flex 应用程序,然后因为浏览器或 Flash 插件的安全补丁,您可能一个月要 “打破” 该框架几次。显然,您需要一个更一致的 Flex GUI 对象识别解决方案,以便与频繁的插件补丁保持同步。

使用 Selenium 和 FlexMonkium 进行扩展的优势

Selenium 工具套件旨在提供基于浏览器的应用程序的无缝自动化测试。Selenium 开发团队与浏览器开发团队密切合作,以确保浏览器与测试工具能够以一致的方式进行互操作。对于我们而言,Selenium-RC 是将 Flex 测试命令从 Rational Functional Tester 传递给浏览器应用程序的完美解决方案,无需担心浏览器的安全补丁会造成任何障碍。

FlexMonkium 工具提供了一致的 Flex 应用程序 GUI 对象识别解决方案,为不断出现的 Flash 插件更新提供了强大的支持。FlexMonkium 提供了以下综合工具集:

FlexMonkiumConsole

用于 GUI 对象发现和记录 
FlexMonkium SWC

一个编译在您的 AUT 中的轻量级 automation_monkey.swc 文件,用于 “启用” Flex 自动化 

将 Selenium 和 FlexMonkium 相结合,提供具有强大支持的组件,这些组件可以无缝地协同工作,提供一致的 Flex 应用程序自动化解决方案。

该组合如何进行配合工作

每个组件都扮演着重要的角色。让我们来看看它们如何进行配合工作。

Rational Functional Tester

Rational Functional Tester 在该解决方案中发挥了其最佳作用:

  • 可扩展的 Eclipse IDE 用于开发和包含 Java 或 JUnit 测试脚本及代码
  • 测试执行平台可以启动测试并记录结果

Selenium

Selenium 最常用于实现 Rational Functional Tester 与托管 Flex 应用程序的浏览器之间的互操作:

Selenium IDE

这用于记录可以导出或转换为 JUnit 代码的自动化脚本。 
Selenium-RC

该组件用作 Rational Functional Tester JUnit 代码到包含 Flex 应用程序的浏览器之间的 HTTP 桥梁。您的 JUnit 代码中所包含的命令被作为所有浏览器都能理解的 JavaScript 命令进行传递和执行。 

FlexMonkium

FlexMonkium 用于 Flex 自动化脚本记录、Flex GUI 对象识别或发现,以及 Selenium-RC 和 Flex 应用程序之间的互操作。

FlexMonkiumConsole

当与 Selenium IDE 配合使用时,该控制台提供了一个易用的 Flex 应用程序 GUI 自动化记录器。然后,记录好的脚本被导出为 JUnit 代码,以便在 Rational Functional Tester 中能够使用它们。 
FlexMonkium SWC

被编译为您的 Flex 应用程序版本的一部分,该组件实质上为目标应用程序开启了自动化。 

入门

先决条件

  • 安装 Rational Functional Tester 并使其准备好运行它
  • 安装 Firefox 3 浏览器(更高版本的 Firefox 也应该可用)
  • 将来自 Gorilla Logic 网站的 automation_monkey.swc(参阅本文的 参考资料 小节)包含在您的目标 Flex 应用程序中。

组件设置

提示:

关于需要下载的链接以及本节中所提到的安装指南,请参阅本文的 参考资料 小节。

  1. 下载并安装 Selenium IDE。Selenium IDE 是一个 Firefox 加载项(扩展),在安装它以后,可以将它作为侧栏打开 (Firefox > View > SideBar > Selenium IDE)。
  2. 下载最新的 Selenium-RC(也称为 Selenium Server)Java archive (JAR) 文件 selenium-server-standalone-2.x.x.jar
  3. 下载最新的 Selenium Client Driver for Java .zip 文件 selenium-java-2.x.x.zip,并解压缩 JAR 文件,您要将这些文件包含在您的 Rational Functional Tester 项目中。
  4. 从 Gorilla Logic 网站下载最新的 FlexMonkium.zip 文件,并将内容解压缩到本地目录。
  5. 使用 FlexMonkium 安装程序安装 FlexMonkiumConsole,并记下您的安装位置。
  6. flexmonkium.xpi 插件(该插件随 FlexMonkium.zip 文件提供)安装到 Firefox。这可以通过将 .xpi 文件拖进 Firefox 或在 Firefox 中打开 .xpi 文件来完成此操作。
  7. 启动 Selenium-RC/Selenium Server 并应用在 FlexMonkium.zip 文件中提供的 user-extensions.js。在 Microsoft Windows 命令提示符中运行的以下命令应该有效:
    java –jar path/selenium-server-standalone-2.x.x.jar –userExtensions path/user-extensions.js

Rational Functional Tester 配置

  1. 在 Rational Functional Tester 中新建一个 Project,以包含您的 Flex 自动化:
    RFT > New > Functional Test Project
  2. 启用 Firefox 作为您的 Rational Functional Tester 默认浏览器:
    Configure > Enable Environments for Testing > Mozilla Firefox > Set as Default
  3. 在您的项目中添加一个 "lib" 目录:
  1. 右键单击您的项目并选择 Add Test Folder
  2. 将该文件夹命名为 lib,然后单击 Finish
  1. 在您的新 Rational Functional Tester 项目的 lib 目录中导入 selenium-java-2.x.x.jar 文件,右键单击 lib 目录并选择 Import > General > File System ,然后选择 selenium-java-2.x.x.jar 文件。单击 Finish 导入文件。
  2. 更新您的 Rational Functional Tester 项目的版本路径,右键单击项目名称,并选择 Properties。然后选择 Java Build Path > Add Jars > your project name > lib > selenium-java-2.x.jar > OK
  3. 根据您的 Rational Functional Tester 设置,您可能需要导入和包含更多文件,这些文件都是 Selenium Client Driver for Java .zip 文件 (selenium-java-2.x.x.zip) 的一部分。如果您的 Rational Functional Tester 项目遇到编译或运行时问题,您的第一个操作应该是导入这些文件,将它们包含在项目的 Java Build Path 中。

记录和生成 JUnit 代码

您将使用 Firefox 内的 Selenium IDE 侧栏和 FlexMonkiumConsole 来记录测试脚本,并发现 Flex 应用程序的 GUI 对象属性。

发现 Flex GUI 对象属性

您最终可能想为您的 Flex 应用程序测试创建一个数据驱动的自动化框架,而 GUI 对象属性使您能够在自己的框架中映射和识别您的测试对象。在一个 Flex 应用程序中,在构建应用程序时,开发团队可以向每个 GUI 对象都分配一个惟一的标识符(例如,"Id" 属性)。以下步骤向您演示了如何发现这些属性:

  1. 打开 Firefox 并指向目标 Flex 应用程序的 URL。
  2. 选择 Firefox > View > Sidebar > SeleniumIDE,打开 Selenium IDE 侧栏,如图 1 所示。

图 1. Selenium IDE 侧栏和目标应用程序
显示了 Selenium 侧栏的 Firefox
  1. 首先启动 FlexMonkiumConsole,以确保 Selenium IDE + FlexMonkium 可以识别 Flex 应用程序,如图 2 所示。

图 2. 打开 FlexMonkiumConsole(单击黑色图标)
红色箭头指向 FlexMonkiumConsole 图标
  1. 现在,查看 FlexMonkiumConsole 和 Flex 应用程序的连接状态。绿灯 应该亮着(参见图 3 )。
    • 如果绿灯不亮,则需要调试您的应用程序以及您用自己的版本编译的 automation_monkey.swc 文件中的问题。
    • 如果绿灯亮了,那么您现在应该能够记录脚本和目标 Flex 应用程序中的对象属性。

图 3. 查看 FlexMonkium 状态
FlexMonkiumConsole 图标
  1. 在 FlexMonkiumConsole 窗口单击 green checkmark,并将指针悬停在您希望检查的 GUI 对象上面,以检查目标 Flex 应用程序中的 GUI 对象属性。您正在检查的对象将会用红色边框突出显示,您会看到对象的某些属性被显示出来,如图 4 所示。

图 4. 检查 Flex 应用程序中的 GUI 对象
GUI 对象检查
  1. 如果您希望看到所检查的 GUI 对象的所有属性,请单击该对象打开图 5 所示的窗口。

图 5. 查看扩展的 Flex 对象属性窗口
Verify Component Properties 视图

记录测试脚本并将它导出至 JUnit 代码

Selenium IDE 和 FlexMonkiumConsole 配合良好,可以记录并播放各种测试操作。然而,您最终需要能够通过 Rational Functional Tester 运行这些测试,所以您可以在 Rational Functional Tester 中构建数据驱动的自动化框架。以下步骤向您演示如何记录简单的脚本,并将它们导出至您可以从 Rational Functional Tester 运行的 JUnit 代码。

  1. 关闭所有浏览器,并打开 Firefox,浏览到您的目标 Flex 应用程序的 URL。
  2. 打开 Selenium IDE 侧栏:Firefox > View > Sidebar > SeleniumIDE(参见图 6)。请注意,默认情况下会按下红色的 "Record" 按钮。

图 6. Firefox 和准备好记录的 Selenium IDE 侧栏
Selenium IDE 记录
  1. 在您的 Flex 应用程序中完成一些操作,请注意 Selenium IDE 侧栏中捕获到的命令,如图 7 所示。
  2. 此时,单击红色的 Record 按钮停止记录。

图 7. 记录操作并查看被捕获的命令
在 Selenium IDE 录下的命令
  1. 从 Selenium IDE 导出 JUnit 代码,然后单击 File > Export Test Case As > FlexMonkium (JUnit) – Selenium – RC,如图 8 所示。

图 8. 导出 Rational Functional Tester 中使用的 JUnit 代码
选中的导出 JUnit 代码菜单
  1. 您会看到提示,要求您将代码导出到您所选择的文件名。代码是以 Java 类文件的形式导出的,如果您愿意的话,还可以将文件保存为一个 .txt 或 .java 文件。在本次演示中,保存的文件以 ExportedCode.java 为文件名。

JUnit 代码的示例见清单 1。


清单 1. 导出的 JUnit 代码示例
package tests;
import com.thoughtworks.selenium.*;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

public class ExportedCode {
 private Selenium selenium;
 private HttpCommandProcessor proc;

 @Before
 public void setUp() throws Exception {
 proc = new HttpCommandProcessor
("localhost", 4444, "*firefox", "http://9.75.229.34:8080/");
 selenium = new DefaultSelenium(proc);
 selenium.start();
 }

 @After
 public void tearDown() throws Exception {
 if (selenium != null) {
 selenium.stop();
 selenium = null;
 }
 }

 @Test
 public void myTestMethod() throws Exception {
 selenium.open("/optim/console#");
 for (int t = 0;; t++) {
 if (t >= 60) fail("timeout");
 try {

 if (proc.getBoolean("isFlexMonkey", new String[] {"<UIEvent command=\"SelectText\" 
value=\"userNameTextInput\"><arg value=\"0\"/><arg value=\"0\"/></UIEvent>"})) break;
 } catch (Exception e) { }
 Thread.sleep(500);
 }

 for (int t = 0;; t++) {
 if (t >= 60) fail("timeout");
 try {
 if (proc.getBoolean("isFlexMonkey", new String[] {"<UIEvent command=\"Input\" 
value=\"userNameTextInput\"><arg value=\"test\"/></UIEvent>"})) break;
 } catch (Exception e) { }
 Thread.sleep(500);
 }

 for (int t = 0;; t++) {
 if (t >= 60) fail("timeout");
 try {
 if (proc.getBoolean("isFlexMonkey", new String[] {"<UIEvent command=\"Input\" 
value=\"passwordTextInput\"><arg value=\"test\"/></UIEvent>"})) break;
 } catch (Exception e) { }
 Thread.sleep(500);
 }

 for (int t = 0;; t++) {
 if (t >= 60) fail("timeout");
 try {
 if (proc.getBoolean("isFlexMonkey", new String[] {"<UIEvent command=\"Click\" 
value=\"Login\"/>"})) break;
 } catch (Exception e) { }
 Thread.sleep(500);
 }


运行导出的测试用例

清单1 中显示的“生成的”代码尚有许多不足之处。无论您计划创建什么代码,都应该大幅清除这些代码。在本演示中,您可以创建一个 Rational Functional Tester 测试脚本,并使用所有 Rational Functional Tester 脚本中默认包含的 testMain(Object[] args) 直接调用导出的或生成的方法。

  1. 在您的 Rational Functional Tester 中新建一个包,将它命名为 tests,并将您之前创建的 ExportedCode.java 文件导入这个“tests”包。
  2. 选择 RFT > New > Empty Functional Test Script,新建一个 Rational Functional Tester 测试脚本。为您的测试脚本命名,并单击 Finish
  3. testMain(Object[] args) 方法中,添加类似于清单 2 所示的代码。

清单 2. Rational Functional Tester 测试脚本示例
				import resources.TestScriptHelper;
import tests.ExportedCode;

/**
 * Description : Functional Test Script
 * 
 */
public
				class TestScript extends TestScriptHelper {
   public
				void testMain(Object[] args) {
      ExportedCode expCode = new ExportedCode();
      try {
         expCode.setUp();// Setup AUT and Selenium components for testing
         expCode.myTestMethod();// Run recorded Flex test scripts
         expCode.tearDown();// Bring down AUT and Selenium components
      } catch (Exception e) {
 e.printStackTrace();
 }
 }
}



  1. 现在您可以运行一个测试。在工具栏中单击 Play 按钮(绿色圆圈),如图 9 所示。

图 9. 在 Rational Functional Tester 中运行或播放一个 Flex 应用程序测试
测试脚本已打开,可以随时运行

图 9 的大图

考虑构建一个自动化框架

Rational Functional Tester 本身对开发数据驱动的自动化框架有很大贡献,因为它实际上是一个成熟的 Java IDE,您能够按照您需要的任何方式扩展它,以解决各种自动化问题。以下是针对 Flex 自动化框架的几个考虑事项:

  • 在 objects.properties 文件中声明 Flex 应用程序的 GUI 对象,而不是在代码中声明它。
  • 将您的测试数据存储在一个平面文件、CSV 文件或数据库中,并用它来驱动测试。从长远角度来看,记录和播放将会成为维护的噩梦。
  • 为每个 Flex 对象类型创建操作或填写辅助方法,这样,您就可以轻松地从您的框架中调用这些方法
  • 为您的框架实现一个扩展的日志解决方案。有许多可从其他来源获得的扩展,可以用这些扩展改进 Rational Functional Tester 的日志。

结束语

如本文所述,利用 Selenium 和 FlexMonkium 对 Rational Functional Tester 进行扩展,可以创建一致的、具有强大支持的 Flex 应用程序自动化测试平台,该平台可以建立在一个功能强大的自动化框架中。

致谢

感谢 Sunaina Gupta 和 Tom Hammell 提供的关于 FlexMonkium 可能性的建议,并感谢他们在概念证明方面的帮助。特别感谢 Carlo Yaralian 和 Connie Ko 对在实际环境中实现这些工具所提供的帮助。


参考资料

学习

获得产品和技术

讨论

关于作者

作者的照片

Tim Hague 是 IBM 的一名自动化工程师,目前侧重于开发 IBM InfoSphere Optim 产品组合的自动化框架。他自 1994 年以来曾担任多个开发和 QA 职位,其中包括 Java 开发人员、Web 开发人员、QA 负责人、项目经理和业务分析师。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值