通过扩展 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 (查看 | 添加评论 - 登录)

平均分 (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 侧栏和目标应用程序

  1. 首先启动 FlexMonkiumConsole,以确保 Selenium IDE + FlexMonkium 可以识别 Flex 应用程序,如图 2 所示。

图 2. 打开 FlexMonkiumConsole(单击黑色图标)

  1. 现在,查看 FlexMonkiumConsole 和 Flex 应用程序的连接状态。绿灯 应该亮着(参见图 3 )。

    • 如果绿灯不亮,则需要调试您的应用程序以及您用自己的版本编译的 automation_monkey.swc 文件中的问题。
    • 如果绿灯亮了,那么您现在应该能够记录脚本和目标 Flex 应用程序中的对象属性。

图 3. 查看 FlexMonkium 状态

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

图 4. 检查 Flex 应用程序中的 GUI 对象

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

图 5. 查看扩展的 Flex 对象属性窗口

记录测试脚本并将它导出至 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 侧栏

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

图 7. 记录操作并查看被捕获的命令

  1. 从 Selenium IDE 导出 JUnit 代码,然后单击 File > Export Test Case As > FlexMonkium (JUnit) – Selenium – RC,如图 8 所示。

图 8. 导出 Rational Functional Tester 中使用的 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;@Beforepublic void setUp() throws Exception {proc = new HttpCommandProcessor
("localhost", 4444, "*firefox", "http://9.75.229.34:8080/");selenium = new DefaultSelenium(proc);selenium.start();}@Afterpublic void tearDown() throws Exception {if (selenium != null) {selenium.stop();selenium = null;}}@Testpublic 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* */
publicclass TestScript extends TestScriptHelper {publicvoid testMain(Object[] args) {ExportedCode expCode = new ExportedCode();try {expCode.setUp();// Setup AUT and Selenium components for testingexpCode.myTestMethod();// Run recorded Flex test scriptsexpCode.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 对在实际环境中实现这些工具所提供的帮助。

参考资料

学习

  • 下载应用程序的链接:

    • 从 Mozilla 网站下载 Firefox 浏览器。
    • 从 Selenium HQ 网站下载并安装 Selenium 组件。
    • 从 Gorilla Logic 网站下载并安装 FlexMonkium 组件。
  • 访问 developerWorks 的 Rational Functional Tester 学习路线图 获取更深入的介绍信息。浏览 Rational Functional Tester Information Center,您也可以在此观看一个简短的 Rational Functional Tester 视频介绍。查看 Rational Functional Tester Plus,这是一个软件应用程序测试包。
  • 访问 developerWorks 的 Rational 软件专区,获得 Rational Software Delivery Platform 产品的技术资源和最佳实践。
    • 随时关注 developerWorks 技术活动和网络广播,包括各种 IBM 产品和 IT 行业主题。
    • 参加 developerWorksLive! 技术讲座,快速了解 IBM 产品和工具,以及 IT 行业趋势。
    • 观看 developerWorks 演示中心,包括面向初学者的产品安装和设置演示,以及为经验丰富的开发人员提供的高级功能。
  • 提高您的技能。查看 Rational 培训和认证 目录,其中包含了许多广泛议题的课程类型。您可以随时随地学习它们,许多 “入门” 课程都是免费的。

获得产品和技术

  • 免费试用 Rational Functional Tester,要求注册。
  • 以最适合您的方式 IBM 产品评估试用版软件:下载产品试用版,在线试用产品,在云环境下试用产品,或者在 IBM SOA 人员沙箱 中花费几个小时来学习如何高效实现面向服务架构。

讨论

  • 加入 developerWorks Functional and GUI Testing 讨论论坛,提出有关 Rational Functional Tester 以及一般测试主题的问题并参与讨论。
  • 评分或评论 Rational 软件。以这种方式进行评分或评论很快、很简单,真的。
  • 通过 撰写一篇 developerWorks 文章,分享您的知识并帮助其他使用 Rational 软件的人。了解 好的 developerWorks 文章有何特点,以及如何写出好文章。
  • 在 Facebook、Twitter (@ibmrational) 和 YouTube 上关注 Rational 软件,并发表您的评论和请求。
  • 加入 Rational 论坛、Rational cafés 和 wiki,提出问题并回答问题,提高您的专业知识。
  • 获得思想领袖的社交网络。加入 Rational 社区,分享您的 Rational 软件专业知识,并获得与同行的联系。
  • 加入 developerWorks 中文社区,与兴趣相同的人进行交流,并回复 面向开发人员的博客。

关于作者

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

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

  1. IBM Rational Functional Tester用户手册(一)

    一.定制functional test,使其更易使用 (一)   定制functional test,使其更易使用 你可以定制functional test的外观和行为来增强functional te ...

  2. Adobe终于在Flash Player 11和Air 3上支持3D了

    Adobe终于使他的Flash播放器和Air真正支持3D游戏了,在接下来的10月份,Adobe计划将发布该项技术. 如果进展顺利并让游戏开发者们接受, 它能帮助开发人员创建令人瞠目的三维动画.图形游戏 ...

  3. Adobe Flex是什么玩意儿?

    什么是Adobe Flex? 就像Flash一样, Flex能够制作出可以被Flash Player播放的SWF文件.但是,Flex主要是开发者(程序员)的工具,并且开发Flex应用程序的方式和开发F ...

  4. 对Adobe Flex的十大误解

    在Qcon上,Adobe的James Ward和InfoQ.com一起分享了他推广传播Flex应用框架过程中所遇到的对Adobe Flex的十大误解. 为了运行Flex应用程序用户需要安装新东西. W ...

  5. Adobe Flex的十大误解

    在Qcon上,Adobe的James Ward和InfoQ.com一起分享了他推广传播Flex应用框架过程中所遇到的对Adobe Flex的十大误解. 为了运行Flex应用程序用户需要安装新东西. W ...

  6. 对Adobe Flex的十大误解 转载

    [url]http://www.blogjava.net/vip01/archive/2007/12/18/168462.html[/url] [url]http://www.adobe.com/pr ...

  7. 对Adobe Flex的十大误解(转)

    在Qcon上,Adobe的 James Ward和InfoQ.com一起分享了他推广传播Flex应用框架过程中所遇到的对Adobe Flex的十大误解. 为了运行Flex应用程序用户需要安装新东西. ...

  8. Adobe Flex 3.0 和 AIR 1.0 正式发布

    恰逢搜狐十周年庆典,AIR真的来了.. 来自:http://www.dengjie.com/?p=1236 Adobe Flex 3.0 和 AIR 1.0 正式发布 是时候将 Web 应用往桌面上搬 ...

  9. Adobe Flex UIComponent LifeCycle

    Adobe Flex UIComponent LifeCycle 11 十二 2010 Filed under: Life is Cool! Author: Alvin / Aedis.Ju 将文章转 ...

最新文章

  1. 关于2012年度土建工程专业中级专业技术资格考试有关问题的通知
  2. Linux C :线程操作和线程同步的多线程并发编程
  3. 【DP】【期望】$P1850$换教室
  4. 软件测试bug文档模板,软件bug测试记录模板
  5. lingo入门(数据部分)
  6. php微信拍照图库js接口,ThinkPHP微信实例——JSSDK图像接口多张图片上传下载并将图片流写入本地...
  7. docker 导出堆栈信息.hprof_JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用...
  8. 基于redis购物车java代码_基于redis实现购物车基本功能
  9. 计算机基础(三):srpintf()函数小结
  10. 时间序列-N-CNN-LSTM
  11. iOS直播点赞动画,iOS直播心型点赞动画
  12. 纯福利文章、送5本Java核心技术(不定期送福利)
  13. 记录php项目遇到502和504 Bad Gateway问题
  14. python实现爬虫收集图片 花瓣网_利用Python抓取花瓣网美图实例
  15. 【渝粤题库】国家开放大学2021春2018货币银行学题目
  16. python 爬虫爬取bilibili
  17. matlab中提取公因子化简,利用MATLAB化简表达式或者多项式 | 望天博客
  18. Java标准I/O流编程一览笔录
  19. python 文本转excel_Python 文本(txt) 转换成 EXCEL(xls)
  20. linux 鼠标卡顿,树莓派鼠标延迟以及其它问题汇总

热门文章

  1. 标准成本法,你的优势在哪?
  2. Android OpenGL动态壁纸问题总结
  3. ElementUI 组件 el-autocomplete 实现文本框历史查询建议
  4. 计算机文字处理选择题,网络学院统考计算机文字处理选择题及答案-20210314081302.docx-原创力文档...
  5. Linux简明系统维护手册
  6. 简单QA:TF-IDF句子相似度计算
  7. HTTP请求工具类,支持https
  8. python十进制转化为二进制_python 二进制与十进制之间的转换
  9. Arduino SPI + SPI Flash芯片W25Q80BV
  10. JS/AS(Flash)通信失效的可能原因