背景简介
SWTBot 是一个基于 Java 的新兴开源项目,致力于实现对基于 SWT 和 Eclipse 的应用程序 GUI 的自动化测试。当前,基于 eclipse 和 SWT 的产品非常多,随之而来的对于这一类产品的自动化测试需求也就越来越多。SWTBot 本身是一种轻量级,易用的工具,能够很好的实现对于 SWT 和 Eclipse 产品的自动化测试。但是由于 SWTBot 目前尚处于孵化阶段,对于如何将其成功应用到实际项目当中论述很少。
当前来说,对于基于 SWT 和 Eclipse 的应用程序的用户交互界面进行自动化测试通常是复杂繁琐的。本文介绍一种基于 SWTBot 的测试框架能够很好的帮助开发人员和测试人员实现 GUI 的自动化测试。
体系结构
一个定义良好的测试框架可以大大提高测试用例开发人员的工作效率。本文要介绍的测试框架基于 SWTBot,以结构分层,代码重用,维护简单,扩展简便为原则,对其功能进行封装和扩展,使其易于理解和使用。框架通过简单的维护就能适应测试产品的变化。
对于 GUI 测试来说,我们会把一些基本的操作放在最底层。例如:对原子操作进行封装,测试框架工具类,以及一些对通用控件的封装。
在此之上的第二层,我们会把测试用例当中使用到的所有组件进行封装。这些组件包括一切编写测试用例需要用到的对象,例如对话框 (Dialog),编辑器 (Editor)。在此基础上,给出针对这些对象的一些接口,例如 setText(),click(),或者给出得到这些对象实例的方法。
我们知道,GUI 上有大量的文字信息,像对话框的标题,按钮的名称。我们也可以把这些信息放在下一层 ( 测试用例层 ) 中处理,但是其缺点是显而易见的。首先,这些文字信息的数量很多,如果全都写在测试用例中,代码会显得异常混乱。其次,如果这些信息发生了变化(这种可能性是很大的),在测试用例数量很大的情况下,想找到这些信息再一一进行修改是一件极其困难的事情。在我们的测试框架中,这些文字信息被放在配置文件中进行统一管理,一个控件对象对应自己的配置文件,在封装这些控件对象的同时对其包含的文字信息进行封装并提供相应的方法。这样的处理避免了上面提到的问题,很好的杜绝了下层代码对上层测试用例的影响,实现了代码分离。
编写测试用例的工作在最上层完成。在这一层当中,测试用例开发者的工作变得相当简单。他们通过调用第一、第二层封装对象提供的方法和接口来实现测试步骤。
综上所述,我们的测试框架的体系结构如下:
图 1. 测试框架体系结构
在下面的几章,我会详细介绍本框架的结构和具体实现。
工具层, 封装 SWTBot 的原子操作
我们框架的基础是 SWTBot 提供的对 SWT 和 Eclipse 的操作功能。所以,本框架的最底层就是对 SWTBot 原子操作的封装以及其他一些工具类。
图 2. 工具层基本结构
com.ibm.developerworks.dbconnect: 提供数据库连接的管理和通用方法。
com.ibm.developerworks.eclipse:提供对通用的 Eclipse 组件的封装和相应方法。
com.ibm.developerworks.finders:对 SWTBot 进行扩展,提供一些针对相应产品,易于使用的 finder。
com.ibm.developerworks.matchers:提供编写测试用例时需要用到的匹配方法,例如正则表达式匹配,通过 label 或者 text 等条件匹配。com.ibm.developerworks.utils:封装各种 SWT 控件对象的操作,例如 Mouse,Menu,TableItem 等。
com.ibm.developerworks.waits:对 SWTBot 自有的 Conditions 进行封装和扩展,提供一些针对特定产品的 wait 方法。
com.ibm.developerworks.widgets:封装一些公用的 widget。