如何定义一个良好的层次结构,是我们在构建测试框架首先需要考虑的问题。通常我们会把最基本的一些原子操作放在最底层,而在较上层封装这些操作,并开放相应的接口供最终的脚本开发者进行调用。这样往往会使得 Case 更加简洁易读。
根据面向对象基本理论,我们首先要定义一些基础的控件类,用来代表那些需要在测试中进行操作的基本界面元素,象按钮,输入框等。如果你使用 RFT 测试 Java 或 Web 应用,那么你可以直接使用 IBM Package,在这个包里封装了所有的在 Java 和 Web 这两个 Domain 下的基本控件。通过在你的脚本中调用这些类,你就可以很方便地实现对被测应用的操纵。但是,我们所测试的应用是基于 Windows .Net 的,在这个包里没有对应的控件类可以利用,因此,第一步,我们要开发自己的控件类。
在实现了这一层之后,理论上说,我们可以直接在 Case 脚本里调用这些方法来实现对测试对象的操作。但这样做也有一个问题是,如果以后你对这些方法的名称进行了修改,或者因为程序实现的改变,原来的 A 类控件被 B 类代替,这时,势必会对所有已经编写好的 Case 脚本造成很大的影响,带来很大的代码维护量。因此为了隔离下层代码对上层 Case 的影响,我们在其中又加入了新的一层。最后的层次结构如下:
这个 Class 用来记录每个 Case 的名称和执行结果。它读取一个 Xml 模板文件,这个文件定义了哪些内容需要在测试结果中显示。在自动执行完成后,包括 Suite 名称,测试环境,Case 信息,测试结果等这些数据将会被写入,生成结果文件。最后通过一个事先定义好的样式表文件进行格式化,用网页的形式呈现。