透析QTP自动化测试框架SAFFRON.docx
- 文档编号:30407677
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:23
- 大小:423.56KB
透析QTP自动化测试框架SAFFRON.docx
《透析QTP自动化测试框架SAFFRON.docx》由会员分享,可在线阅读,更多相关《透析QTP自动化测试框架SAFFRON.docx(23页珍藏版)》请在冰豆网上搜索。
透析QTP自动化测试框架SAFFRON
透析QTP自动化测试框架SAFFRON
1、为什么要使用框架?
框架是一组自动化测试的规范、测试脚本的基础代码,以及测试思想、惯例的集合。
可用于减少冗余代码、提高代码生产率、提高代码重用性和可维护性。
例如QTestWare就是QTP自动化测试框架中的一类。
2、SAFFRON简介
SAFFRON是针对Web开发的一个简单的QTP测试框架原型,是AdamGensler于06年写的,需要QTP9.1版本以上。
完整的SAFFRON脚本代码可到以下地址获取:
3、如何使用SAFFRON?
SAFFRON框架以外部VBS文件的形式出现,因此使用方法比较简单,直接在测试脚本中以资源形式导入即可使用,如图所示:
导入后,可在"AvailableKeywords"视图中看到SAFFRON的所有函数,如图所示:
选中某个函数,拖拽到专家视图的编辑器中,如图所示:
后接一个URL地址,例如,即可使用SAFFRON框架中的BrowseTo函数导航到指定的URL地址,如下脚本所示:
'BrowseTo(url)
BrowseTo“”
4、SAFFRON框架代码剖析
为了深入了解SAFFRON,以及框架的使用方法,下面我们将分别介绍SAFFRON中的主要函数,对SAFFRON代码进行深入剖析。
4.1导航到指定URL
SAFFRON使用名为BrowseTo函数来负责导航到指定的URL,如果浏览器尚未启动,则先调用函数Launch来打开浏览器。
BrowseTo函数的定义如下所示:
PublicFunctionBrowseTo(url)
thirdlevel=""
ReportmicPass,"NavigatetoURL","NavigatingtoURL:
"&Quote(url)
IfinitializedThen
ExecuteGenerateDescription("Browser")&"Navigate"&Quote(url)
Else
Launch"website",url
EndIf
Reporter.Filter=rfDisableAll
EndFunction
在脚本中,会判断是否初始化了浏览器,如果有则执行导航动作,导航到指定的URL。
导航动作是执行这行脚本来完成的:
ExecuteGenerateDescription("Browser")&"Navigate"&Quote(url)
Execute是一个用于执行指定VBScript脚本语句的函数,GenerateDescription函数的定义如下所示:
'Generatesagenericdescriptionbaseduponthe"level"viarable
'levelstr-willbeoneofthevaluesthatisinthelevelarray
'returns-stringrepresentativeoftheobjecthierarchy
PublicFunctionGenerateDescription(levelstr)
l=IndexOf(level,levelstr)
Ifl>=0Then
fdesc=level(0)&"("&Quote(desc(0))&")."
Ifl>=1Then
fdesc=fdesc+level
(1)&"("&Quote(desc
(1))&")."
If2>=lThen
Ifthirdlevel<>""Then
fdesc=fdesc+level
(2)&"("&Quote(desc
(2))&","&Quote("name:
="&thirdlevel)&")."
EndIf
EndIf
EndIf
EndIf
GenerateDescription=fdesc
EndFunction
4.2返回测试对象的描述
GenerateDescription函数用于返回对象的描述性语句,例如,指定Browser,则返回如下语句:
"Browser("micclass:
=Browser")."
该语句代表了当前浏览器对象,并且后面加了个点号,这是为了方便后接"Navigate"这个浏览器对象的导航操作,以及指定的URL字符串,例如"在Execute时,其实执行的VBScript语句如下所示:
Browser("micclass:
=Browser").Navigate"
经过SAFFRON的框架封装后,则只需要使用如下语句即可达到同样的效果:
BrowseTo"
4.3启动浏览器
SAFFRON使用名为BrowseTo函数来负责导航到指定的URL,但是如果浏览器未启动,则会先调用函数Launch来打开浏览器。
Launch函数的定义如下所示:
preparestheframeworkforusage,andconfiguresallinternalframework
'variablesandstructures
'apptype-usedtolaunchdifferenttypesofapplicationsbased
'upondifferenttechnologies--currentlythereisonlyweb
'val-stringthatrepresentswhattolaunch
'returns-alwaysreturnstrue
PublicFunctionLaunch(apptype,val)
If"website"=apptypeThen
thirdlevel=""
ReportmicPass,"Initialize","InitializingFramework"
level=split(webLevels,leveldelimiter,-1,1)
desc=split(webLevelsDesc,leveldescdelimiter,-1,1)
object=split(objects,objectdelimiter,-1,1)
objectDescription=split(objectsDescription,objectsDescriptiondelimiter,-1,1)
CloseBrowsers
SetIE=CreateObject("InternetExplorer.Application")
IE.visible=true
IE.Navigateval
WhileIE.Busy
wait1
Wend
EndIf
initialized=true
Launch=true
EndFunction
可看到脚本中创建了IE的COM对象,然后设置IE的Visible属性设置为Tue,让浏览器可见,然后调用IE对象的Navigate方法导航到指定的URL。
除了创建IE的COM对象外,在Launch函数中还进行框架其它方面的初始化。
4.4给指定字符串前后加双引号
在BrowseTo函数的定义脚本中,调用了一个名为Quote的函数,该函数的定义如下所示:
'generatesastringwithembedded/surroundingquotes
PublicFunctionQuote(txt)
Quote=chr(34)&txt&chr(34)
EndFunction
该函数的作用是给指定的字符串前后加上双引号字符,例如下面代码
Msgbox"Themessageis"&Quote("helloworld!
")
执行结果显示如图所示。
如果我们不使用这个函数,则需要这样写我们的代码来实现同样的功能:
Msgbox"Themessageis""helloworld!
"""
很明显,这样的写法写出来的代码的可读性和可维护性都差一截。
4.5点击链接
作为一个针对WEB应用的脚本框架,除了能启动浏览器导航到指定的页面外,还需要针对页面的各种元素进行测试操作,例如链接的点击、按钮的点击操作。
在SAFFRON框架中,使用Activate函数来点击链接、按钮,其函数定义如下所示:
'Activatesanobjectbaseduponitsobjecttype
'objtype-thetypeofobjectshouldbelimitedtovaluesintheobjectarray
'text-identifyingtextforthecontrol-foralink,it'sthetextofthelink
PublicFunctionActivate(objtype,text)
localDesc=""
Ifthirdlevel<>""Then
localDesc=GenerateDescription(level
(2))
Else
localDesc=GenerateDescription(level
(1))
EndIf
AutoSync()
SelectCaseobjtype
Case"Link"
ExecutelocalDesc&GenerateObjectDescription("Link","innertext:
="&text)&"Click"
ReportmicPass,"LinkActivation","TheLink"&Quote(text)&"wasclicked."
Case"WebButton"
ExecutelocalDesc&GenerateObjectDescription("WebButton","value:
="&text)&"Click"
ReportmicPass,"WebButtonActivation","TheWebButton"&Quote(text)&"wasclicked."
EndSelect
EndFunction
函数首先判断对象的类型,然后根据对象类型分别处理,如果是链接对象,则通过以下语句组合成可执行的VBScript语句,然后用Execute函数来执行:
ExecutelocalDesc&GenerateObjectDescription("Link","innertext:
="&text)&"Click"
如果是按钮对象,则组合成:
ExecutelocalDesc&GenerateObjectDescription("WebButton","value:
="&text)&"Click"
在这里,调用了GenerateObjectDescription函数,GenerateObjectDescription函数的作用与GenerateDescription函数的作用类似,都是用于返回一个测试对象的描述,不同的是GenerateObjectDescription函数需要传入测试对象的描述数组,GenerateObjectDescription函数的定义如下:
'Generatesanobjectdescriptionbasedupontheobject,andobjectDescriptionarrays
'obj-nameoftheobjectintheobjectarray
'prop-additionalpropertytohelpuniquelyidentifytheobject
'returns-astringrepresentativeoftheobjectdescription
PublicFunctionGenerateObjectDescription(obj,prop)
i=IndexOf(object,obj)
ndesc=""
Ifi<>-1Then
ndesc=obj&"("&Quote(objectDescription(i))&","&Quote(prop)&")."
EndIf
GenerateobjectDescription=ndesc
EndFunction
有了Activate函数,我们在写脚本的时候就可以充分利用,简化脚本的编写,例如下面是两句简单的脚本,分别点击页面上的一个链接和一个按钮:
Activate"Link","Person"
Activate"WebButton","Search"
在Activate函数中,调用了一个名为AutoSync的函数,该函数的作用与QTP的Sync方法是一样的,只是在外面封装了一层,函数定义如下所示:
'waitsforthewebpagetofinishloading
PublicFunctionAutoSync
ExecuteGenerateDescription("Browser")&"Sync"
EndFunction
AutoSync函数用于等待WEB页面加载完成。
4.6一个小例子
到现在为止,我们可以使用SAFFRON的Launch、BrowserTo和Activate函数来编写简单的脚本启动浏览器,导航到指定的页面,点击链接和按钮,例如下面就是一个综合了这几个功能的脚本:
'启动浏览器
Launch"website","http:
//127.0.0.1:
1080"
'导航到http:
//127.0.0.1:
1080/WebTours
BrowseTo"http:
//127.0.0.1:
1080/WebTours/"
'点击名为“administration”的链接
Activate"Link","administration"
该脚本调用SAFFRON框架的Launch函数启动IE浏览器,然后导航到http:
//127.0.0.1:
1080/WebTours,点击如图所示的页面中名为"administration"的链接。
脚本的测试结果如图所示。
4.7检查对象是否存在
前面的小例子仅仅实现了启动浏览器、导航、点击链接和按钮的功能,如果要组成一个完整的测试用例,还缺少一些东西,例如检查指定的对象是否存在,在SAFFRON中,用Verify函数来实现这个功能,Verify函数的定义如下所示:
'VerifytheExistenceofanobject
'objtype-valuesshouldbelimitedtovaluesintheobjectarray
'text-multi-purposeargumentthatindicateswhattoverify
'-foralink,orbutton,it'sthetextofthecontrol
'-foralist,it'sthenameofthecontrol
'-foraframe,it'sthenameoftheframe
PublicFunctionVerify(objtype,text)
rval=false
localDesc=""
estr=""
Ifthirdlevel<>""Then
localDesc=GenerateDescription(level
(2))
Else
localDesc=GenerateDescription(level
(1))
EndIf
AutoSync()
SelectCaseobjtype
Case"Page"
Execute"rval="&GenerateDescription(level
(1))&"Exist(0)"
IfrvalThen
Execute"title="&GenerateDescription(level
(1))&"GetROProperty("&Quote("title")&")"
Iftitle=textThen
rval=true
Else
rval=false
EndIf
EndIf
Case"CurrentFrame"
Ifthirdlevel<>""Then
estr="rval="&localDesc
EndIf
Case"Link"
estr="rval="&localDesc&GenerateObjectDescription("Link","innertext:
="&text)
Case"WebButton"
estr="rval="&localDesc&GenerateObjectDescription("WebButton","value:
="&text)
Case"WebList"
estr="rval="&localDesc&GenerateObjectDescription("WebList","name:
="&text)
Case"WebEdit"
estr="rval="&localDesc&GenerateObjectDescription("WebEdit","name:
="&text)
EndSelect
Ifestr<>""Then
Executeestr+"Exist(0)"
EndIf
IfrvalThen
ReportmicPass,objtype&"Verification","The"&objtype&""&Quote(text)&"wasverifiedtoexist"
Else
ReportmicFail,objtype&"Verification","The"&objtype&""&Quote(text)&"wasnotfound"
EndIf
If"True"=rvalThen
rval=True
Else
rval=False
EndIf
Verify=rval
EndFunction
由于判断不同对象的存在需要采用不同的属性,因此Verify函数中对不同的对象类型进行判断、分别处理。
例如,对于Link类型的对象,用innertext属性,对于WebButton,则采用value属性,但是最后都需要组合成一条语句,后接"Exist",通过Execute方法执行这个语句,从而实现对象是否存在的判断。
对于页面对象(Page)的存在性检查有点不一样,采用的是以下脚本:
Case"Page"
Execute"rval="&GenerateDescription(level
(1))&"Exist(0)"
IfrvalThen
Execute"title="&GenerateDescription(level
(1))&"GetROProperty("&Quote("title")&")"
Iftitle=textThen
rval=true
Else
rval=false
EndIf
EndIf
通过GetROProperty方法获取当前页面的title属性,然后与传入的"text"参数进行比较,如果相等,则认为页面对象是存在的。
在测试脚本中可以这样使用Verify函数:
'启动浏览器
Launch"website","http:
//127.0.0.1:
1080"
'导航到“http:
//127.0.0.1:
1080/WebTours”
BrowseTo"http:
//127.0.0.1:
1080/WebTours/"
IfVerify("Link","administration")=Falsethen
Reporter.ReportEventmicFail,"检查链接","链接不存在"
Else
'点击名为“administration”的链接
Activate"Link","administration"
EndIF
脚本中先用Verify检查名为"administration"的链接对象是否存在,如果不存在则提示错误,如果存在则进一步调用Activate函数点击链接。
4.8在文本框输入字符串
在SAFFRON中,可以使用EnterTextIn函数来给输入框(WebEdit对象)输入字符串。
EnterTextIn函数的定义如下所示:
'Enterstextintoaneditfield
'objname-nameofthecontrol--useObjectSpyifyoudon'tknowwhatitis
'text-thetexttoenterintothecontrol
PublicFunctionEnterTextIn(objname,text)
lo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 透析 QTP 自动化 测试 框架 SAFFRON
![提示](https://static.bdocx.com/images/bang_tan.gif)