追求代码质量: 使用 TestNG-Abbot 实现自动化 GUI 测试

发表于:2008-06-23来源:作者:点击数: 标签:代码质量自动化GUIgui
使用 Swing、AWT 和类似的技术构建用户界面通常会给 开发 人员进行测试带来挑战,原因如下: 底层图形框架的复杂性 GUI 中表现形式和业务逻辑之间的耦合 缺乏直观的 自动测试 框架 当然,前两个原因并不新鲜 —— 图形框架本来就很复杂,而且向 GUI 应用程序

使用 Swing、AWT 和类似的技术构建用户界面通常会给开发人员进行测试带来挑战,原因如下:

  • 底层图形框架的复杂性
  • GUI 中表现形式和业务逻辑之间的耦合
  • 缺乏直观的自动测试框架

当然,前两个原因并不新鲜 —— 图形框架本来就很复杂,而且向 GUI 应用程序添加业务功能总是会给测试造成麻烦。另一方面,过去几年中有许多方便的框架涌现出来,确实使 GUI 测试更加便利

本月,我将介绍一种新的框架,它极大地减轻了 GUI 测试的痛苦。

TestNG-Abbot 简介

TestNG-Abbot 源自于两个成功的开发人员测试框架的结合:Abbot 和 TestNG。Abbot 是一种 JUnit 扩展框架,主要目的是使 GUI 组件实现编程隔离,它还提供了一种验证 GUI 行为的简易方法。举例来说,可以使用它来获取对按钮组件的引用,使用编程的方法点击按钮,然后检验其操作。Abbot 还附带了一个脚本记录器,使用它就能够以 XML 格式布设测试场景,可以通过编程的方式运行它。

希望改善代码质量吗?
那么千万不要错过 Andrew 的 改善 Java 代码质量论坛,在那里可以学到关于代码度量标准、测试框架以及编写质量为先的代码的第一手知识

在本系列中,我已经介绍了一些关于 TestNG 的内容,这里将继续介绍 TestNG。基本上,TestNG 是 JUnit 的一个替代物。除了所有预期的功能外,它还增加了一些额外功能。正如我在其他文章中提到的一样,TestNG 特别适合于更高层次的测试,其中,它可以用来测试依赖关系并只返回失败了的测试 —— 简而言之,在测试 GUI 时,这类型测试非常方便。(参见 Resources中有关 TestNG 的更多内容。)

它的起源就如此让人印象深刻,所以 TestNG-Abbot 成为测试工具中的神童就没什么好奇怪的了。同 Abbot 一样,TestNG-Abbot 使 GUI 组件能够进行编程隔离。同时,它使用了 TestNG 的断言,将 GUI 操作细节提取到了简单的 fixture 中,后者能够公开验证方法。如能正确使用,TestNG-Abbot 的直观的 fixture 类能够使 GUI 测试如同从小男孩手里偷一块糖一样简单。(当然,您不会想那么干的!)

直观的 fixture 类

TestNG-Abbot 的当前版本支持七种 fixture 类型,其中一种类型用于操作按钮、菜单标签以及文本项组件,如文本字段。此外,这些 fixture 类型根据名字在逻辑上链接到了测试中的代码(即 GUI 组件)。这使得 GUI 和其测试实现了松耦合,这样做至少有以下两个好处:

  • 测试不会依赖于特定位置的 GUI 组件 —— 这样无需中断测试就可对其进行移动。
  • 可以在早期进行测试,并且不会受到开发期间布局和外观改变的影响。

虽然目前只支持七种 fixture 类型,很快就会支持其他 fixture 类型。更多的 fixture 类型只会增加 TestNG-Abbot 在编程验证 GUI 方面的高效性。


GUI 验证不再普通!

虽然 TestNG-Abbot 使得验证 GUI 的过程更加简单,这并不意味着这个过程很简单。必须使 GUI 测试区别于单元或组件测试。验证 GUI 中业务规则的过程变成了对用户场景进行验证;或者,换种说法,GUI 测试包括验证可见状态的改变。

比方说,如果按下了定单输入 GUI 上的保存按钮,业务规则会保证命令的内容被保存到数据库中。然而,在一个用户场景中,会保证成功的状态信息被插入了按钮下 —— 这正是使用 TestNG-Abbot 能够编写的测试。事实上,如果 GUI 设计良好的话,可以测试被保存到数据库中的命令内容而无需 测试 GUI。接着您还可以同时并及早地编写这两个特别的测试。

原文转自:http://www.ltesting.net