QTP工作原理的学习心得.docx_第1页
QTP工作原理的学习心得.docx_第2页
QTP工作原理的学习心得.docx_第3页
QTP工作原理的学习心得.docx_第4页
QTP工作原理的学习心得.docx_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

QTP工作原理的学习心得发表时间:2009-10-10 23:59:11作者:未知来源:网络转载阅读次数:79 一直认为学习一个工具一定要学会它的本质和原理才能真正的有所收获,不然工具换掉或者工具被淘汰就会很尴尬,又要从头学习。当你学会了本质,其他的工具学习起来也会很快的,并且从开发的角度去思考问题,更容易学习好一个工具。最近学习了几天的QTP,对QTP的原理有一个简单的认识,和大家分享下。 个人认为QTP的脚本运行其实就是一组对象有组织的执行自己的方法,最终完成一个流程的过程。当打开一个web时,想要脚本能够模拟人来操作整个流程,那多就要求这个脚本能够识别人的每一个操作,而人的操作实际上是对web页面上控件的操作,所以只要QTP的脚本能够识别人操作过的控件就可以模拟人的操作流程,而web页面上的控件都是QTP脚本中的对象,也就是说只有QTP脚本中的对象能够被唯一的识别出来,就可以模拟人的整个操作流程。而QTP又是如何识别对象的呢?对象识别原理就是获取hwnd,然后判断ui属性,逐个判断,然后逐层递归,最后获取每个对象的所有层面的属性,跟对象库里的属性进行比较,匹配则应用。也就是说在你添加一个对象到对象仓库中的时候,该对象的主要属性都被保存到对象库中了,回放QTP脚本的时候实际上就是在被测试软件中寻找指定的对象,然后按照这些对象指定的方法去完成一个动作,而这些方法就是把windows win32中、web上的一些activex控件中的方法和微软控件对外的接口中的一些方法进行封装,成为qtp自己的方法。对于任何一个add-in都是先找到人家的对外接口,然后拿过来封装,需要的时候去调用接口事件,也就成为了QTP的动作。所以QTP脚本回放实际上就是要做两个步骤:1)识别出要操作的对象控件。2)识别出对象控件后来完成该对象控件指定的方法。在QTP识别对象的时候是按照对象的唯一属性来区分的,有时候QTP对象仓库保存的对象属性是不完全的,导致两个很相似的对象不能够识别出来,这样脚本就会报错,或者说对象仓库中对象的属性每次都是变化的,那么每次回放脚本也会和对象仓库中保存的不一致导致脚本报错。这里介绍一个很好用的web对象的属性object属性。QTP支持直接访问DOM,可以通过DOM来访问HTML标签。在QTP中,访问DOM是通过使用page测试对象的object属性来进一步访问的,这样就可以访问到很底层的对象属性,可以用底层的对象属性来唯一区分web页面上的对象控件,这样就能够解决一些关于对象识别的错误。用page页中的Link对象举例说明object属性:Browser(网易).Page(网易).Link(VIP收费邮箱).CheckProperty URL,/其中使用了CheckProperty方法来对比Link对象的URL属性是否等于指定的地址(/),也可以用Link对象的object属性中的herf属性来对比,代码如下: herf = Browser(网易).Page(网易).Link(VIP收费邮箱).Object.hrefIf not herf = / Thenreporter.ReportEvent micFail,/, herfEnd If2009年1月,HP发布了QTP 10。新版本的QTP在脚本开发方面增强不少,越来越像一款名副其实的自动化测试开发工具了。另外,与QC 10的紧密结合,不仅延续和增强了HP的BPT战略意图,更让自动化脚本的版本控制得以真正实现。现在,就让我们来展开一次QTP新特性之旅吧!系统需求和环境支持在系统需求方面,QTP 10所要求的硬件环境并没有太大的改变,最低512M的内存、PIII以上CPU即可。但是如果使用“Save movie to results”功能的话,则推荐使用1G内存以上,因为该功能会在运行过程中录制界面视频,将占用比较多的内存资源。新版本的QTP添加对Windows Server 2008操作系统的支持。浏览器方面,则添加对Firefox 3.0.x和IE8.0 beta 2的支持。另外,对Delphi、Java、.NET的支持都有不同程度的增强。增强的QC整合能力对于升级安装,只能从QTP9.5升级到QTP10,9.5之前的版本需要先卸载再安装。安装过程与QTP9.5类似,在此就不再赘述了。安装完毕后,可以从“Help-Product Feature Movies”菜单中选取视频,观看对QTP10的新特性的演示。其中一项介绍的就是QTP10与QC10的整合。在QTP10中,提出了一个新概念“QuickTest assets”:QuickTest assets include tests, components, application areas, and the resources associated with them, such as shared object repositories, function libraries, recovery scenarios, and external data tables.QTP通过与QC整合,把测试脚本所涉及的方方面面的资源统一作为“QuickTest assets”管理起来。在QC10中引入了一个新的模块“Test Resources”。在之前的版本,QTP的测试脚本和相关资源文件都是作为附件存储在QC中,而QC10中的“Test Resources”这个模块就可用于独立管理QTP的各项资源以及它们之间的依赖关系。版本控制和基线需要注意的是,基线(Baselines)功能只有在QC10的Enterprise和Premier版本中才有,在Starter版本中不支持。在旧版本的QTP和QC中,只支持有限的版本控制功能,并且需要安装版本控制的插件,通过第三方的版本控制工具来执行版本控制功能。而现在,版本控制功能被完全整合到QC中。当QTP通过版本控制连接到QC项目中时,你可以把QTP中的任何“QuickTest asset”签入到版本控制数据库中,相反也可以签出项目中的任何“QuickTest asset”。类似于版本控制工具中提供的版本比较工具,新版本的整合环境中提供了“Asset Comparison Tool”,用于比较不同版本的QTP测试脚本、各项“QuickTest Asset”之间的差异。可移植性QTP的测试和相关资源文件通常会被存储在服务器或QC上,然而,很多时候,我们需要在离线的情况下打开和运行QTP测试脚本,或者出差时把相关测试脚本打包拷走。现在,新版本的QTP允许你通过“File-Save Test with Resources”的方式创建一个独立的测试脚本和相关资源的完整拷贝。这种方式保存的测试脚本会把测试脚本相关的资源文件、调用的action都一并保存到本地磁盘。本地系统监视器在QTP10中引入了一个显著的新功能“Local System Monitoring”。可以从菜单“File-Settings-Local System Monitor”访问该功能。“Local System Monitoring”功能让你可以在测试运行的过程中,监视你的应用程序所使用的本地机器的资源。你可以通过监视各项系统计数器来观察和了解你的应用程序在单用户运行的情况下的资源使用情况。而且可以定义计数器的上限,如果计数器的采样值超过了指定的上限,则测试结果会置为Fail。动态调用Action在以前版本,如果你插入一个外部的Action,那么那个Action就成为测试的一部分,每次打开这个测试都会加载那些Action。而在新版本的QTP中,提供“LoadAndRunAction”语句,可用于在测试脚本运行时加载Action。这有什么好处呢?举个例子,如果你使用了很多条件语句来调用外部的Action,而你又不想在每次打开测试时都加载那些Action进来,因为并不是每次运行都需要这些Action,那么这个时候“LoadAndRunAction”就很适用了。通过“LoadAndRunAction”调用的Action只有在测试运行时才被加载和执行,例如下面的例子在Test1中加载Action1并执行一次迭代:CustomerType = DataTable.Value(Customer_Type,dtGlobalSheet)NumOfOrder = DataTable.Value(Number_of_items,dtGlobalSheet)While NumOfOrder 0NumOfOrder = NumOfOrder - 1If CustomerType = Gold or CustomerType = Silver or CustomerType = Bronze ThenLoadAndRunAction c:QTPTestOrderActions, CustomerType&OrderElse Error valueWrongDataValue CustomerTypeEnd IfWend下面的例子同样是动态加载Action1并执行一次迭代,不同的是通过环境变量来存储Action1的路径:CustomerType = DataTable.Value(Customer_Type,dtGlobalSheet)NumOfOrder = DataTable.Value(Number_of_items,dtGlobalSheet)TestPath=c:QTPTestWhile NumOfOrder 0NumOfOrder = NumOfOrder - 1If CustomerType = Gold ThenLoadAndRunAction Environment(default_path)&OrderActions, GoldOrder,oneiteration, NumOfOrderElseif CustomerType = Silver ThenLoadAndRunAction TestPath&OrderActions, SilverOrder, oneiteration, NumOfOrderElseif CustomerType = Normal ThenLoadAndRunAction TestPath&OrderActions, NormalOrder, oneiteration, NumOfOrderElse Error valueMsgbox WrongDataValue CustomerType End IfWend新的Reporter功能同样有助于我们更灵活地编写测试脚本的是Reporter对象的ReportEvent功能,新的ReportEvent语法定义如下:Reporter.ReportEvent EventStatus, ReportStepName, Details , ImageFilePath很明显,添加了在测试报告中插入图像的功能。例如下面的代码使用ReportEvent来让测试报告包含运行过程中捕获的图片:Browser(Browser).Page(WebPage).Image(MyLogo).CaptureBitmap(MyLogo.bmp)Reporter.ReportEvent micDone, Display Logo, This is my logo, MyLogo.bmp而在之前的版本,要实现类似的功能,则需要自己动手编写函数,例如:Function CaptureBitmapAndSaveToLog( w_Snder, micStatus, titleMessage ) Dim dateTimeNow, fileNameStr, detailsStr 用时间作为截图的文件名dateTimeNow = DotNetFactory.CreateInstance( System.DateTime ).Now.ToString( ddMMyyHHmmss ) fileNameStr = Reporter.ReportPath & & dateTimeNow & .png 调用CaptureBitmap方法进行截图If w_Snder.Exist Then w_Snder.CaptureBitmap fileNameStr, True Else Desktop.CaptureBitmap fileNameStr, True End If 插入到HTML代码中detailsStr = < & 通过Reporter展现在测试报告中Reporter.ReportEvent micStatus, titleMessage, detailsStrEnd Function Register for WEBRegisterUserFunc Browser,CaptureBitmapAndSaveToLog,CaptureBitmapAndSaveToLogRegisterUserFunc Page, CaptureBitmapAndSaveToLog, CaptureBitmapAndSaveToLogRegisterUserFunc Frame, CaptureBitmapAndSaveToLog, CaptureBitmapAndSaveToLogRegisterUserFunc Dialog, CaptureBitmapAndSaveToLog, CaptureBitmapAndSaveToLog Register for Standard WindowRegisterUserFunc Window,CaptureBitmapAndSaveToLog,CaptureBitmapAndSaveToLog Regis

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论