QTP自动化测试对象库的设计、研究和实现
2014-02-12
(天津商务职业学院,天津 300221)
一、QTP简介
目前软件的自动化测试,由于其高效率、低成本的特点,在多数的软件企业中越来越受到重视。自动化测试在一些传统的软件企业的软件生命周期中没有占到太大的比重,但是对于在一些对软件质量要求较高,发布版本较为频繁的项目中,使用了自动化测试用例与否,自动化测试用例所占的比率,是关系项目成败的一个重要因素。
QTP(Quick Test Professional)是众多自动化测试软件的较为优秀的一个,目前很多软件企业都在使用。QTP是一种基于GUI对象技术实现的工具,因此QTP的自动化脚本实现的功能是对应用程序界面的操作,即多程序中对象的操作。因此,界面上的操作对象能否准确的被识别,关系到自动化测试能否正常自动执行。对象库指的是自动化测试项目中被测试对象的集合,对象库在QTP中的地位尤为重要。QTP是的实现原理是查找应用程序界面或Web页面中的控件ID及属性判断与测试对象是否匹配。QTP对于使用不同语言和平台编写的程序会采取不同的对象识别方法来识别测试对象,但这些方法都有一个共同点,那就是通过对比测试对象的属性来判断区分对象。
二、QTP对象库的概念
QTP中的对象可以分为两种,一种是QTP的测试对象(Test Object),测试对象一般在第一次使用QTP录制脚本时会自动保存在QTP的本地对象库中;另外一种是应用程序界面的实际对象(Runtime Object),这些实际对象是构成测试应用程序实体的重要部分。
在QTP的实际使用过程中,QTP脚本对对象的操作步骤有如下三步:
1.根据脚本中对象名称找到对象库中的对象,即Test Object的对象。
2.根据找到的对象中的关键属性查找Runtime Object中的对象,也就是在程序中寻找需要进行操作的对象。
3.如果在步骤(1)和步骤(2)中查找到的对象相互匹配,那么QTP就会对该对象进行操作,否则会提示对象出错,不对此对象进行操作。
QTP对象库的就是用来识别测试对象的,因此QTP脚本的核心就是对象库,若没有对象库或对象库管理混乱,QTP脚本就失去了自动化测试的意义。在实际的编程过程中,是没有对象库概念的,实际上是把对象库中的对象分散到QTP脚本中去,测试执行中对象识别的原理没有任何变换。
能否有一个良好的对对象库的设计、维护和管理,不仅关系到自动化测试的效率,还有可能关系到自动化测试的成败。
三、创建对象库
QTP自动化测试脚本中的对象库分为两个部分,一部分称作本地对象库,即Local Object,一般指的是在第一次录制脚本时,QTP自动生成的对象库,QTP会保存在本地对象库中;另外一部分称作共享对象库,即Share Object。
本地对象库中的对象作用范围仅限于当前QTP脚本的Test和Action,如果其他QTP脚本的Test和Action也需要使用这些对象,那就必须在其他脚本中再添加一次,这样每次创建一个新Test和Action时都需要添加这些对象,这样会大大降低测试效率。因此,需要有一种方法能将每次录制脚本时产生的本地对象导出到一个专门的文件中,作为一个共享文件给其他Test和Action使用,共享对象库就应运而生。有了共享对象库后,其他的Test和Action使用这些对象时,可直接引用该对象库即可。
当一个对象库文件文件中的一些对象需进行更改时,只需要修改这个对象库文件即可,并不需要对使用这个对象库文件的所有QTP脚本进行更改。这样更方便维护,最大限度的提高了效率;另外,一旦一个对象库创建完毕,若被测对象的功能有了变化,仍然需要对这些对象库文件进行更新维护。对象库一般分为三层:即Browser层、Page层和Control层。在某些特殊情况下,例如Web页面存在Frame框架时,对象库可能存在四层或者更多层。
由于QTP录制脚本时自动捕捉到的对象名称不规范且易重复,造成维护和使用不便,因此,在捕捉完对象后,建议对所有的对象进行重命名,命名规则如下:
1.名称应与所对应的对象相关,看到名称即可知道对象的作用;
2.如果一个对象中包含动作,则对象名称应为:动作名+对象名;
3.必须是英文名,采用驼峰标识格式书写;
4.名称不包含特殊符号,例如“/”、“,”、“@”等;
5.名称应不超过15字符。
四、管理对象库
对于使用QTP做为自动化测试工具的测试项目来说,其对象库的管理在整个自动化测试过程中,占有非常重要的地位。特别是对于一个大型的应用系统,其界面的对象多而杂,一个统一、有序的对象仓库非常有利于脚本的快速开发,以及团队成员间的协作。 对于一个对象库,不允许同时有多个人维护一个对象,同样也不建议一些对象处于无人维护的状态。在某些特殊的场景下,需要多个人同时维护同一个对象库,这只能通过让他们都进行维护,各自保存一份副本,然后在后期进行比较合并即可。对比两个对象库文件,常用的对比工具为:BeyondCompare。
在BeyondCompare中,左侧和右侧分别加载了两个对象库文件,两个文件地位相等,无主次关系。对比顺序为按照两个对象库文件的树形节点展开,逐个节点逐层对比,如先对比第一层Browser层,若Browser层的两个名称和属性一致,则再对比Page层,以此类推。当到达一个节点的末梢时,再判断对象库文件中的对象名称和属性是否一致,根据如下几种情况进行分析:
1.当一个对象的名称和属性对比结果一致时,可判断两个对象库中的对象是相同的。
2.若在一个文件的对象结构下包含一个对象,而另一个文件中没有该对象,则认为后者文件中此对象缺失。
3.若对象名称不同,但是对象结构和属性均一致,则认为这两个对象为类似对象。该现象出现的原因可能是在创建对象库时发生了命名错误导致。
4.若两个对象名称和结构均一致,但是对象属性不同,则可认为这两个对象非同一对象。
5.若两个对象的名称和属性均一致,但是对象结构不相同,此类对比不做判断。
对象对比完成后,测试人员可根据对比结果,结合实际情况进行分析,重新修改对象库文件,这样才能达到对象库唯一性的目的。
但是,若对比的两个对象差异很大,此时单纯使用比较工具对比后进行人工维护会极大程度降低管理对象库的效率。因此需要引入另一款对象合并工具。
QTP提供了一个Reporsitories Merge Utility,可以实现对象库的合并功能。与比较工具不同的是,若对对象库进行合并,就需要设定对象的主次关系,在一般情形下,主对象库一般选择为主干对象库,而从对象库往往为分支对象库,这与版本控制原理相同。工具会根据一些规则对对象库进行合并:
(1)若在主对象库中存在一个对象,在从对象库中没有,则不会合并。
(2)若在从对象库中存在一个对象,在主对象库中没有,则将该对象合并入主对象库。
(3)若在主从对象库中对象的名称和属性不同,则会有测试人员判断是否何如主对象库。
Reporsitories Merge Utility对于有多个节点相同的两个对象库,进行合并操作的时候经常会出现主从对象库中对象的名称和属性不同情况,因此,在测试的时候,会出现节点没有自动添加进来,需要手动添加的情况。不过对于其他情况,还是可以做到添加新对象到统一的对象库中,把多人开发的结果集中到一起管理。
五、结束语
综上所述,若选择合适的对象库技术,在实际的测试项目中能够对对象进行高效、合理的管理,这不仅能够提升自动化测试的效率,还能够最大限度地降低测试成本。
参考文献:
[1]陈能技.软件自动化测试成功之道[M].北京:人民邮电出版社,2010.
[2]E测试工作室.QTP项目应用与进阶[M].北京:化学工业出版社,2009.
[3]陆璐,王柏勇.软件自动化测试技术[M].北京:清华大学出版社,2006.