基于Rational Functional Tester的 对象识别技术的研究
本文主要针对目前市场上流行的自动化功能测试工具IBM的RFT(Rational Functional Tester)的对象识别技术进行研究,首先介绍了RFT的对象映射原理,同时基于此原理提出两种方式来编制自动化测试脚本,解决自动化录制过程中自动识别GUI组件失败的问题,此方式在GUI组件对象识别中有着广泛的应用前景。
目前,软件的质量越来越受到重视,都将软件测试作为保证软件质量的重要手段之一。国内大多数软件企业纷纷建立自己的软件测试团队和SQA (Software Quality Assurance,软件质量保证)部门,同时大量引入国外流行的自动化测试工具来提高测试团队的能力。但是,大多数的软件企业的测试人员都喜欢采用自动录制的方式,从而产生测试脚本来帮助执行自动化测试,当使用自动化功能测试工具进行功能测试时,常常出现自动化无法识别GUI组件,产生不正确的自动化测试脚本,测试的效率就大打折扣,从而严重影响了工作质量,最终又回归到了手工测试的方式。 Rational Functional Tester(RFT)是IBMRational提供的一款先进的、完全面向对象和跨平台的基于图形化界面的自动化功能和回归测试工具,侧重于GUI方面的测试。能够模拟用户的实际使用,进行复杂的测试。其支持对Java、.NET和Web应用程序可视化组件的自动化测试,同时测试脚本在.NET和Java平台可直接运行。 从开发的角度看,GUI组件通常都是基于某一GUI开发库,比如SWT/SWING/AWT等,这些库通常是按照面向对象的方式进行建模的,它将每一个GUI组件元素映射成为该库中某一个类对象。 从测试的角度看,所有的GUI组件元素,无论是基于何种GUI库,都将被RFT代理映射成为对象,RFT提供一个对象模型框架管理各种GUI元素。 RFT主要通过Proxy代理来对GUI组件进行获取和控制,使GUI对象转化为RFT脚本中的测试对象,供测试人员使用,然后以RFT对象为基础产生自动化的功能测试脚本。RFT的工作原理如下图1所示: 图1 RFT对象模型映射机制-资料来源于中国评测 对象识别就是在RFT的对象模型框架下,得到被测试程序的GUI对象,即RFT对象。它是对象层开发中最核心的任务。 在图2中,TestObject是RFT工具识别的对象的基类,在常用对象识别中,GUI组件元素都是被映射为GuiTestObject对象。但是,RFT中还有一个非常重要的根接口是IGraphical接口,它定义了针对GUI组件元素的所有标准操作,如click、doubleclick、drag等。灵活运用这些类、接口及其方法,能够有效地扩展RFT对象的识别功能。在图2中的IWindow接口继承了IGraphical接口,从这点分析,可以看出IWindow接口具有与GUITestObject类似的功能。 图2 RFT对象的类图分析-资料来源于中国评测 下面通过两种方法来讲述如何使用RFT去识别GUI组件,以满足不同测试需求: 1、利用IWindow接口识别与平台相关的GUI组件; 由于IWindow接口继承了IGraphical接口,从这点看,使用此接口能够识别平台相关的GUI组件,假定在Windows平台上。 //method1:识别桌面上所用的顶层窗体,放入到数组中 RootTestObject root = RootTestObject.getRootTestObject(); IWindow[] topwin = root.getTopWindows(); //method2:识别桌面上所用的顶层窗体,放入到数组中 IWindow[] topwin = RationalTestScript.getTopWindows(); //识别指定的窗体 IWindow接口的getText()方法使用,如是窗体,则识别出顶层窗体的标题名字,如果是被识别,则返回窗体的文本值。 例:如下图3,目的识别此窗体上红色框中的字段,即窗体的标题栏信息“识别Active控件”,代码如下: 图3 控件显示-资料来源于中国评测 public IWindow getWindow(String sCaption) { // sCaption = “识别Active控件”; IWindow[] wins = RationalTestScript.getTopWindows(); IWindow current = null; for (int i=0; i { Current = win[i]; If (current.getText().matches(Scaption) return current; } return null; } 2、利用Invoke去调用GUI组件自身的方法获取GUI组件的属性数据。 利用Invoke去调用GUI组件自身的方法获取GUI组件的属性数据,如图4获取红框中的字符串“test2”。 图4 控件显示-资料来源于中国评测 Public String getDatas(TestObject tt, String mathMethod) { String result = null; MethodInfo[] m = tt.getMethods(); for (int i=0; i { System.out.println(m[i].getName()+”==signature=” +m[i].getSignature(); if (m[i].getName().matches(Method) //Method代表用户定制控件设计的取值方法的名称 String result = (String) tt.invoke(m[i]. getName,m[i].getSignature,args); return result; } Return result; } 总结: 本文研究了RFT两种对象识别扩展技术,一是利用IWindow接口识别Windows平台的标准组件;另一是利用Invoke方法识别用户自定义的GUI组件,并调用其组件本身的方法获取属性。这两种方法都是基于对RFT对象类图的分析,理清GUI组件和RFT对象之间的对应匹配关系,将可以帮助我们有效地解决RFT自动识别对象失败的问题。
责编:梦右右
微信扫一扫实时了解行业动态
微信扫一扫分享本文给好友
著作权声明:kaiyun体育官方人口 文章著作权分属kaiyun体育官方人口 、网友和合作伙伴,部分非原创文章作者信息可能有所缺失,如需补充或修改请与我们联系,工作人员会在1个工作日内配合处理。
|
最新文章
|