使用 IBM Rational Functional Tester 实现自动化框架: 模块化 软件测试
抽象、封装,以及其它计算机科学术语
我通常不会大量使用术语,但是由于模块化框架是基于一些计算机科学基本原理的,所以看起来我们要花一些时间来谈论这些基本原理。一个模块化框架的第一个基本原理是,努力尝试在一个时间关注于一个逻辑功能块,也称作为抽象。使用抽象,您可以减少和排除一些细节,不用立即关联到您要进行编码的功能上。在模块中,您要关注于将控制从您的测试用例中分解出来 。通过控制,我的意思是被测试应用程序中的用例流和功能。对比数据驱动的框架(本系列中所涵盖的下一个框架),在那您更加关注于将数据从您的测试用例中提取出来。而控制的抽象就是活动的抽象。
模块化框架的第二个基本原理与抽象紧密相关。这就是封装的基本原理。在封装中,您要将关系紧密的程序元素(脚本、类等等)放在一个更大的、更抽象的实体(其它脚本和类)中。封装为您提供了将相关联的任务和操作集成在一起的技术。它也通过提供一个稳定的接口来为您保护您的脚本免受程序变更的影响,此接口能够隐藏您的脚本所执行的实际操作。这是一类隐藏的信息 ,您将在这里保护您的测试脚本;让它们都调用相同的脚本和类集合,这样在您需要进行变更时,这些变更将自然地对您的所有测试脚本生效。
模块化框架的第三个基本原理关注分离。关注分离是将一个程序分解成在功能上尽可能少重叠的独立特性。这个基本原理在您执行封装时会给您提供指导。通常,在您计划如何为被测试应用的特性和行为进行分离和组织测试代码时,您将会使用关注分离这个基本原理。
在本系列的三个框架中,模块化应当是最容易理解和掌握的。以上描述的这三个基本原理是众所周知的编程方法,并且今天的大多数开发人员在使用它们时甚至没有积极地思考过。模块化框架的目标就是通过应用这些基本原理,以改进您的自动化测试套件的可维护性和可扩展性。让我们看一下模块化的几个简单例子,然后我们将返回来,讨论一下有关这种方法的优势和劣势。
使用一个类来实现模块化
在这个例子中,我们将使用对 www.BookPool.com 的一个测试。在列表1中所显示的记录脚本启动了访问 BookPool.com 的浏览器,搜索有关软件测试方面的书籍,并验证应当在第一个返回结果页面中的三本书。
列表 1. 记录的 BookPool.com 搜索脚本
package tests;
import resources.tests.bookpool_search_recordHelper;
import com.rational.test.ft.*;
import com.rational.test.ft.object.interfaces.*;
import com.rational.test.ft.script.*;
import com.rational.test.ft.value.*;
import com.rational.test.ft.vp.*;
public class bookpool_search_record extends bookpool_search_recordHelper{
public void testMain(Object[] args){
//Start the browser and load BookPool.com
startApp("www.BookPool.com");
//Search for 'software testing'
text_qs().click(atPoint(74,7));
browser_htmlBrowser(document_bookpoolDiscountCompu(),
DEFAULT_FLAGS).inputChars("software testing");