模块化:使用IBM Rational Functional Tester实现自动化框架(1)

发表于:2007-06-11来源:作者:点击数: 标签:
编者注: 本文是基于使用IBM Rational Functional Tester for Java 和Web 6.1以及Windows XP Professional SP2进行编写的。代码范例将使用Java语言,但是所有概念也同样适用于Rational Functional Tester的.NET版本。 抽象、封装,以及其它计算机科学术语 我

编者注:本文是基于使用IBM® Rational® Functional Tester for Java™和Web 6.1以及Windows XP Professional SP2进行编写的。代码范例将使用Java语言,但是所有概念也同样适用于Rational Functional Tester的.NET版本。

抽象、封装,以及其它计算机科学术语

我通常不会大量使用术语,但是由于模块化框架是基于一些计算机科学基本原理的,所以看起来我们要花一些时间来谈论这些基本原理。一个模块化框架的第一个基本原理是,努力尝试在一个时间关注于一个逻辑功能块,也称作为抽象。使用抽象,您可以减少和排除一些细节,不用立即关联到您要进行编码的功能上。在模块中,您要关注于将控制从您的测试用例中分解出来。通过控制,我的意思是被测试应用程序中的用例流和功能。对比数据驱动的框架(本系列中所涵盖的下一个框架),在那您更加关注于将数据从您的测试用例中提取出来。而控制的抽象就是活动的抽象。

模块化框架的第二个基本原理与抽象紧密相关。这就是封装的基本原理。在封装中,您要将关系紧密的程序元素(脚本、类等等)放在一个更大的、更抽象的实体(其它脚本和类)中。封装为您提供了将相关联的任务和操作集成在一起的技术。它也通过提供一个稳定的接口来为您保护您的脚本免受程序变更的影响,此接口能够隐藏您的脚本所执行的实际操作。这是一类隐藏的信息,您将在这里保护您的测试脚本;让它们都调用相同的脚本和类集合,这样在您需要进行变更时,这些变更将自然地对您的所有测试脚本生效。

模块化框架的第三个基本原理关注分离。关注分离是将一个程序分解成在功能上尽可能少重叠的独立特性。这个基本原理在您执行封装时会给您提供指导。通常,在您计划如何为被测试应用的特性和行为进行分离和组织测试代码时,您将会使用关注分离这个基本原理。

在本系列的三个框架中,模块化应当是最容易理解和掌握的。以上描述的这三个基本原理是众所周知的编程方法,并且今天的大多数开发人员在使用它们时甚至没有积极地思考过。模块化框架的目标就是通过应用这些基本原理,以改进您的自动化测试套件的可维护性和可扩展性。让我们看一下模块化的几个简单例子,然后我们将返回来,讨论一下有关这种方法的优势和劣势。

使用一个类来实现模块化

在这个例子中,我们将使用对www.BookPool.com的一个测试。在列表1中所显示的记录脚本启动了访问BookPool.com的浏览器,搜索有关软件测试方面的书籍,并验证应当在第一个返回结果页面中的三本书。

列表1.记录的BookPool.com搜索脚本

在我查看这段测试脚本时,我看到了某些我想要能够在许多其它脚本--执行一个搜索(图1)--中做的东西。有三行代码用于搜索:在qs域上的点击,用于我们的搜索标准的inputChars,以及在搜索按钮上的点击。

BookPool.com search form

图1:BookPool.com搜索表单

我们知道,有可能开发人员某天会修改qs域的名字,或者他们可能使用一个搜索按钮的不同gif文件,您应当创建一个模块为您做这件事情。使用这种方式,如果您在某一时间必须修改您搜索的方法,您可以在一个地方修改它,它会在您所有调用该模块的测试脚本中生效。除此之外,您在您所有的测试脚本中,减少了执行一个搜索的代码行数量,从三个减少到一个。

列表2显示了此搜索模块的代码。

列表2.BookPool.com搜索类

列表3.显示了新的测试脚本:

列表3.模块化的BookPool.com搜索脚本

Package tests;

import classes.*;

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_modularity extends bookpoolHelper{

public void testMain(Object[] args) 

{//Start the browser and load BookPool.com

startApp("www.BookPool.com");

//Search for 'software testing' 

new bookpool_search().performSearch("software testing");

//Verify these three books are returned in

//the first results page

TestingComputerSoftware_textVP().performTest(2.0, 20.0);        

LessonsLearnedInSoftwareTestinVP().performTest(2.0, 20.0);        

HowToBreakSoftware_textVP().performTest(2.0, 20.0);

//Exit  browser_htmlBrowser(document_bookpoolDiscountCompu(),

MAY_EXIT).close(); }

}

|- XML error:  The previous line is longer than the max of 90 characters -|

这和创建一个搜索类并复制和粘贴搜索代码相比,并不完全一样简单(就像上面的代码所体现的)。我也必须更改脚本的帮助类。如果您注意到列表3,现在有一个bookpoolHelper类代替了原来的bookpool_search_recordHelper类。这个步骤是一个简单的复制和粘贴。我们在新的bookpoolHelper类中所有必须修改的就是类的名字。如果您不熟悉IBM® Rational® Functional Tester中帮助类的概念,您需要花一些时间阅读在线帮助来熟悉它们。除了特别细节的任务描述,您将需要理解那里所有的内容。

要继续这个例子,您现在可以增加您想要的类。您可能要增加一些类,处理主页左边上的BookPool.com的浏览树。然后,所有这些类可以用到任何脚本中。所有您必须做的就是,在您增加更多的测试脚本和覆盖更多的程序功能时,确保更新bookpoolHelper类。


共3页: 1 [2] [3] 下一页

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

...