Swing UI测试库比较:FEST,WindowTester Pro等

时间:2011-05-09 16:27:26

标签: java unit-testing swing user-interface

我不会尝试重复这样的问题:

Unit testing framework for a Swing UI

我想知道的是,有没有人对各种Swing Unit测试库进行任何良好的比较,例如:

我们从未进行任何GUI测试,因此我们不熟悉可能存在的问题。

提前致谢。

5 个答案:

答案 0 :(得分:9)

我在 Abbot FEST 方面有过一些相当不错的经验,两者都是用于Swing UI测试的开源库。

Abbot似乎不再受支持了;它有点难以进入,因为录音机没有生成足够好的脚本。实际上,我已经使用录音机来“学习”脚本语言(XML标签),最后我用一个简单的文本编辑器直接自己编写了脚本。这很有效。

FEST采用另一种方法,您必须使用Java代码进行代码测试。这使得它成为为Java开发人员保留的工具,而Abbot可以被其他人使用(例如QA团队测试人员)。

这两种工具以及可能与任何UI测试工具相关的主要问题是:

  • 找到一种方法唯一地标识组件,而不使用其位置或文本内容(可以从一个修订版更改为另一个修订版,或者难以在不同的{{1}中测试相同的应用程序})
  • 在脚本中
  • 使用正确的时间:这些测试工具可以比人类用户更快地运行您的UI,因此您的UI可能不够快(例如,它可能需要几十毫秒才能完成打开一个对话框,甚至更多来填充数据库中的表)

对于这两个问题,虽然有一个解决方案。

对于组件识别,我强烈建议在UI中命名所有Swing组件(使用Locale)并使用命名策略,这可以确保永远不会有2个具有相同名称的组件同时可见。在guts-gui库中,我甚至开发了a strategy that automatically names Swing components作为字段存储在面板中,这有助于在应用程序编码后添加组件名称。

对于脚本计时,两个框架在等待对话框出现时接受超时值;考虑到您的测试可能在具有更多或更少可用功率的不同类型的机器上运行的事实,您可以选择最佳值。您应该使用足够大的超时以确保脚本不会报告错误否定(例如,1秒后出现的对话框,而脚本只等待500毫秒),但也不会太长,以便在有真实时错误(例如,预期的对话框永远不会出现)。我建议使用2到5秒的超时时间,这应该适合大多数测试平台和大多数应用程序。

希望这有帮助。

答案 1 :(得分:5)

Jemmy为UI测试提供了相当不错的功能。虽然它不是JUnit测试的明智开箱即用解决方案,但它可以很容易地扩展到适合您的目的。

我不确定其他UI测试工具,但与RFT相比,它为您提供了实际UI对象的句柄(RFT返回代理对象)。根据我的经验,这可能很方便。

这是一个开源项目(根据CDDL许可),并且正在积极开发中。

我认为其他流行的(或曾经是??)是jfcUnit。虽然我不认为这是在积极发展。

答案 2 :(得分:3)

有许多因素需要考虑。记录/重放,单元测试支持,代码更改性质,许可,成本,多平台支持,多种外观测试,支持i18n测试...您的列表是什么样的?

对我们使用的工具的一些评论。

IBM Rational Functional Tester

这具有录制脚本和播放的能力。它支持验证点。最大的优点之一是不需要更改代码。 RFT修改JVM并使用java辅助功能扩展来记录和测试。我们主要将它用于Java(具有大量2D和对话操作的swing / awt)。它也适用于浏览器。

RFT公开了两种识别GUI元素的机制。一个使用对象图。这非常弱,并且在长期可维护性方面存在问题。使用“find”API对程序员更友好,但需要更改代码。让所有具有正确名称的对象也有帮助。

完全不适合进行单元测试。

适用于Windows和Linux。

非常昂贵的浮动许可证在12000美元的范围内,固定许可证将花费一半。所有节点(记录测试和运行测试)都需要许可证。定价是近似的和陈旧的,但它会给出一个想法。

在Windows上需要真正的GUI会话。 (在使用VNC的Linux上可能没问题)

<强> Jemmy :  我们转向jemmy进行新的测试。支持windows,linux。它过去是免费的,不确定甲骨文的计划是什么。我们在jemmy之上添加了我们的测试层 - 用于断言和其他验证机制。关于“jemmy testing toolkit”的演示文稿中有关于jemmy的更多详细信息。

答案 3 :(得分:2)

2012年@AlexRuiz,FEST背后的主要开发人员决定stop development of FEST

FEST代码库后来分为AssertJ-Swing

跳过FEST并从AssertJ-Swing开始。

答案 4 :(得分:0)

您可能想尝试Swing Testing Toolkit。它使用不同的方法:它不会记录所有事件。测试说明降至最低。