IBMRationalFunctionalTester工作原理初探_第1页
IBMRationalFunctionalTester工作原理初探_第2页
IBMRationalFunctionalTester工作原理初探_第3页
IBMRationalFunctionalTester工作原理初探_第4页
IBMRationalFunctionalTester工作原理初探_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

IBMRationalFunctionalTester工作原理初探引言IBMRationalFunctionalTester(亦被简称为RFT)是一款壮大的面向对象自动化测试工具,能够支持多个领域的应用程序测试,如、HTML、.Net、Siebel、SAP、等。最近几年来它的用户群慢慢壮大,为自动化测试的普及做出了专门大的奉献。随着应用范围的增多和深切,用户也再也不知足于“知其然不知其因此然”的低级时期,期望了解更多RationalFunctionalTester底层的知识,把握更多的高级技术,让它更好地效劳于自己的测试需求。本文将引领读者对RationalFunctionalTester的结构和工作机理进行假设干浅析,揭露出RationalFunctionalTester测试动作背后的假设干秘密。RationalFunctionalTester测试的前提相信很多读者在接触RationalFunctionalTester这种自动化测试工具后,都会有如此的疑问:它什么缘故能够操纵Java程序或阅读器呢RationalFunctionalTester能够操控被测控件、完成用户指定的自动测试动作,但前提是它需要具有与被测应用程序(ApplicationUnderTest,AUT)进行通信的能力。要做到这一点,RationalFunctionalTester第一必需成立自身与被测应用的沟通渠道,该进程关于RationalFunctionalTester而言,被称为“启用被测应用程序”。目前RationalFunctionalTester能够支持如下领域的被测应用程序:基于Java平台的程序、基于.Net平台的程序、HTML程序,和基于Siebel、SAP、Flex等特定平台的应用程序。RationalFunctionalTester提供了如此的一个向导窗口来帮忙用户“启用被测应用程序”,在那个简练的对话框的“启用(Enable)”按钮和“测试(Test)”按钮的背后,还隐藏着更多的细节。图1.启用环境向导对话框

在RationalFunctionalTester的术语词典里,那个地址的每一类应用程序都被称为“域”(domain)。成立沟通渠道的操作,都是作用在某个特定的“域”上,你能够在RationalFunctionalTester和“Java域”之间成立沟通渠道,这确实是在RationalFunctionalTester中启动Java被测应用程序的进程;依此类推,你也能够为.Net程序、SAP程序成立它们和RationalFunctionalTester之间的特有的沟通渠道,使得RationalFunctionalTester能够进而对.Net程序、SAP程序进行测试。在为每类程序(或进程)建好沟通渠道后,你还需要对渠道进行必要的测试,查验通信是不是能正常工作。RationalFunctionalTester正是通过这些沟通渠道来对被测程序(或进程)的控件发出指令、执行动作的。成立沟通渠道时,RationalFunctionalTester关于被测应用程序,会新建一个DomainImplementation对象实例,由它来抽象出一个接口,提供具体的域相关细节给RationalFunctionalTester。DomainImplementation对象的使命有:获取该域最高级别的对象注册该域可用的代理对象为指定的控件创建代理对象以下图是启用阅读器环境的测试结果,能够看见Java,HTML两种DomainImplementation对象都被加载,来完成HTML被测应用的测试。(因为HTML应用程序在呈现时会涉及到Java内容)图2.阅读器启用的测试结果

“域”、“顶级对象”、“测试对象”、“代理对象”,又有这么多新名词显现,它们和RationalFunctionalTester的运作有着如何的关系呢下面咱们会一一介绍它们的作用和典型动作。RationalFunctionalTester进程级交互RationalFunctionalTester进程模型咱们明白,运行中的程序和是以进程的形式存在的。第一咱们来看一下RationalFunctionalTester和被测程序间的进程相关细节。在RationalFunctionalTester的设计计划里,各个相关进程依照所处位置和相对关系分成两类:客户端进程和端进程。被测应用程序进程被称为“RationalFunctionalTester效劳器端进程”,而录制,回放,对象查看器,和集成开发环境(IDE,Eclipse或VisualStudio.Net)等进程那么被称为“RationalFunctionalTester客户端进程”。不论用户利用的是Java环境仍是.Net编程环境来进行脚本开发,进程间的关系皆是如此,如以下图所示。更直观地说,与RationalFunctionalTester直接相关的进程是客户端,与被测程序直接相关的进程是效劳器端。图3.客户端进程和被测应用程序(效劳器端进程)

RationalFunctionalTester与被测应用程序的进程级交互RationalFunctionalTester客户端进程与被测应用程序进程进行交互,并从中获取必要的相关信息来完成录制、回放、对象查看之类的动作。它们借助进程间通信(IPC)层的共享内存进行通信。图4.进程和测试上下文

