InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

使用FlexMonkey测试Flex

作者 Jon Rose 译者 张龙 发布于 2008年10月24日

领域
架构 & 设计,
企业架构,
语言 & 开发
主题
Web 2.0 ,
RIA ,
单元测试 ,
富客户端/桌面 ,
Java
标签
Flash ,
Flex ,
Web 2.0 ,
Adobe集成运行时/AIR ,
Adobe

在这篇新闻中,InfoQ.com与FlexMonkey项目创建者、来自Gorilla Logic的Stu Stern一起讨论了FlexMonkey。FlexMonkey是一个用来测试Flex应用的开源工具,它采用记录/回放模式。

Stern首先对FlexMonkey进行了概要性描述:

FlexMonkey是一个开源的Flex应用和库,可以记录和回放用户界面的交互并生成可重复使用的测试用例,你可以在持续集成框架(如Cruise Control)中运行这些测试用例。

接下来InfoQ问询了FlexMonkey与其他Flex测试工具有何区别:

我们注意到FlexMonkey是唯一一个完全基于Flex的记录/回放工具。它无需浏览器插件(当然除了Flash player以外),也用不着特殊的脚本语言。记录下来的UI场景可以作为ActionScript的源代码,它们既可读又可编辑。甚至不需要使用记录工具就可以轻松创建测试,因为利用FlexMonkey API,我们没必要直接在ActionScript中指定大多数的UI操作。

如果你了解Flex,那么你对FlexMonkey的使用就几乎没有任何问题,能运行Flex的地方就能运行FlexMonkey(也就是说几乎任何平台都可以)。

接下来,Stern谈到了许可协议:

FlexMonkey本身基于Apache 2许可,这意味着你可以修改其源代码,并将其作为其它开源或商业产品的一部分。很显然,Gorilla Logic认为将FlexMonkey放出价值更大,而并不是将其作为一个产品来卖!

但我们应该注意到FlexMonkey依赖于Adobe的Flex Automation API,它位于FlexBuilder专业版中。FlexBuilder标准版包含了Automation API的试用版,这限制了应用每次加载时所允许的重放次数。你可以通过FlexBuilder标准版来试用FlexMonkey,如果觉得满意再升级到专业版。我们希望Adobe将Automation API加到大多数已开源的Flex平台中,但现在你不得不使用FlexBuilder专业版。专业版还可以进行性能与内存分析,因此如果你正在进行要求严 格的企业级开发,那么无论如何也要升级到专业版。

InfoQ谈到了测试异步功能所面临的挑战:

FlexMonkey所生成的每个UI事件都是异步的,而且FlexMonkey都会在生成每个后续事件前暂停(默认暂停500毫秒)。如果你有一个运行时间很长的数据库查询(比如由按钮点击所触发),那么在按钮事件产生后你可以增加延迟时间。

像FlexUnit这样的测试运行框架也需要针对异步操作进行特殊的处理。FlexMonkey API本身就是异步的,因此你需要通过某种手段告诉运行器测试何时完成。当FlexMonkey在一个测试用例中处理完所有的事件时它会产生一个 READY_FOR_VALIDATION事件。如果使用FlexUnit,你需要在调用下一个测试用例前使用FlexUnit的addAsync方法来告诉FlexUnit等待这个事件完成。

我还要补充一下,尽管FlexUnit是当前唯一一个直接集成到FlexMonkey中的 xUnit框架,但你仍然可以将其他针对Flex的xUnit框架与FlexMonkey搭配使用。我再强调一次,FlexMonkey测试其实就是ActionScript。此外,你可以直接将其他任何xUnit框架集成到FlexMonkey中并生成代码,就像我们对FlexUnit所做的一样 (请放心大胆地去做吧)。

InfoQ紧接着问道,FlexMonkey是如何使用Flex Automation框架的:

当你运行一个使用了Automation API的应用时,每个UI事件(如按钮或者鼠标点击)都会生成一个“automation事件”来描述相应的UI事件。这种包含在automation事件中的信息可以反馈到Automation API中并产生一个假的按钮点击,而Flex对其的响应就好像它是原生的UI事件一样。正如我之前所提到的,通过使用FlexMonkey API,你可以创建一个此前并没有被Automation API记录下来的事件。我们可以使用FlexMonkey记录并回放几乎任何Flex UI事件,包括相关的“exotic”操作,比如某个DataGrid里的itemEditor是一个ComboBox,那么我们就可以从中选择一个条目。

最后,InfoQ问Stern,读者还需了解什么:

尽管我们的开源项目还是个新兵,但FlexMonkey却相当稳定。它有丰富的文档。大多数人能在不到一小时内就成功运行起来。

你可以运行http://keystone.gorillalogic.com/~sstern/MonkeyContacts.html上的这个示例应用来快速了解FlexMonkey。如果你运行这个示例,你会看到记录并回放UI场景是多么的简单,你还能看到生成的ActionScript是什么样子的。

该项目本身位于http://flexmonkey.googlecode.com。我们希望看过这篇新闻的每个人都能加入我们这个快速发展的社区!

查看英文原文:Flex Testing with FlexMonkey

译者 张龙 热衷于编程,乐于分享,对新技术有强烈的探索欲,对Java轻量级框架有一定研究。

深度内容

专访Jeffery Richter:Windows 8是微软的重中之重

Jeffery Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffery Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。

解析JDK 7的动态类型语言支持

随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令。这条新增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8可以顺利实现Lambda表达式做技术准备。在这篇文章中,我们将去了解JDK 7这项新特性的出现前因后果和它的意义。