自动化测试RFT系列.docx
- 文档编号:23912455
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:39
- 大小:654.99KB
自动化测试RFT系列.docx
《自动化测试RFT系列.docx》由会员分享,可在线阅读,更多相关《自动化测试RFT系列.docx(39页珍藏版)》请在冰豆网上搜索。
自动化测试RFT系列
教程1:
适用范围
首先这里的RFT的全称是RationalFunctionalTester,是IBMRational支持的自动化测试工具。
它的前身是RationalJRobot,RationalXDETester。
任何一款自动化测试工具都有一定适用范围,从市场占有率就可以看出来RFT绝对没有QTP(HPQuickTestPro)那么宽广的适用范围。
虽然IBM一直都在宣称支持大部分主流前台技术,实际上,RFT的适用范围并不像广告的那样漂亮。
根据我的经验,RFT的适用范围如下:
1.Html类(包括Ajax),Java类(比如Swing,SWT)被测系统。
针对这几类被测系统,RFT一直有着漂亮稳定的发挥。
配合强大的IDE和API,用户几乎可以实现所有操作。
我的同事曾经使用RFT测试PowerBuilder、VB和Flex的系统,就会时常碰到很难实现甚至无法实现的操作。
所以在选择工具之初,一定要仔细考察工具和被测系统的适用情况。
2.具有Java背景,Eclipse使用经验的自动化测试团队。
RFT的IDE是IBM基于Eclipse开发而成,其本质就是Eclipse的一个plugin。
同时RFT的脚本语言是Java,所以对于Java背景的程序员来说,掌握RFT其实是件比较轻松的事情。
业界普遍认同脚本语言(如VB)更适合作为自动化测试的脚本语言而不是像Java那样的面向对象的语言,同时高版本的RFT也支持使用VB编辑脚本,但是我认为就RFT工具本身来说,Java是有其自己的优势,那就是强大的Java社区,比如Apache家族,Spring。
比如我们经常要进行的后台数据校验,我就比较倾向使用hibernate进行逻辑数据和物理数据的校验。
3.第3点是可选的,它就是IBM公司的业务影响力。
很多公司都和IBM保持着良好业务往来,IBM往往就会把自己下面的一些软件工具(比如RationalRose,RationalFunctionalTester)以较低的价格甚至是免费提供给合作伙伴。
这样如果RFT可以满足前两点的话,RFT就成了非常有性价比的自动化测试工具,也比较容易被Boss们所接受。
这里要强调一点,无论如何做足调研的工作。
尤其当不是第一点中的两类系统的时候,需要加倍的仔细。
否则即便是免费的工具,它也会严重地影响自动化测试的成败。
教程2:
从配置开始
在这一节里面我将介绍几个比较有用重要的配置:
1.配置测试报告类型
2.配置回放等待参数
3.配置补全内容(CompleteWord)
4.配置JRE/JDK
在进入正题之前,有一点需要声明,所有RFT系列所涉及的版本都是8.0.3
配置测试报告类型
1.打开RFT,切换到FunctionalTest视图下(一般默认就是这个视图),在上面的Menu,点击Window〉Preferences
2.在左面的展开FunctionalTester,然后展开Playback,最后点击Logging
3.在右侧选择LogType,后面的例子都会使用html类型的测试报告,所以这里选择html(如下图),然后点击Apply和OK按钮
配置回放等待参数
当RFT要回放点击一个按钮,RFT首先在寻找当前电脑上是否存在该按钮,如果存在则进行点击,如果不存在根据配置决定是否等待一段时间再寻找该按钮
1.打开RFT,切换到FunctionalTest视图下(一般默认就是这个视图),在上面的Menu,点击Window〉Preferences
2.在左面的展开FunctionalTester,然后展开Playback,最后点击Playback
3.在右边的2两个域内进行修改(如下图)
Maxtimuntimetoattempttofindtestobject:
一共会用多长时间去寻找被测控件(比如某按钮)
Pausebetweenattemptstofindtestobject:
等多久就发起一次新的寻找(单位:
秒)
配置补全内容(CompleteWord)
这个小功能比较实用,是Eclipse自己的功能,有的版本默认是Ctrl+Space,有的版本则是Ctrl+/
1.打开RFT,切换到FunctionalTest视图下(一般默认就是这个视图),在上面的Menu,点击Window〉Preferences
2.在左面的展开General,然后点击Keys
3.在过滤文本框里输入‘contentassist’,点击下面过滤出来的contentassist命令,然后可以在下放Binding处进行修改(如下图)
4.最后点击Apply和OK按钮
配置JRE/JDK
这是Eclipse自带的功能,这里提出来主要是因为一般默认都是IBM自己的JDK,有时版本比较滞后,我个人比较喜欢换成较新的JDK
1.打开RFT,切换到FunctionalTest视图下(一般默认就是这个视图),在上面的Menu,点击Window〉Preferences
2.在左面的展开Java,点击InstalledJREs
3.然后在右边进行添加或者修改(如下图)
教程3:
RFT是如何识别控件的
(一)抓取控件
一般的界面测试工具对自动化的实现都分以下几步:
1.识别被测控件(对象),并保存被测控件的特征至对象库,一般通过抓取控件或者直接录制实现
2.在回放时,工具通过保存好的控件特征去寻找合适的控件,特征可能包括属性,类型,也可能包括路径
3.当寻找到唯一的合适控件是执行相应的操作
RFT也是这样进行工作的,如何识别控件是使用每一个自动化测试工具的必修课。
我将会分几个小节从几个方面由浅入深地分析RFT是如何识别界面上的一个个控件。
这一节主要介绍通过RFT手动抓取控件至对象库。
在介绍之前,先解释几个关键词,这样也方便大家的沟通:
被测系统 指的就是需要测试系统,文章大多的例子都会以baidu、google为例,所以他们就是被测系统
控件 指的就是界面上一个一个元素,比如按钮,菜单,下拉框,表格等等,甚至包括IE本身
对象(TestObject) RFT把控件以对象的形式进行封装,让用户有操作对象就是操作控件的感觉
对象库(TestObjectMap) RFT把控件识别成对象之后存在在一个个对象库,进行保存。
用户一般通过对象库来管理对象
本节先这几个,后面有需要再补充
回到正题:
抓取控件
RFT支持两种抓取控件的方法,一个是在脚本里抓取控件,另一个是在对象库里抓取控件。
在脚本里抓取控件
目的:
抓取Google首页的“GoogleSearch”的按钮
1.在IE里面打开Google首页,打开RFT
2.创建一个空的脚本,全部使用默认参数
3.创建成功后在有侧Script视图里面,右键点击TestObjects选择InsertTestObject,会弹出一个InsertaGUIintotheObjectMap的窗口
4.点击ObjectFinder的按钮,并不放开鼠标,这时鼠标会变成手型,将鼠标拖至Google页面的GoogleSearch按钮等到按钮的边框标志成红色说明RFT已经确认识别该按钮后松开鼠标
5.这时InsertaGUIintotheObjectMap的窗口下方会出现该按钮的一些属性值,比如value值是GoogleSearch,type是submit等等。
6.点击Finish完成
这时控件按钮已经以对象的方式被加入刚刚创建的空脚本及其对象库,并且会有一个默认逻辑名字‘button_googleSearchsubmit’,方便用户在脚本里面使用:
[java] viewplaincopy
1.public void testMain(Object[] args)
2. {
3. button_googleSearchsubmit().click();
4. }
比如上面的就是点击该按钮的代码,同时我们还可以在Script视图里面修改这个逻辑名字。
在对象库里抓取控件
目的:
抓取Google首页的“I‘mFeelingLucky”的按钮
1.每一个脚本都会持有至少一个对象库,所以在我们上一个例子的脚本里面本身也持有一个对象库
2.在脚本右边Script视图里面,展开TestObjects,然后双击PrivateTestObjectMap
3.弹出‘PrivateTestObjectMapforScriptRFT_03_001’的窗口,展开中间的树桩结构,你可以看到刚才识别的按钮在树的最下端,同时下面显示这个按钮/对象的一些属性值
4.点击上面菜单中的TestObject,然后在下拉菜单选择InsertObject(s)
5.弹出一个InsertaGUIintotheObjectMap的窗口后,下面的操作和上面的方法一样
总结和比较
这两种方法主要有两个不同之处:
1.在脚本里面抓去控件,每次都只能一次,但是通过对象库则一次可以抓取多个,甚至整个界面上的所有控件(如图RFT_3_006)
2.通过对象库抓的控件是不能直接应用于脚本,需要将该控件添加到脚本(操作如图RFT_3_008)
教程4:
RFT是如何识别控件的
(二)对象库与脚本
上一节里面我们介绍了如何使用工具抓取控件(对象),现在大家一定很好奇,那些抓下来的对象最终以什么样的形式保存了下来呢?
这一节我们就将接触脚本和对象库是以什么样的形式保存在你的硬盘里面的。
回到上一节的例子,我们已经新建了一个RFT的项目并在其中新建了一个空的脚本(名字叫RFT_03_001),然后在脚本里面抓取的google主页上面的GoogleSearch按钮,并使用逻辑的对象名称button_googleSearchsubmit,下面我们就逐步在硬盘上找到他们。
RFT项目本质上就是一个Java的项目
我们现在所在的是名叫FunctionalTest的Perspective,我们可以通过Window->OpenPerspective->Java(或者Other里面查找)切换到JavaPerspective,在这个perspective下面,你可以清楚地看到一个RFT的项目其实就是一个Java项目(如下图RFT_4_001),只不过是多了一些文件和文件夹。
从上图我们看到这样几个文件夹PeferencedLibraries、(defaultpackage)、resources、templates和一个文件RFT_03_001.testsuite
1.PeferencedLibraries:
就是该项目所引用的Lib,包括RFT自带的jar也包括我们自己加的jar
2.(defaultpackage):
这是一个默认的package,如果没有指定TestFolder,所有的测试脚本都会创建在这里
3.resources:
这是本节最重要的一个package,它里面一般不存放脚本,但是存放更加重要的对象库,下面会详细介绍
4.templates:
这是存放项目中template文件的地方,在后面讲到template使用的时候会再次接触他
5.文件RFT_03_001.testsuite:
主要用于配合Rational其他工具使用,如ClearCase
首先是脚本文件:
脚本文件本身就是一个java类(RFT_03_001.java),同时它有继承一个叫RFT_03_001Helper的类,在RFT里面任何一个脚本(类)都继承一个**Helper类
[java] viewplaincopy
1.// RFT_03_001 class
2.public class RFT_03_001 extends RFT_03_001Helper
3.{
4. public void testMain(Object[] args)
5. {
6. button_googleSearchsubmit().click();
7. }
8.}
在上面的代码里面,testMain是脚本执行的入口,任何脚本的执行都是从它的testMain方法开始的。
[java] viewplaincopy
1.public abstract class RFT_03_001Helper extends RationalTestScript
2.{
3.
4. protected GuiTestObject button_googleSearchsubmit()
5. {
6. return new GuiTestObject(
7. getMappedTestObject("button_googleSearchsubmit"));
8. }
9.
10. protected GuiTestObject button_googleSearchsubmit(TestObject anchor, long flags)
11. {
12. return new GuiTestObject(
13. getMappedTestObject("button_googleSearchsubmit"), anchor, flags);
14. }
15.
16. protected RFT_03_001Helper()
17. {
18. setScriptName("RFT_03_001");
19. }
20.
21.}
**Helper类里面主要有两种函数,一个是构造函数,这里给该脚本设置了名字,另两个是返回对应控件的对象(TestObject) 方法,一般一个对象对应两个方法(通过重载可以接收不同的参数,后面我们会再提到他们的一些特殊应用),这样继承该Helper类的脚本就可以使用这样的方法来操作被测控件了,如脚本testMain方法里面的button_googleSearchsubmit().click();就表示点击该按钮。
在返回TestObject的方法里面,有一行代码是getMappedTestObject("button_googleSearchsubmit"),这个意思就是在TestObjectMap(对象库)里面寻找名字叫做button_googleSearchsubmit的TestObject(对象)。
现在我们就来看看储存对象库的文件:
RFT_03_001.rftdef和RFT_03_001.rftxmap。
这两个文件本质都是XML文件,RFT_03_001.rftdef则是定义了被测对象的逻辑名称,如button_googleSearchsubmit,而RFT_03_001.rftxmap则储存了被测对象的特征或者属性值,如title,class,type等,然后他们通过id来保证两个文件的一致性。
RFT_03_001.rftdef的内容如下,这里面只有一个对象,他的逻辑名字是button_googleSearchsubmit,它对应的id则是4.1Ec2yhmgqeP1:
lWG7b:
MJAx5jS:
8WW(这个id是RFT自动生成的)
[xhtml] viewplaincopy
1.
-- RFT_03_001.rftdef -->
2.
xml version="1.0" encoding="UTF-8"?
>
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
lWG7b:
MJAx5jS:
8WW
14.
15.
16.
17.
18.
19.
20.
21.
下面是RFT_03_001.rftxmap的内容,这里一共记录了五个对象的特征和属性,包括我们在对象库里面看到的按钮及其它的父控件(parentTestObject),如IE,Web页面,Form,Table等,在这里面你可以找到我们在RFT_03_001.rftdef里面有逻辑名称的按钮的id,这样所有的信息都联系了起来。
[xhtml] viewplaincopy
1.
-- RFT_03_001.rftxmap -->
2.
xml version="1.0" encoding="UTF-8"?
>
3.
4. ... ...
5.
6.
7.
8. ... ...
9.
10.
lWG7b:
MJAx5jS:
8WW
11.
12.
lWG7b:
MJAx5jS:
8WW
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34. ... ...
35.
36.
37.
38. ... ...
39.
结论
这样每当我们抓取一个控件并给他赋予逻辑名称的时候,RFT都会在RFT_03_001.rftxmap和RFT_03_001.rftdef里面加入相应的特征信息,并且在Helper类里面添加可以返回该对象(TestObject)的两个方法,供脚本调用。
教程5:
RFT是如何识别控件的(三)TestObject的种类:
Mapped和Bound
什么是TestObject?
TestObject可以被认为是一个连接点,它把RFT脚本和被测控件很好的连接起来,让用户看起来操作TestObject就好像操作被测控件一样。
RFT里面主要有两类TestObject:
一个是Mapped,另一个是Bound(也被称作Found, Registered)
MappedTestObject
MappedTestObject一般都是通过一些必要的属性信息来定位一个真实的被测控件,我们之前接触到的TestObj
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自动化测试 RFT系列 自动化 测试 RFT 系列