不知道大家对象库以何种方式维护和读取的
本帖最后由 kavensyw 于 2010-11-3 23:33 编辑不知道大家对象库都是如何维护的,是用tsr,xml,excel,database中哪种比较好呢。
我总感觉系统默认的tsr占用空间比较大.
所以我打算这样做:(如果对转换后的xml结构熟悉,可以把123省略,可以直接写xml文件)
1. 录制脚本,生成tsr;
2.把tsr先导出为xml;
3. 删除xml中不必要的属性,只保留Object,Property,BasicIdentification等需要的部分.这样空间能缩小很多.(这部分可以考虑做个脚本或小工具来自动处理);
4. 在脚本运行时,再把xml转换成tsr关联,用完后删除tsr文件(因为tsr任会占用很大空间).
不知道这样使用起来是不是方便,我担心这种方式如果对象很多的话,转换会不会对测试运行效率影响很大
大家有没有更好的方法,分享一下,不胜感激
'附件_backup是未修改的tsr,xml
'不带backup是修改后的xml及临时tsr
下面是我试运行的脚本,拷贝到QTP中运行
'TEST HEADER
'*****************************************************************************************************************
'@Name :Action1
'@Description : 把xml形式的对象库转变成tsr,然后关联,用于测试
'@Author : kavensyw
'@CreationDate : 11/03/2010
'@Remarks :xml对象库从录制的对象库导出为xml,并删除其中不必要的属性等内容;
' 可以先手动导入一次,看导入xml会否有故障;
' 保留足够的空间以便存放临时tsr文件.
'
'TEST HEADER
'*****************************************************************************************************************
Dim oObjRep'Mercury.ObjectRepositoryUtil对象的引用
Dim qtApp, qtRepositories
Set oObjRep = CreateObject("Mercury.ObjectRepositoryUtil")
'这儿添加脚本:先检查xml是否存在,不存在则Fail,退出测试
' 这儿添加脚本:先检查tsr是否存在,存在就先删除,否则import会出错
oObjRep.ImportFromXML "G:\Test\baidu.xml","G:\Test\baidu.tsr"
Set qtApp = CreateObject("QuickTest.Application")
Set qtRepositories = qtApp.Test.Actions.Item(1).ObjectRepositories ' 获取object repositories集合
'移除不必要的对象库/RemoveAll
lngPosition = qtRepositories.Find("G:\Test\Debug.tsr") ' 查找不需要的tsr的index
If lngPosition <> -1 Then ' 如果找到tsr
qtRepositories.Remove lngPosition ' 移除tsr
End If
'关联需要的tsr对象库
If qtRepositories.Find("G:\Test\baidu.tsr") = -1 Then' 查找tsr的index
qtRepositories.Add "G:\Test\baidu.tsr", 1' 添加tsr
End If
Reporter.ReportEvent micPass, "开始运行实际测试脚本", ""
SystemUtil.Run "Iexplore.Exe", "www.baidu.com"
Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").Set "嗷嗷嗷叫"
Browser("百度一下,你就知道").Page("百度一下,你就知道").WebButton("百度一下").Click
Reporter.ReportEvent micPass, "结束运行实际测试脚本", ""
'取消关联
lngPosition = qtRepositories.Find("G:\Test\baidu.tsr") ' 查找tsr的index
If lngPosition <> -1 Then ' 如果找到tsr
qtRepositories.Remove lngPosition ' 移除tsr
End If
Set qtRepositories = Nothing
'这儿添加脚本:用完之后删除tsr文件
Set qtApp = Nothing ' 释放qtApp 我不会看你下面的脚本, 因为你的 1 2 3 4 让我感觉实在是麻烦,tsr大不假难道现在机器的硬盘还不够么,要说QTP运行时加载大, 那可否在脚本中做处理呢,每次都只加载用到的. 不知道你的这种做法是否有经过大批量开发脚本的验证. QTP的一大优点(对象库管理机制) 你完全忽略了. 个人观点 LZ慎重 , 经历不应放在这. 本帖最后由 xhhuang1618 于 2010-11-5 13:15 编辑
将CASE中所有用到的测试对象保存到外部文件中(如:Dictionary),并使用描述性编程的方式定位到相关对象上(支持多层次的嵌套)。当测试页面中的对象发生改变时,只需要修改Dictionary中的Value的就可以确保CASE能继续运行。
优点:可以节省对象库的存储空间,同时维护起来也比QTP自带的对象库来的方便
缺点:不支持录制/回放功能
示例:
Dim ObjectRepository
SetObjectRepository = CreateObject("Scripting.Dictionary")
ObjectRepository.Add "UserName","Class Name;name|WebEdit;username"
ObjectRepository.Add "PassWord","Class Name;name|WebEdit;password"
ObjectRepository.Add "Login","Class Name;type|WebButton;submit" 方法多种多样,拿出来拓宽思路是不错的,找到一个最适合自己的
页:
[1]