级别: 初级 Tom Arnold (tom@xtenddevelopment.com), 工程师
2005 年 1 月 01 日 Rational 公司邀请我看了看它们的新产品,Rational PobotJ。它们邀请我有两个原因。一个原因很明显,就是由于我长时间进行测试自动化的工作,了解大量的人们正确使用(以及误用)这些测试工具的方式。第二个原因就是由于我从来没有使用过Rational Robot或者该公司的Test Manager模型,所以凭借我的自动化背景可以清晰地洞察出他们是如何设计软件测试自动化解决方案的。
简介
Rational 公司邀请我看了看它们的新产品,Rational PobotJ。它们邀请我有两个原因。一个原因很明显,就是由于我长时间进行测试自动化的工作,了解大量的人们正确使用(以及误用)这些测试工具的方式。第二个原因就是由于我从来没有使用过Rational Robot或者该公司的Test Manager模型,所以凭借我的自动化背景可以清晰地洞察出他们是如何设计软件测试自动化解决方案的。
我拿到了一份Rational RobotJ的β版,然后就急于开始研究Rational 的最新工具会给软件测试带来什么样的变化。多年来,我已编写了很多Rational Visual Test自动化脚本,我很想看看这个工具在测试基于Web的应用程序领域中会取得什么样的成就。
我花了几分钟安装该工具,到处点击来熟悉界面的内容,主要是想看看这到底是个什么东西,最后我决定先使用一下工具栏中的Record new RobotJ script 按钮。这东西到底怎么样,我暗自思忖,且看看它会创建出什么样的冗长脚本来,既可以准确地记录我的操作,还可以保持同步,以保证回放功能确实好使。当使用记录和回放(record-and-playback)工具时,我稍稍有点嘲讽心理。
虽然更喜欢旧式优秀的匆匆编写代码的方式,但是我还是渴望了解这个工具的更多功能。不过,使用记录器是了解有关自动化工具以及正确使用该工具的最佳方式之一。您马上就会发现,记录器不仅仅曾经是(现在也是)深入学习RobotJ的伟大工具,它也是Rational所希望的帮助人们创建大量测试脚本的最佳方式。它也确实做得很棒!
背景
我曾经听到过有关测试自动化的传言,据说Rational 准备发布一种新产品,主要用于测试HTML与基于Java 的web 应用程序。而且,考虑到面向对象编程语言的特有优点,准备使用Java 作为其编程语言。我很想看到它的面世,越快越好。这肯定是一种新型有关编程的玩具语言,我已经等不及要使用它了。
多年来我一直选择Rational Visual Test 编写软件测试自动化的脚本。它使用类似Visual Basic 的语言,编程进行起来简单直接,同时它也具备使用指针处理复杂数据结构的高级功能,这也使它成为一种真正的语言。Visual Test 甚至在版本6.0中加入了测试网页的功能。该功能确实好使,而且一直在发挥着作用,但是在测试工具中加入此功能的最初目的是用来测试Microsoft 的Windows 程序的。Visual Test 一直努力成为终极的、无所不能的软件测试自动化工具,而且可以肯定地说,多年来它一直如此。
现在,我仍然使用VT ,即使对于那些非测试的解决方案。但是,当一种主要用于测试web应用程序的新型工具即将发布的时候,我确实想看看它到底能够实现什么功能,而且我也十分喜欢使用Java 作为脚本语言。
我一直尽力将良好的编程实践教授给我的学生和客户,同时还有创建类似面向对象脚本的方法,以及使用并不是那么面向对象的语言完成数据隐藏、封装和简单形式的继承。这些方法都十分有效,但是如果使用面向对象语言的话,就不仅仅是鼓励使用这些方法那么简单了,而是可以加强进行这些实践。这就是我为什么喜欢RobotJ 使用Java 作为其脚本语言的原因了。
测试
我想我还是从简单的地方开始吧:单击一些链接来看看它在屏幕显示不下时是否较好地处理了浏览器窗口的滚动以及页面加载的滞后时间是否较长。但是,随后我又从另一个角度进行了一下思考:如果测试驾驶一辆承诺具有强大发动机和超速悬挂装置的新型轿车,我能仅仅坐在那里来验证转弯信号是否好使吗?或者来检验车载音响中的噪声程度吗?好,是的,确实如此。但是除此之外,我肯定想要亲自驾驶它,经过大量的弯道,同时收听广播中的Talk of the Nation。
显然,我不会第一次驾驶就经过太多的弯道,因为我不想撞到墙上。我只想让我记录的源代码确实可以进行工作;我还是对记录的脚本有点怀疑,不知道它是否能够正常工作。于是,我单击了记录按钮,并且按照下述步骤进行操作:
- 我运行了选定的浏览器(Microsoft Internet Explorer 6.0)
- 将我的测试命名为First_one (您可以在源代码的引用中看到)
- 使用相关URL 运行我的应用程序(www.xtenddev.com)
- 单击链接进入Xtend Development 的搜索引擎
- 键入我正在寻找的文本(Rational)
- 浏览我想要的产品(VT6 InDepth Videos)
- 向我的购物车添加项目(buy.gif graphic)
- 点击Check Out 按钮完成交易
- 填写客户与付款信息
- 向交易服务器提交产品订单
- 退出浏览器
预期效果
作为一名测试自动化程序员,我对于使用RobotJ 记录器预想了很多概念。这些概念都是通过使用Visual Test 和其他测试自动化工具得出的。我预先考虑了许多问题,尤其是:
兼容性:最初,我有点担心它与Microsoft Internet Explorer 6.0的兼容性问题。Microsoft 不断快速地推出其浏览器的更新版本,我不知道RobotJ 是否能够跟得上节奏。Rational 肯定在使用IE API 提供的内部对象模型,Visual Test 团队也是如此,但是Microsoft 的内部二进制数字并不总是如预期那样的有效,还需要开发团队再进行大量的工作。我设想对于RobotJ 开发人员也是如此。
脚本长度:我担心可能会创建出很长的脚本,里面还带有大量的延迟或者休眠语句,用来模拟我在键入和单击过程中的实际延迟。我也在期待着有大量的命令检验浏览器窗口的大小和位置、屏幕分辨度以及其他有时可能造成致命故障的错误,并且创建出很长的脚本。
延迟的问题:我预想脚本仅仅可以在理想状态下运行,服务器可以在记录创建时或者比其更快地进行响应。在服务器滞后时,我预想肯定需要在特定点暂停,例如在单击链接以跳离当前页时,并使用附加源代码调整脚本。
实际效果
不过,我所得到的给了我一个惊喜,让我非常高兴:
兼容性:点击链接,键入多个<input type=text>输入框控件、<textarea> 控件、<select><option>下拉列表框、<input type=submit>按钮,使用post和get方法提交表单,所有这些都工作正常,没有问题。我还没有使用其他的浏览器进行测试,但是我很高兴地发现它正确地识别了测试状态下网页上的许多不同控件,而且更重要的是,回放功能也成功运行。
简洁的源代码:源代码是简洁的,并且具有良好的可读性。通过使用Helper 的基类,所有的外部源代码都从视图中隐藏起来,只剩下我感兴趣的源代码。正如预料的那样,加入了注释帮助指导自动化程序员了解源代码中的每行都进行了什么操作。不过,还有些我没有预料到的附加信息也包括于注释中,特别是按下Place Order Now 按钮所提交的信息。
同步性:由于源代码中没有明显地加入休眠或者延迟信息,同时Helper 基类也可以处理所有的控件识别问题,所以操作只有在单击控件时才得以执行。如果是这样的话,脚本就不会记录填写表单和点击恰当控件的信息。不过,如果页面仍处于装载状态或者仍在识别页面上的控件和链接时,它也可以耐心等待。
为了让您更加明白,我尝试在本文档的开始几页中创建一些示例脚本。创建的源代码展示于下一页的清单1 中。(注意:必须进行一些细小的格式操作,使本文档中的代码更加可读,包括移去一些自动创建的注释)。在随后几页中,我会教您如何使用RobotJ 创建这些脚本,并讨论一些有关创建脚本的关键问题,然后研究运行脚本得到的结果。
清单1
如何生成脚本
既然您已经了解了通过上述步骤所得的脚本的内容(参见Listing1(清单1)),我将在本文档的剩余部分解释我是如何创建这些脚本的,同时指出该过程中的有趣部分。
欢迎使用Rational RobotJ
我已经提到了,RobotJ 是Rational 的最新解决方案,用来测试在Microsoft Windows 和Unix 平台4上的Java 或者Web 应用程序环境。RobotJ 使用IBM 开放源代码的集成开发环境(IDE),称为Eclipse。通过使用IBM 的IDE,如图1所示,RobotJ 将与由Rational 和其他供应商创建的其他开发工具并驾齐驱,并允许把简单的工具集成于同一界面中。
图1 :RobotJ使用IBM 的开发源代码的IDE,称为Eclipse
要创建RobotJ 的测试脚本,必须首先创建存储这些脚本的容器。这被称为数据存储。在做任何修改之前,必须创建这样一种项目文件。在图1中,您可以看到我已经创建了一个数据存储,称为tomsrobotjdatastore(很有创意吧,嗯?)。我的第一个记录脚本First_One将存储于此,参见清单1。我没有讲述创建数据存储的步骤,因为我想直接进入RobotJ 的实际内容。
准备好进行记录
创建自动脚本的第一步就是进入 Configuration Editor(配置编辑器),请见下页的图2。选择RobotJ中Configure菜单,在其中的Testing菜单项中选择Configure Applications 可以访问到该对话框。在对话框中,单击Add 按钮,选择进入Java application、HTML application或者Windows executable。
在本例中,将测试我的网站
www.xtenddev.com。我将在记录界面显示时从应用程序列表中选择我的应用程序,该列表由Configuration Editor 进行维护。
图2:必须输入由RobotJ进行测试的应用程序的启动信息。供记录器使用并且允许您指定将要进行测试的应用程序。
记录新的RobotJ脚本
在完成内部设置之后,就可以开始进行关于我的网站的自动测试了。早先提及的目标是浏览到我的网站,搜索产品信息,向电子商务购物车中添加项目,然后检查客户订货与付帐信息的输入页面,提交订单,最后关闭浏览器。
图3:Script菜单正下方的工具栏上的红色按钮用来激活记录器
单击Script菜单正下方的Record New RobotJ 工具栏按钮(如图3所示),开始进行上述过程。随后出现一个对话框提示输入脚本的名称。键入例中的First_One(不允许输入空格或者字母数字的混和字符),然后点击Finish 按钮,启动记录会话。
如图4所示,出现一个总在最前的标题为Recording 的窗口,工具栏中的按钮看上去十分有趣。该窗口用来控制有关记录脚本的关键内容。
图4:RobotJ 记录器工作时,显示记录窗口。
点击图4中记录窗口上从左数第4个按钮。这是Start Application(启动应用程序)按钮,用来显示(这里没什么好惊讶的)Start Application(启动应用程序)对话框。对话框中列出了我早先使用Configure Editor(配置编辑器)配置过的应用程序。如图5所示,我选择了想要测试的应用程序,然后点击OK按钮。
图5:点击记录窗口中工具栏的Start Application(启动应用程序)按钮,显示Start Application(启动应用程序)对话框
如果在此时停止记录器的话,创建的脚本将如清单2所示:
清单2
前六行代码以Java 包的形式向我们展示了RobotJ 的秘密,也就是几组相关API (应用程序编程接口)。每个包和其内容信息列于下表1。
表1:由记录器功能生成的脚本中包括的核心包
第一项就是Resources.First_oneHelper 类。该类是记录器分析正在进行测试的应用程序时创建的。对于每个用户界面上的控件来说,创建的方法都使用该控件的名称。然后就可以使用该方法与控件进行交互。由于RobotJ 使用的是面向对象的编程方法,所以每个控件都是一个黑箱,对于该类所作的任何更改对于使用的方法来说影响微乎其微,甚至没有影响。RobotJ 通过广泛的在线帮助提供有关其他包的信息。
再次参见清单2,在import 声明下方有如下代码行:
第一行在自动创建的First_oneHelper 类的基础上继承得出一个新类(First_one)。当RobotJ 分析正在进行测试的应用程序并且创建大量的方法以实现对应用程序控件的轻松访问时,First_oneHelper类被创建。(First_oneHelper 本身继承自RobotJ 的Helper 基类)。在First_one 新类中,创建了一个方法testMain ()。testMain()函数中的第一个命令就是调用startApp(),其中还带有参数,该参数与我在Configure Editor(配置编辑器)中创建的入口相匹配("Xtend Development,Inc.")。现在如果我要改变应用程序的存放地址的话(例如,改变URL),我只需修改Configure Editor(配置编辑器)中的值,脚本就会继续运行而不受影响。
脚本中的下一行搜索调用startApp ()时创建的浏览器。(我单击一下窗口,验证它是否已被选中):
Browser_htmlBrowser(Document_XtendDevelopmentInc(),DEFAULT).click(atPoint(382,11));
随着应用程序的运行,需要验证我是否处于要进行测试的页面。
添加验证值
验证脚本的同时可以添加验证值(VP)。单击记录窗口(图4)中从左边数的第5个按钮完成该操作,随后即可显示图6中的对话框。
图6:验证值可以助您确保您的位置
在该对话框中设有三个选项卡。第一个选项卡用于单击指针并将指针拖至验证过程中使用的对象上。图6中的第二个选项卡在RobotJ 将对象映射于浏览器之后,分等级地显示每个对象。为了验证已经处于Xtend Development 的主页,我选择了该页面特有的consultingsm.jpg 图像。如果RobotJ 在脚本中发现了该图像,那么就说明一切运行正常。
第三个选项卡上是一个带有秒表的指向手指,该选项卡允许向脚本中添加延迟。该延迟可以进行配置,以等待特定控件的出现。如果该控件在指定的时间内没有出现的话,即可抛出一个引起故障的异常,由RobotJ 进行日志记录。
单击图6对话框中的Next 按钮,出现用于调整VP最终对话框,如图7所示。
图7:向记录脚本中添加验证值(VP)的最后一步。
填写数值,单击Finish 按钮向脚本中插入VP 调用,然后继续进行记录:
consultingsmjpg_textVP().performTest();
(注意:在验证中使用的对象名称是用来创建consultingsmjpg_textVP()对象的,其中还包括继承的方法performTest()。)在这里添加VP ,既不是正确的,也不是错误的。一般情况下,在进行关键浏览时才添加VP ,这样可以在出现故障时及时停止执行。
测试对象映射
RobotJ 记录器在记录会话期间可以运行所有的对象。这些对象中的大部分都被置于名为测试对象映射的组中。其他项目,例如那些在定义验证值过程中创建的项目,都被添加入验证值部分。
测试对象映射可以跟踪一个对象的所有方面,包括其名称、类型、父类、兄弟以及其他属性。项目名称也用来创建函数或方法,脚本使用它们与对象进行交互。由于RobotJ 并没有涉及一个对象的任何属性,所以如果在开发过程中属性有所变更,脚本很可能继续正常运行下去。不过,警告会被记录,以使自动化工程师重新映射对象,保证其匹配率为100%。
图8展示了创建脚本时进行的对象映射。需要注意的是,虽然在创建脚本时页面上包括有数百个对象,但是只有那些执行了的对象被包括于映射中。
图8:进行测试的应用程序中的所有对象都映射为在自动化脚本中调用的函数或方法。
这里没有展示的是控制权重的功能,当RobotJ 进行匹配时,权重应用于控件的不同属性上。这些权重允许脚本编写者指明RobotJ 必须注意的内容,以及在脚本回放期间,搜索匹配控件时不那么重要的地方。脚本运行不会被经常地打断:这一点是很酷的。
源代码的其他部分
如果您已经了解了函数名称的来源,那么记录器创建的源代码的其他部分就显得相当的简单与直观了。记录脚本主要是自文档化的,即使RobotJ 可以在整个过程中加入有帮助的注释。请看清单3显示的最后几行代码(为了节省空间,删去了一些注释)。
清单3
我特意在清单3中留下了一行注释,以展示RobotJ的记录器可以在表单提交后跟踪返回的HTML 头部。大段的注释区显示了有关脚本页面的返回信息(在本例中使用的是.ASP页面,但是对于.JSP页面同样是好使的)。这种注释在测试阶段是很有帮助的,可以了解不显示在URL 行中的返回值(而且隐藏于HTTP 头部中)。(注意:在清单3末端的注释区在我的字处理软件中是一长段行。这就是使用//注释标记而不是/*和*/的原因。)
执行与效果
脚本已经被创建,现在惟一一件需要做的事就是运行它,然后查看结果。单击Running Man 图标,开始执行脚本(该按钮位于应用程序的工具栏中)。RobotJ IDE将最小化,同时出现一个分离的窗口以显示执行脚本的状态。
图9:单击工具栏上的Running Man 图标,开始执行RobotJ 的测试脚本。
当脚本运行结束时,将启动一个单独的应用程序,显示结果日志以及遇到的错误。图10显示了一个成功运行测试脚本后的典型结果文件。
图10:Rational Test Manager显示RobotJ 测试执行的结果
结束语
在本文档中,我向您介绍了有关自动化的内容,首先展示了只需几分钟就可以创建的最终脚本,然后一步步地进行了该脚本的配置、记录与执行操作。
虽然使用Rational 的最新自动化工具需要涉及太多的内容,但是我希望本文档已经为您进行了很好的介绍。记录器的强健性使创建脚本变得轻松,也为那些喜欢匆匆忙忙编写代码并且躲避记录器的人提供了优秀的实例,并且使用灵活的模型对应用程序进行了测试。
感谢您在不经意间浏览了本文!
参考资料
- 您可以参阅本文在 developerWorks 全球站点上的
英文原文。
关于作者  | |  | Tom Arnold 自从1991年以来一直从事有关软件测试自动化项目的编程、管理与咨询工作。1993年,Tom 参与创建了Software Testing Laboratories (后来更名为ST Labs,最终由Data Dimensions/LionBridge/Veritest 收购),该公司属于软件行业中第一批外包软件的测试公司之一。Tom在ST Labs任职期间,进行培训与咨询工作,创建了ST Labs 培训组,开始为Microsoft的雇员编写并且教授软件测试自动化课程。两年后,Arnold 出版了有关著述,《Software Testing with Visual Test 4.0》(用Visual Test 4.0进行软件测试)。在这本书出版的不短时间之后,Tom 对Microsoft 公司的Visual Test 4.0b的开发团队进行了管理,此版本稍后变成了Rational Visual Test 4.0r。Arnold 又继续进行软件测试自动化项目,为那些想要创建测试方法的公司提供咨询,并在行业会议中对于有效使用实用方法进行自动化测试的问题发表演讲。Tom 一直在进行软件开发团队的管理工作,包括管理创建Rational Visual Test 6.0(发布于1998年11月)的程序员和测试工程师。他还于1999年1月同时出版了一本700页的书 《Visual Test 6 Bible》 和10盘磁带(10小时)培训视频系列《 VT6 InDepth3》 。Tom 现正关注于软件项目管理、编程、测试自动化,并且专门编写有关软件开发的论文和文章。Tom 目前活跃于软件行业,并且常出席例如STAR(软件测试分析与评审)、Internet World和RUC(Rational 用户会议)等学术会议。他在Purdue 大学获得了计算机科学的学士学位。请将评论发至:
tom@xtenddevelopment.com。
|
对本文的评价
|