现有 Flash 组件的自动化测试(非 UI)
-
03-07-2019 - |
题
我构建并维护了一组 Flash 组件,这些组件分发给发布商并允许他们与我们的系统集成。目前,该组件没有 UI,仅包含用于查询系统服务器、解析响应以及修改查询中发送的参数的编译代码。Flex 和 CS3 都有 As2 版本和 AS3 版本。我们典型的工作流程是这样的:
1.) 加载组件 2.) 在组件上设置参数 3.) 告诉组件查询我们的系统 4.) 等待一个事件,说明响应已被接收并解析 5.) 在组件上调用方法以检索和使用解析的数据
我们最近一直在谈论很多关于这些组件的自动化测试的内容,并且围绕 AsUnit 和 FlexUnit 等框架似乎有很多讨论。然而,我一直无法掌握如何有效地使用其中之一。这些示例和教程总是忽略现实世界的示例,而是提供多个类和过多的代码来测试示例函数是否返回 num1+num2。
我唯一能猜测的是,这些测试框架旨在从一开始就实现,并在开发开始时就内置测试套件、测试运行器和测试用例的规划。
我们组件的自动化测试必须确保属性设置正确,这些属性在请求中发送到我们的系统,考虑到发送的参数,收到的响应是正确的,解析的数据包含正确的信息,并且没有错误,不良响应,或者导致无限解析循环。
我的问题是,有没有什么方法可以自动测试现有的、广泛分布的、已建立的 Flash 组件,而无需完全重新设计它以适应测试框架?或者我误解了测试框架,而这已经是可能的?
更新:感谢您的回复。我已经开始将我的组件与 AsUnit 集成,并且我认为我非常了解它如何帮助我。然而,AS2 AsUnit 不支持异步测试用例,而且我很难找到支持异步测试用例的 AS2 单元测试框架。异步测试对于这个项目来说非常重要。有人对不同的框架有什么建议吗?谢谢!
解决方案
我们在项目中使用FlexUnit,我很满意。假设您的项目设计具有相当宽松的耦合度,您不需要为了测试代码而进行任何改变(如果有的话)。如果您已经在使用MVC框架,例如 Cairngorm 或 PureMVC ,FlexUnit应该非常轻松地集成。
但是我会说,我的Flash / Flex单元测试经验并不像Ruby或.NET等其他语言那样积极,原因有三个。首先,如此高度的动作脚本代码与UI相关,并且这种代码即使不是不可能测试也很困难。另一个原因是测试运行器不适合插入持续集成环境,例如 CruiseControl.NET 或 CruiseControl.rb ,因为它需要一个人来运行它并单击按钮。最后,单元测试的一个巨大好处通常是您可以将其与覆盖率分析工具一起运行,例如 NCover 或 rcov 。 Flash / Flex无法通过修改后的编译器进行此类分析,例如 Flexcover 一>
其他提示
很高兴听到你和AsUnit一起去了!
AsUnit是唯一能够在ActionScript 2和ActionScript 3中提供一致体验的单元测试框架。它不依赖于任何外部框架 - 尤其是Flex,并且在为项目创建测试后应该没有真正的问题事实。
AsUnit的最新版本支持ActionScript 2中的异步测试.as25分支可以在这里找到:
虽然我从未有机会在 ActionScript 中与单元测试人员一起工作,但在工作中我们创建了一个框架:
- 在测试应用程序中编译脚本,在我们的例子中是使用 flex
- 设置计时器(看门狗)应用程序,以防循环失败
- 运行该应用程序,该应用程序依次:
- 连接到 PHP 后端以获取测试用例
- 将测试馈送到组件
- 读取结果并将其发回
- 看门狗将启动并终止应用程序(以先发生者为准):
- 计时器超时(合理超时)
- 应用程序发回结果
- 如果还有其他测试要运行,请转至 2。
绝对不优雅,但完成了工作(这是使用 AS1 脚本)