使用 FlexMonkey 测试 Flex

  • Jon Rose
  • 张龙

2008 年 10 月 24 日

话题:Java语言 & 开发架构

在这篇新闻中,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语言 & 开发架构