RationalFunctionalTester给每一个相关进程(包括客户端及效劳器进程)创建测试上下文(TestContext)对象,并在共享内存里进行注册,该测试上下文对象是测试进程顶用来操作被测程序的句柄(reference)。已注册的测试上下文对象将承担关联进程的所有。通常情形下,测试上下文对象会关联到一个级的被测进程,或测试客户端。固然,有时会有多个测试上下文对象关联到同一个进程。两个被测应用程序的测试上下文(TestContext)对象是无法直接通信的,它们需要一个中介:RationalFunctionalTester客户端进程的测试上下文对象,来传递通信信息。图5的上半部是RationalFunctionalTester客户端进程,下半部是各类效劳器端进程,即被测程序,它们之间的交流和通信只能在共享内存区域完成的。图5.进程和测试上下文内部结构

注:侦窥内存,英文术语为SpyMemory,即共享内存,其中的各类测试上下文承担被测程序及RationalFunctionalTester间通信功能。RationalFunctionalTester进程通信模型里的每一个进程都需要借由测试上下文(TestContext)对象来治理它的进程间通信的挪用和请求。RationalFunctionalTester客户端进程会和多个被测应用程序(AUT)进程交互,以RationalFunctionalTester回放时的客户端Find进程为例,它会和所有的被测应用程序进行通信来确信被寻觅的控件对象。但在同一时刻里,每一个被测应用程序进程只能和唯一的RationalFunctionalTester客户端进程交流。对象治理器(ObjectManager)处置所有效劳器端的进程通信,和与被测程序交互的元动作。对象治理器会有多个代理(Agent),每一个对象治理器代理负责一类测试上下文对象的相关元动作。在测试上下文(TestContext)对象里,域(TestDomain)对象是用于治理与它相关的特定通信。例如,关于被测应用的阅读器进程,一个HTML测试上下文对象和一个Java域对象会被创建,因为阅读器里包括了隶属于HTML域的HTML元素,和隶属于Java域的JavaApplets。而在域(TestDomain)对象里,代理对象(ProxyObject)的作用是治理控件一级的通信。它被RationalFunctionalTester创建出来,用以和控件通信,来操纵它们完成指定的功能测试动作。代理对象和被测应用程序的控件间有着一一对应的关系,任何控件间的交互都是通过代理对象这一媒介来达到。比如,各类不同类型的按钮别离会映射到不同的代理对象。注:上下文对象,对象治理器,域对象和代理对象都是创建在被测应用程序进程里。RationalFunctionalTester代理结构RationalFunctionalTester与被测应用程序控件的交互,有两个必不可少的要素:代理对象(ProxyObject)和测试对象(TestObject)。代理对象包裹实在际的被测应用程序控件,测试对象那么是该控件在脚本层面的展现,二者遥相呼应,传递测试的动作和信息。图6.Java代理对象结构图

注:为节约篇幅,那个地址仅以Java域的内容作介绍,.Net域的情形也大致相似。通过代理对象进行交互代理对象(Proxyobjects)有些类似于实际图形界面控件的包裹类。RationalFunctionalTester与被测应用程序并非发生直接接触,任何与被测应用程序的通信都需要对应的代理对象。代理对象创建后,被放置于被测控件能够访问并获取信息的地址。代理类能够用Java语言或C#语言来开发,来实现规定的RationalFunctionalTester与被测应用程序界面控件通信的接口。当您的应用程序实施了前文所提到“启用被测应用程序”操作后,它对应的代理类就会被加载到应用程序,成为被测应用程序的一部份。代理对象包裹实在际GUI测试对象(原生对象),使得它们能够被RationalFunctionalTester识别和测试。以HTML程序为例,HTML应用程序的阅读器被启用后,阅读器及其HTML控件的代理类都会被加载到阅读器中。关于WindowsInternetExplorer阅读器,“启用被测应用程序”那么会把InternetExplorer阅读器相关的代理类——阅读器辅助对象(BrowserHelperObject)文件作为第三方插件装入InternetExplorer阅读器插件集,在启动后还将加载另外两个文件和,并与它们一起负责RationalFunctionalTester和HTML被测程序间的交互行为。(该进程和木马的工作原理类似)另外,RationalFunctionalTester设计领先、开放灵活的架构许诺用户能够创建新的ProxyObject类,或拓展某个现有的ProxyObject类来支持新的界面控件。通过测试对象进行的交互测试对象(TestObject)是被测对象控件的脚本端接口,界面控件在自动测试脚本里会表现为测试对象。例如,一个按钮控件被表述为GuiTestObject,顶级容器对象如对话框或框架控件被表述为TopLevelTestObject。测试对象(TestObject)方式的执行需要通过相应的代理对象(ProxyObject),测试对象驻留在RationalFunctionalTester客户端,它拥有指向被测应用程序的代理对象的句柄。图7.测试对象和代理对象间的交互

