级别: 初级 Michael Kelly (Mike@MichaelDKelly.com), 高级顾问, Fusion 联盟
2005 年 11 月 28 日 这篇文章将帮助你如何开始使用IBM Rational Functional Tester 6.1。它引领你熟悉记录三个功能测试脚本并把它们放在一起合为一个回归测试的过程。
编者注:本文是基于IBM软件开发平台版本6.1以及Windows XP Professional SP2的。
你已经有了IBM® Rational® Functional Tester 6.1 for Java™,你的电脑上
安装了网络,而且你已经对它们作了一些尝试,但是你还不确定如何使用它来对你投入到自动化上的时间获得最大的回报。这篇文章适用于初学者,它将循序渐进地带领你熟悉使用Rational Functional Tester创建功能测试脚本的过程。
我们将记录三个功能测试脚本并用它们组成回归测试。脚本将是非常基本的,建立时间不会长,但是在建立它们的过
程中我们将看到Functional Tester的一些关键特性。我们将使用BookPool.com作为我们的应用程序测试对象。请记住该站点的内容变化(这是会经
常发生的)将会影响本文中包含的例子的运行结果。
首先,介绍一些术语
功能测试的准确定义是什么?功能测试是一个帮助你决定系统功能是否符合预期设计的测试。使用功能测试
你可以测试操作和图形用户界面对象的外观。比如,一个命令按钮的功能测试既包括了对按下按钮时的动作的测试,也包括了对按钮的大小,位置
和颜色的测试。
在自动化的环境中,回归测试指的就是运行以前开发的测试脚本,把最新编译的被测试应用程序与你早先
建立的基准进行比较。回归测试揭示了从上次编译以来被引入到应用程序的不同之处。由此你可以评估这些差异来决定它们实际是缺陷还是经过考虑
的变化。
测试的选择
自动化测试的第一步是选择你的测试。为回归测试选择需要自动化的测试既是一门科学又是一项艺术,而且为了有
效地进行选择,花费时间学习一些策略是很重要的。你可以遵从一些简单的指导原则并使用一些常识,但是通常你还需要一定的直觉,这意味着你做
得越多你得到的也越多。由于篇幅所限,我在这里无法介绍选择哪些测试进行自动化,哪些测试保留为人工测试的细节,但是我建议你可以参考关于这一
主题的很多优秀文章,比如本文的资源部分列出的那些文章。
建立功能测试项目
在你可以记录脚本之前,你需要一个功能测试项目。按照下列步骤建立功能测试项目:
- 打开IBM Rational Functional Tester 6.1 for Java and Web。
- 如果工作空间向导打开了,点击OK选择默认的工作空间。
- 一旦Functional Tester打开完毕,确保已经通过点击屏幕右上角的Functional Test按钮选择了
Functional Test视图。
- 从菜单中选择File > New > Functional Test Project。
- 在“建立一个新的功能测试项目”对话框中,输入项目的名称(在我们的例子中,使用名字BookPool)并
点击完成。
图1 “建立一个新的功能测试项
目”对话框
这样就在功能测试项目视图中加载了项目。
建立一个功能测试脚本
现在我将带你进入为了回归测试的目的而记录三个功能测试的步骤。脚本将是很基本的,建立不需要很长时间,但是在建立
它们的过程中你将了解一些Functional Tester的关键特性。
在你开始记录你的回放脚本以前,你将需要为它们在项目中建立一个文件夹。这将帮助你避免混淆,在有很多脚本的
情况下井井有条,而且在后面你需要一次执行所有的回放脚本时它还将对你有所帮助。
- 建立文件夹的方法是,右键点击功能测试项目视图中的BookPool项目,从弹出的菜单中选择添加测试文件
夹。
图2 从菜单中
选择添加测试文件夹
- 输入文件夹的名称(在我们的例子中,使用RegressionScripts)并点击完成。
图3 建立测试
文件夹对话框
你应该在功能测试项目视图中看到文件夹被列在BookPool项目下。
测试一:检验客户是否可以搜索
首先,我将告诉你如何建立一个检验网站是否包含允许客户进行搜索的功能的测试脚本。对这个测试来说,你只需要
简单地打开网站,在搜索域中输入文本,点击搜索,然后检验是否出现了正确的结果总数以及前三个搜索结果是否是你期待的书名。
搜索
- 在功能测试项目视图中右键点击RegressionScripts文件夹,在弹出的菜单中选择添加带有记录的脚本。
图4 功能测试
项目视图
- 这将打开“记录一个新的功能测试脚本”向导。为脚本命名(在我们的例子中,使用VerifySearch)然后
点击完成。
图5 “记录一
个新的功能测试脚本”向导
- 这将打开功能测试记录监视器。从这个监视器你可以启动你想要测试的应用程序,记录程序内的动作,记
录检验结果的验证点,并在记录的同时向脚本中加入数据驱动元素。在这个测试中,你只需要把重点放在基本步骤上——包括一些简单验证点的添
加。
图6 功能测试
记录监视器
- 打开浏览器访问站点www.BookPool.com。点击启动应用程序图标来打开“启动应用程序”向导。默
认情况下不会列出任何应用程序,因此你需要把BookPool网站加入应用程序列表。
图7 “启动应
用程序”向导
- 点击编辑应用程序列表按钮。这打开了应用程序配置工具。
图8 应用程序
配置工具
- 点击右边的添加按钮。这打开了“添加应用程序”向导要求你选择你添加的应用程序的类型的部分
。
图9 在“添加
应用程序”向导中选择应用程序类型
- 点击HTML应用程序单选按钮然后点击下一步。添加应用程序向导要求你选择一个HTML应用程序。
图10 在“添
加应用程序”向导中输入URL
- 为你想要测试的应用程序输入URL(在我们的例子中是BookPool.com)并点击完成。这使你回到
应用程序配置工具,此时www.BookPool.com应用程序应出现在应用程序列表中。
图11 应用程
序配置工具
- 点击完成。现在你应该可以在“启动应用程序”向导的应用程序名的下拉菜单中看到你的应用程
序了。
图12 “启动
应用程序”向导
- 选择应用程序并点击OK。这启动了带有已加载BookPool.com网页的浏览器。当Functional Tester
在后台工作时,这一启动可能需要几秒钟。
- 点击搜索域并输入“软件测试”作为搜索文本。
图13 在搜索
域中输入搜索文本
- 点击Search按钮。结果页面应被加载并与下图近似。注意你的结果依据你记录测试的时间不同将有
所变化。
图14 在
BookPool.com上搜索“软件测试”的结果
创建验证点
首先,为了验证所有搜索到的结果都已被返回,你将建立一个HTML格式的验证点,它包含“Software Testing”的全部
53个结果”。
- 在功能测试记录监视器中点击“插入验证点或动作命令图标”。这将打开“验证点和动作”向导。
图15 “验证点和动作”向导
- 点击Object Finder图标并将其拖至浏览器中的“‘软件测试’的全部53个结果”窗体中。
图16 用红线圈住的浏览器中的“Software Testing”的全部53个结果
窗体
- 你一旦选择了窗体,“验证点和动作”向导就会再次出现并要求你选择对窗体进行的动作。点击“Perform Data Verification Point”单选按钮并点击下一步。
图17,通过选择“Perform Data Verification Point”选项来选择一个动作标签
- 下一个画面允许你对验证点的一些属性进行修改。把数据值改为可见文本,因为你必须看着文本进行检验
。如果愿意的话你还可以更改验证点的名称,但是默认的名称一般是比较有描述性的,因此我认为使用默认的就很好。最后,选中“Include retry parameters”复选框,这样Functional Tester将会每两秒钟检查一次你的应用程序中验证点的存在,并持续二十秒(这是默认值;你也可以输入你自己需要的
值)。在测试Web应用程序时这是非常方便的,因为你并不知道下载网页和显示信息需要多少时间。
图18 插入检
验点数据命令标签,选中了 Visible Text
- 点击下一步。这打开了“验证点和动作”向导的最后一个对话框——在这个对话框中你能够选择包含在你的验证点中的属性。这个对话框体现了Functional Tester更强大的特性,但并不像它看上去那么复杂。
图19 验证点
数据标签,选中了表格All53ResultsForSoftwareTesting(“‘Software Testing’搜索的全部53个结果”)
即使你不会对这这些内容做出任何更改,你也应该注意他们。测试对象面板和识别标签对任何类型的验证点都会出
现。而右面的面板依据你在向导的前几个标签窗口选择的不同将会显示不同信息。
- 测试对象面板包括一个树状结构,它是脚本对象图的一个部分版本。这一分级显示只包含你的验证点内的对象。
你不能对树进行编辑,但是你可以选择其中的对象并在右边面板的属性列表中编辑它的属性。通过检查测试对象面板中的节点你就把那个节点中的
数据包括进了你的验证点。在上面的例子中,你测试的只是你选择的表格,不是那个表格的任何父元素。
- 识别标签显示了Functional Tester用来定位和管理测试对象的识别数据。管理标签显示了对象的内部管理
数据。这些标签都不能编辑。元数据标签是你可以编辑的,它显示了定义特定数据如何管理的一组属性。
- 右边的面板显示了对象属性。由于你建立了一个数据验证点并选择了可见文本测试,显示的文本是一种文
本框的形式。在这个文本框中,你可以编辑数据,把数据转换为正规表达式,并/或为数据驱动测试把数据转化为数据引用。
- 点击完成接受默认设置。
- 现在你要为搜索到的前三本书分别添加一个验证点来保证搜索结果的顺序是正确的。再次点击功能测试记
录监视器中的“插入验证点或动作命令”图标。
- 使用Object Finder,选择列表中的第一本书——或者更精确地说,搜索结果表格中的第一个单元。在我们
的例子中,那本书是 Testing Computer Software,作者是Cem Kaner et al(那是我在软件测试方面第二喜爱的书)。
图20 用红线
圈起来的搜索结果表格中的第一本书
- 一旦你选中了书,在“验证点和动作”向导中点击“ Perform Data Verification Point”单选按钮,和前面的步骤三是相同
的,然后点击下一步。
- 在下一个画面中,把数据值改为可见文本并选中“Include retry parameters”复选框,和前面的步骤四相同。点击
下一步然后点击完成。
- 对搜索结果中列出的后两本书重复这个过程。
完成并运行这个脚本
现在你将要完成并运行脚本以确认它是正确的。
- 关闭浏览器。
- 点击功能测试记录监视器上的停止记录图标。
Functional Tester此时应该产生一个与列表1近似的测试脚本。(为了节省篇幅我删去了注释。)
列表1 刚刚记录的VerifySearch回放脚本
package RegressionScripts;
import resources.RegressionScripts.VerifySearchHelper;
public class VerifySearch extends VerifySearchHelper
{
public void testMain(Object[] args)
{
// HTML Browser
startApp("www.BookPool.com");
// Document: Bookpool: Discount Computer Books. Welcome!:
http://www.bookpool.com/.x/nqbosf60z8/ho
text_qs().click(atPoint(72,6));
browser_htmlBrowser(document_bookpoolDiscountCompu(),DEFAULT_FLAGS).inputChars
("Software Testing");
button_search_btnGif().click();
All53ResultsForSoftwareTestVP().performTest(2.0, 20.0);
SearchResults_KanerVP().performTest(2.0, 20.0);
SearchResults_DustinVP().performTest(2.0, 20.0);
SearchResults_WhittakerVP().performTest(2.0, 20.0);
browser_htmlBrowser(document_bookpoolBooksFound(),DEFAULT_FLAGS).close();
}
}
|
你还应该在右边的脚本浏览器中看到列出的所有验证点和测试对象。
图21 验证点和测试对象列表
- 在功能测试项目视图中右键点击脚本并在弹出的菜单中选择Run。
图22 点击
VerifySearch脚本后选择运行
- 这将打开选择日志向导。点击完成接受默认信息。
Functional Tester此时应掌握控制并执行测试。执行完毕后,回放日志文件应打开并显示发生的一切。如果由于一
些原因这没有发生,把你的代码与列表1中的进行比较,确保你的所有命令都是正确的。
图23 VerifySearch脚本的回放
结果的第一部分
测试二:检验向篮子中添加一件物品
现在你将要建立一个测试脚本来检验你是否可以向你的购物栏中添加一件物品。在这个测试中,你将打开网站,搜索
一本特定的书,把书加入你的购物栏,并检验篮子加载了你的货物以及正确信息。
搜索
- 右键点击RegressionScripts文件夹,在弹出的菜单中选择添加记录脚本。
- 在“记录一个新的功能测试脚本”向导中,输入脚本的名称(在我们的例子中,使用VerifyBasket),然
后点击完成。
- 点击启动应用程序图标。
- 在“启动应用程序”向导画面选择BookPool.com应用程序并点击OK。
- 当浏览器完成下载后,点击搜索域,输入 Lessons Learned in Software Testing(软件测试方面我最喜爱的书)作为
搜索文本,然后点击Search按钮。
- 在结果画面上,点击 Lessons Learned in Software Testing书名旁边的Add to Basket按钮。
建立一个验证点
现在你将要检验货物被列入了购物栏中。
- 对包含该书的表格单元使用可见文本选项来记录数据验证点。
图24 结果表
格,单元用红线圈出
- 使用可见文本选项记录数据验证点来确保画面顶部的购物车图标已按照你购物车内的货物进行了更新。
图25 购物车
图标的文本
- 一旦检验完成,你需要把货物从你的购物车中移走。这个网站使用cookies(我认为)来记录你的购物车信
息。因此,如果你现在不把它移除,下次你访问网站时它还将在你的车里并影响下一个脚本的运行。要移除这件货物,只需点击Remove按钮。
完成并运行脚本
- 关闭浏览器。
- 点击功能测试记录监视器中的“停止记录”图标。
Functional Tester此时应该产生一个与列表2近似的测试脚本。(为了节省篇幅我删掉了注释。)
列表2 刚刚记录的VerifyBasket回放脚本
package RegressionScripts;
import resources.RegressionScripts.VerifySearchHelper;
public class VerifyBasket extends VerifyBasketHelper
{
public void testMain(Object[] args)
{
// HTML Browser
startApp("www.BookPool.com");
// Document: Bookpool: Discount Computer Books. Welcome!:
http://www.bookpool.com/.x/nqbosfkvb8/ho
text_qs().click(atPoint(120,9));
browser_htmlBrowser(document_bookpoolDiscountCompu(),DEFAULT_FLAGS).inputChars
("Lessons Learned in Software Testing");
button_search_btnGif().click();
// Document: Bookpool: Books Found: http://www.bookpool.com/.x/nqbosfsev1/ss?qs=
Lessons+Learned+in+Software+Testing&x=22&y=12
button_addToCart2Gif().click();
ShoppingBasket_LessonsLearnedVP().performTest(2.0, 20.0);
ShoppingBasket_IconTextVP().performTest(2.0, 20.0);
// Document: Bookpool: Shopping Basket: http://www.bookpool.com/.x/nqbosf15nm/ba/0471081124
button_remove().click();
browser_htmlBrowser(document_bookpoolShoppingBaske2(),MAY_EXIT).close();
}
}
|
运行脚本以确保它是正确的。
测试三:检验主题菜单的内容
现在你将要建立一个测试脚本来检验网站主页的主题菜单的内容。在这个测试中,你将打开网页,然后简单地在整个
菜单的内容上完成一次检验。
打开Web站点
- 右键点击RegressionScripts文件夹,选择添加记录脚本。
- 在“记录一个新的功能测试脚本”向导中,输入脚本的名称(在我们的例子中,使用VerifySubjects),
然后点击完成。
- 点击启动应用程序图标。
- 在“启动应用程序”向导画面选择BookPool.com应用程序并点击OK。
建立一个验证点
- 当浏览器完成下载后,点击Insert Verification Point or Action Command图标。
- 使用Object Finder,选择主题表格。(我必须来到表格的最下面来选择整个表格。)
图26 用红线
圈出的主题表格
- 在“验证点和动作”向导中,在“Data Verification Point”标签中选择“ Perform a Data Verification Point”,并在“Insert Verification Point Data Command ”标签中把 Data Value 改为 Data Grid。
- 点击下一步将看到“验证点和动作”向导的“验证点数据”标签。这一次你将在右边的面板中看到
一个表格,它包含了你使用Object Finder从表格中选择的文本。
图27 带有主
题表格的验证点数据标签
- 双击表格中的第一个单元(内容是“Artificial Int”),会出现另一个属性窗口。
图28 表格第
一个单元的属性窗口
- 在这个窗口里,主题菜单的所有文本都以单元的数据属性值出现。不相信我?选择所有文本把它们复制到
记事本。你应该看到菜单中的所有根节点以及它下属的所有选项。这就是你要检验的信息。关闭窗口。
- 对其它带有文本的单元进行相同的检查,你将发现它们都包含菜单下表格中也包含的那些项。你不需要检
查那些元素,因此你需要限制你的选择标准。使用右上角的下拉菜单把选择标准由原来的“Column Selection”改设为“Cell Selection”。
- 选择表格的第一个单元并点击下拉菜单左边的“Update Comparison Region”图标。你的选择应该如下图所示:
图29 验证点
数据标签中选择的表格的第一个单元
- 点击完成。
完成并运行脚本
- 关闭浏览器。
- 点击功能测试记录监视器中的停止记录图标。
Functional Tester此时将产生一个近似于列表3的测试脚本。(为了节省篇幅我删掉了注释。)
列表3 刚刚记录的VerifySubjects回放脚本
package RegressionScripts;
import resources.RegressionScripts.VerifySearchHelper;
public class VerifySubjects extends VerifySubjectsHelper
{
public void testMain(Object[] args)
{
//HTML Browser
startApp("www.BookPool.com");
EntireSubjectsGridVP().performTest(2.0, 20.0);
browser_htmlBrowser(document_bookpoolDiscountCompu(),MAY_EXIT).close();
}
}
|
运行脚本以确保它是正确的。
建立一个完整的回归测试脚本
现在你有了三个可以工作的功能测试脚本。这三个脚本将作为你的回归测试的基准。尽管如此,当你做好准备运行你
的回归测试时,你很可能有上百个回放脚本而不希望一个一个运行它们。取而代之地,你需要一种一次运行所有脚本的方式。有几种不同方法实现
这个目的。这里我将告诉你我使用的方法。
- 在功能测试项目视图中,右键点击BookPool项目并选择添加空脚本。
- 为脚本命名(在我们的例子中,使用BookPool_CompleteRegression)并点击完成。
- Functional Tester建立一个空白脚本,与列表4中的近似。(为了节省篇幅我删掉了注释。)
列表4 空白回放脚本
import resources.BookPool_CompleteRegressionHelper;
public class BookPool_CompleteRegression extends BookPool_CompleteRegressionHelper
{
public void testMain(Object[] args)
{
// TODO Insert code here
}
}
|
- 删除
// TODO Insert code here注释。
- 当光标还在那一行时,在功能测试项目视图中右键点击RegressionScripts文件夹并选择插入已包含的
脚本,作为"callScript"。
- 在接下来的对话框中点击是。
- Functional Tester向文件夹中的每一个脚本插入
callScript命令,如列表5
所示。
列表5 更新的脚本,能调用你的功能测试脚本
import resources.BookPool_CompleteRegressionHelper;
public class BookPool_CompleteRegression extends BookPool_CompleteRegressionHelper
{
public void testMain(Object[] args)
{
callScript("RegressionScripts.VerifyBasket");
callScript("RegressionScripts.VerifySearch");
callScript("RegressionScripts.VerifySubjects");
}
}
|
- 运行新的脚本。回放日志应该反映了发生的所有情况。
总结
上述内容应该足够你初步使用Rational Functional Tester Version 6.1了。我鼓励你用大量时间记录不同类型的检
验点并运行它们和观察不同之处。我发现测试文件夹是组织回放脚本的最佳方法。它们使你能够在运行脚本时保持条理,而且它们把所有文件集中放在项
目中一个方便的地方。
留意下一部分的资源,获得关于正确选择包含到你的回归测试集的测试的更多信息并确保你正在以最好的方式使它们
自动化。祝你好运!
参考资料
关于作者  | |  | Michael Kelly目前是位于Indianapolis的Fusion联盟的一名高级顾问。他拥有管理一个软件自动化测试团队的经验,并从1999年开始使用Rational工具工作。他的主要研究领域是软件开发生命周期、软件测试自动化,以及项目管理。你可以通过电子邮件与他联系。 |
对本文的评价
|