关于QTP 软件测试
一、QTP中虚拟对象设置
当我们在录制脚本中,有时会遇到某个对象回放时不能识别.那么就可以考虑是不是可以做个虚拟对象来代替它.您可以将这些对象定义为虚拟对象,并将它们映射到标准类,例如按钮或复选框。QuickTest 在运行会话过程中模拟虚拟对象上的用户操作。在测试结果中,虚拟对象显示时类似标准类对象。
下面我们还是通过一个例子来具体操作一下.这次选用LoadRuner自带的b/s架构的web例子,来录制脚本.(注:运行这个例子,同时把web server先给开起来.).这次只录制一个点击sign up(注册)的步骤.
录出脚本如下:
Browser("Mercury Tours").Page("Mercury Tours").Frame("navbar").Image("signup").Click 45,12
QTP把这个button对象识别成了Image(图片)对象,导致最后回放的时候,QTP不能完成Click操作,弹出报错信息.对于这个对象,我马上想到了做个虚拟的button对象来代替它.
下面是整个虚拟对象的制作过程:
1.选择“工具”>“虚拟对象”>“新建虚拟对象”。或者,也可以在虚拟对象管理器中,单击“新建”。将打开虚拟对象向导。单击“下一步”。
2.选择要将您的虚拟对象映射到的标准类(这里有六种对象类供你选择,分别是object,button,table,list,check box,radio button).这里我们要映射一个button对象,所以选择button.单击"下一步"
3.单击“标记对象”。选择你要做虚拟对象的区域,拖动鼠标.尽量能覆盖整个你想替代的对象.
4.在“标识对象使用”框中,选择您希望 QTP 标识和映射虚拟对象的方式。
如果您想要 QuickTest 标识所有出现的虚拟对象,请选择“Parent only”。
如果想要 QuickTest 仅标识一次出现的虚拟对象,请选择“Entire parent hierarchy"。
这里我们选择默认的“Parent only”。
5.指定虚拟对象的名称和集合。从集合列表中选择,或通过在“集合名”框中输入新名称来新建集合
点击完成,整个虚拟对象就做好了.
虚拟对象做好后,保存在虚拟对象管理器中.我们可以通过虚拟对象管理器来删除或禁用虚拟对象定义.
选择“工具”>“虚拟对象”>“虚拟对象管理器”。将打开虚拟对象管理器。
注意:如果希望 QuickTest 在录制时识别虚拟对象,请确保清除“选项”对话框的“常规”选项卡中的“录制时禁止识别虚拟对象”复选框。
接下来我们再来录制一遍对sign up的操作,录制代码如下:
Browser("Mercury Tours").Page("Mercury Tours").Frame("navbar").VirtualButton("button").Click
在录制过程中值得注意的是,一定要点击到我们做好虚拟对象的范围内,这样QTP才能识别到这个虚拟对象.这里我们的虚拟对象识别成功.再次回放,QTP顺利的执行了脚本.
还有两点要注意的是:
1.虚拟对象管理器中显示的虚拟对象集合存储在您的计算机中,而不是随包含虚拟对象步骤的测试或组件存储。这意味着如果您在测试或组件步骤中使用虚拟对象,则仅当在包含正确的虚拟对象定义的计算机中运行时,该对象在运行会话过程中才能被识别。要将您的虚拟对象集合定义复制到另一个计算机,请将您的 <QuickTest 安装文件夹>\dat\VoTemplate 文件夹的内容(或该文件夹中的单个 .vot 集合文件)复制到目标计算机上的相同文件夹中。
2.仅当录制和运行测试或组件时,才能使用虚拟对象。您不能在虚拟对象上插入任何类型的检查点,也不能使用“对象探测器”来查看其属性。
接下来你可以继续完成整个sign up过程,还有多个类似的对象需要做虚拟对象.
二、QTP中设置共享对象库
很多时候我们总是觉得管理QTP的脚本比较烦.因为除了要对代码的管理之外,还要保证QTP对象库的完整.每一个用例脚本的生成,同时又都会生成一个对象库.那么是不是可以做一个公共的对象库来给各个用例脚本调用呢?接下来,我们就来实现共享对象库的应用.
第一步:把需要加到共享对象库中的各个用例脚本的对象库,分别导出成.tsr文件.
操作方法:先用QTP打开已经录制完毕的脚本后,选择Resources--> Object Repository .
然后file-->export....取名导出文件.
第二步:把需要加入到共享对象库中的各个用例脚本的对象库,合并对象及对象属性,形成一个大的共享对象库.
操作方法:打开Resources-->Object Repository Manager.找到Tools菜单,然后选择打开Object Repository merge tool.选择两个要合并的对象库文件,进行对象合并.一次只能合并两个.所以如果这里你要合并多个对象库文件的话,先合并两个后,保存成一个新的.tsr文件.然后再重复上面的操作,选择这个新的.tsr文件和另一个准备好的对象库合并.
合并的时候,你会发现,在两个对象库文件中,相同的对象合并成一个,不同的对象,全部被完整增加进去.然后形成一个大的对象库.现在只要保存这个共享对象库.如果以后有新增的对象,可以重复上述操作.
第三步:调用上面保存好的共享对象库.给新的脚本使用.
操作步骤:Resources-->Associate Repository.选择上面保存好的共享对象库的.tsr文件.加入到Associate Repository中.
完成这一步后,其实整个共享对象库的操作已经完成.你在对象库中可以看到以后的对象.在录制新脚本的时候,如果对象已经存在,就不会再被记录,只有在这个对象库中没有的对象才会被记录进去.回放脚本,对象识别成功.
(注:此操作只适合与装有QTP9.0的版本.对于8.2版本不适合)
附:8.2版本中的享对象库操作
QTP8.2的共享方法
选择“测试”>“设置”>“资源”选项卡。
2. 在“对象库类型”区域,“共享”。
请指定要用作对象库文件的共享对象库文件。要指定文件,请输入对象库文件名,或单击浏览按钮并从“打开”对话框中选择资源文件。要新建共享对象库文件,请在“共享”框中输入新文件名。
对象库文件的默认文件扩展名是 .tsr,但是文件可能使用任何扩展名。在“打开”对话框中浏览现有对象库文件时,在“文件类型”框中选择“所有文件”。
注:请在新测试开始录制前进行设置,已有测试的对象库模式不能进行修改。
三、QTP参数化实例
在自动化测试当中,有时为了模拟真实效果,或者为了达到某种操作效果,那么势必要把脚本参数化.那么一般的针对输入值的参数化或者select选择值的参数化,操作也比较容易,这里也不多说了,直接把固定值换成变量就可以.鉴于上个星期有两个朋友都问到了针对某个对象的参数化,那么就来探讨一下针对对象的参数化.
例:
Browser("Browser").Page("百度——全球最大中文搜索引擎").WebEdit("wd").Set "111"
Browser("Browser").Page("百度——全球最大中文搜索引擎").WebButton("百度搜索").Click
Browser("Browser").Page("百度搜索_111").Link("菜111 的QQ家园").Click
在这个例子中,我们的目的是把这个link对象给参数化掉.这里直接把对象名参数化掉,肯定是不行的.因为我们知道QTP识别对象依靠是这个对象在对象库中的属性和属性值.而如果我们这里参数化成一个新的对象名,那么这个对象名是不存在于对象库中的,那么势必会造成在回放过程中不通过,报对象库中没有这个对象的错误.所以我第一个想到的是先让这个link对象脱离对象库,让它不用通过对象库就能识别这个link对象,那么接下来只要直接换成变量就成功了.相信大家都看到过帮助里对描述性编程的说明,通过把脚本改写成描述性编程的形式,可以让QTP在执行脚本时不要再去依赖对象库.直接把一些付有特征的属性和属性值放到脚本中,就能执行相应的操作.所以我们可以先把上面脚本改写成:
Browser("Browser").Page("百度——全球最大中文搜索引擎").WebEdit("wd").Set "111"
Browser("Browser").Page("百度——全球最大中文搜索引擎").WebButton("百度搜索").Click
Browser("Browser").Page("百度搜索_111").Link("text:=菜111 的QQ家园").Click
这样表示后,再把这个对象在对象库中的记录给删掉.重新运行脚本后,脚本依旧能正确执行.那么接下来的操作就方便了,直接把相应的固值换成一个变量即可.我们来这么操作:
Dim i
i="菜111 的QQ家园"
Browser("Browser").Page("百度——全球最大中文搜索引擎").WebEdit("wd").Set "111"
Browser("Browser").Page("百度——全球最大中文搜索引擎").WebButton("百度搜索").Click
Browser("Browser").Page("百度搜索_111").Link("text:="&i).Click
到这里整个操作过程就完成了.其实这只是一个方法,相信大家肯定还有其他方法,希望大家能留言说说自己的看法.当然如果这个对象的对象名有一定规律的话,我们还可以考虑运用正则表达式的方法,也可以达到预期的效果.