RationalFunctionalTester关于每一个支持的测试环境都已经提供了域对象,如Java,HTML,.Net等,而且在每一个域里,还提供了所支持的各类被测应用程序控件的代理对象(ProxyObject)类。代理对象类与被测应用程序控件之间的映射关系被保留在RationalFunctionalTester的安装途径下的可定制文件里,RationalFunctionalTester通过这些可定制信息来确信关于某种被测控件该利用哪一种适合的代理对象。注:被测控件和代理对象间的映射关系要紧保留在文件C:\ProgramFiles\IBM\SDP\FunctionalTester\bin\里。在相同途径下,还存有其他领域的,和扩展的rftcust定制文件。图8.rftcust定制文件

图9是打开后的文件,内容以XML格式展现,层次清楚,层次分明。大伙儿能够看到代理治理器(ProxyManager)下辖五类测试域的代理对象,别离是Java、HTML,.Net,Win和ActiveX。展开的ActiveX部份里还能够看见映射关系的细节:该领域的DispHTMLObjectElement控件对应着RationalFunctionalTester提供的类,自动测试脚本将通过那个类来操控DispHTMLObjectElement控件上的各类动作,完成既定测试。图9.文件内容局部

每一个RationalFunctionalTester支持的实际控件都会对应着一个代理对象(ProxyObject),但有时也会有多个不同的控件对应同一代理对象的情形,如以下图所示。显现这种情形的缘故是,开发设计人员以为该代理对象提供的通用性接口已经足以覆盖这些控件的测试需求。固然,若是用户对某些控件有着更为细致的操控要求,能够自行拆解、拓展这一部份,使得RationalFunctionalTester能够完成更细微的测试动作。图10.一对一、一对多的映射关系(文件内容局部)

即便是在默许配置下不为RationalFunctionalTester所支持的新界面控件,用户也能够通过创建对应的代理对象类来拓展RationalFunctionalTester的支持范围。例如,为了支持.Net域的.NetDataGridView控件,用户能够开发一个代理类,并把它的声明插入到文件里对应的位置。下面的代码确实是更新后的文件片段。图11.用户定制的代理对象映射

RationalFunctionalTester实际运行场景中的交互动作介绍了相关的众多复杂概念后,接下来咱们以最多见的录制、回放动作为例,剖析录制和回放的动作实质。整体上看,录制和回放的进程会牵涉到对象治理器、域对象、代理对象、测试上下文之间形形色色的交互。录制进程的交互动作详解下面是录制测试步骤时,对象治理器和对象治理器代理间的动作:定位屏幕上某处的对象。例如,proxyAtPoint方式。在对象图中获取识别属性,或初始化对象句柄。例如,getMappedTestObject方式。而关于代理对象,录制时会挪用到代理类里的以下方式:表1.录制操作所涉代理类方式列表动作调用方法进程级底层事件processMouseEvent()定位拖拽动作的目标对象getMethodSpecForPoint()验证点相关方法getTestDataTypes()

getTestData()

getProperties()

getStandardProperties()

getProperty()对象结构相关方法getMappableParent()

getParent()

getChildren()

getMappableChildren()

getOwner()

getOwned()对象识别相关方法getRecognitionProperties()

shouldBeMapped()

getRole()

getTestObjectClassName()

getRecognitionPropertyWeight()某个录制动作的细节如下:RationalFunctionalTester录制器启动,从对象治理器中取适当前点的代理对象;(实际动作在以后的第二步、第三步完成)获取所在域的顶级容器对象,返回;在顶级容器对象的子对象里查找,取得当前点的代理对象,返回;录制器取得当前操作的代理对象句柄;处置鼠标事件;设置事件或动作细节,返回并完成录制图12.录制动作时序图

回放进程的交互动作详解RationalFunctionalTester利用的识别属性值和控件层次结构来识别被测控件,这些信息被集中贮存在对象图(ObjectMap)里。回放时,这些信息被掏出来用以选择唯一的界面控件。在必要的时候,RationalFunctionalTester也会搜集诸如屏幕坐标,控件属性等,连同界面控件一路,被表征为脚本端的测试对象(TestObject)。录制时,用户的各类点击、双击或拖拽动作都是被封装为独立的测试对象的方式,比如button().click(atPoint(10,10)),回放时,RationalFunctionalTester用对象图里保留的识别属性找到对应的按钮型测试对象,再挪用点击方式来施加测试动作。回放时,RationalFunctionalTester客户端进程将请求发送到所有的测试域,在对象图里通过录制的可识别属性辨识出目标对象,不同的识别结果会引发RationalFunctionalTester不同的后续动作。表2.回放操作对象查找结果及后续行为结果动作未发现目标对象抛出对象未发现的程序异常发现多个目标对象将对象查找分值和阈值比对,来确定唯一的目标对象;如果不能确定,将抛出对象不确定的程序异常。发现唯一的目标对象代理将启动回放动作。例如,回放之前录制下

温馨提示

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

评论

0/150

提交评论