一、对于 .Net 所编写 GUI 组件的 Proxy 扩展概述
通过之前文章的介绍,讲述了如何使用 Rational® Functional Tester proxy software development kit (Proxy SDK) 来扩展 Java domain 下 GUI 组件的 Proxy 对象功能,从而使得 RFT 对于已支持的 Java GUI 组件能够获得更多有用的信息、改进某些方法的操作等。
在第一篇概述内容中也曾经介绍过,RFT ProxySDK 不光可以支持 Java GUI 组件的自动化测试,同时也可以支持 Win32、.Net、Siebel 以及 SAP 编写的 GUI 组件的自动化测试,对于这些 .NET domain 编写的 GUI 组件,RFT 同样是通过 Proxy 来进行识别和操作的。因此同样可以使用之前介绍的扩展 Java GUI 组件 Proxy 对象的方法,来扩展 RFT 已有的 .NET domain 编写的 GUI 组件的 Proxy 对象。但需要注意的是,对于 .NET domain 编写的 GUI 组件所对应的 Proxy 对象的开发,Proxy SDK 均通过rtxftnet.dll 或WhidbeyControls.dll (../RFT/SDP70/FunctionalTest/bin/ 目录下)来提供,这一部分 Proxy 的开发需要在 .NET domain 开发环境下进行。
二、对 .Net Button 组件的 Proxy 扩展实例需求介绍
在本文中,将要使用 RFT 对 .NET2003 下编写的 Windows GUI 组件进行自动化测试,在之后的实例中,首先会使用 Microsoft® Visual Studio .NET2003 创建 Visual C# 的 Windows 应用程序,其中使用了 Windows 的按®控件(Button)。在这里,我们需要通过 RFT 自动化点击该按®控件,同时需要 RFT 在执行 click() 点击按®操作的过程中,能够记录该按®的点击的次数。从而使得测试脚本开发人员,能够通过 getProperty() 方法很容易的获取到当前该按®被点击次数数值。
在实际实现过程中,同样需要新建一个 Proxy 对象,从而替代原有的 Button Proxy 对象。首先需要在新建 Proxy 对象中创建一个 static int 型的数值变量,并设定其初始值为 0,用于记录 Button 组件被点击次数;其次,需要重写包括 Click()、GetProperty(string propertyName) 以及 GetProperties() 三个 C# 方法,从而将一个名为“ ClickCount ”、值为点击次数的 Property 添加到新的 Proxy 对象中。这样,脚本开发人员在编写测试脚本时,便可以很容易的通过 GetProperty( “ ClickCount ” ) 方法来获取按®被点击次数。实现原理图如图 1 所示,具体的实现方法及步骤会在之后进行详细介绍。
图 1. ButtonProxy 对象扩展原理图
三、具体实例分析及实现步骤
在本文中,根据测试需要,首先需要使用 Microsoft® Visual Studio .NET2003 创建 Visual C# 的 Windows 应用程序,如图 2 所示,之后再在 Microsoft® Visual Studio .NET2003 开发环境下开发新的 Proxy 对象组件,从而达到自动化测试的目的。
图 2. Windows Application 应用程序
当以上应用程序完成后,就可以使用 Microsoft® Visual Studio .NET2003 来开发新的 Proxy 对象组件,其具体步骤如下:
第一步: 使用 RFT 中的 TestObjectMap 查看当前 Windows Button 组件所对应的” Proxy Class Name ”及该 Button 组件自身的” Class Name ”,如图 3 及图 4 所示:
图 3. 查看 Button 组件对应的 Proxy Class Name
图 4. 查看 Button 组件对应的 Class Name
第二步: 创建新的 Proxy 类并继承原有 .Net.ButtonProxy 类,通过重写原有的方法来添加一个新的名为” ClickCount ”的 Property 至该组件的 Property 属性 Property 中,其步骤如下:
图 5. 新建 Visual C# 项目
这里需要注意的是:
图 6. 添加 rtxftnet.dll 动态链接库文件
图 7. 创建新的 Proxy 类文件
第三步: 完成以上工作之后,我们就可以编写 ExtendedWindowsButtonProxy.cs 程序内容来实现 Proxy 的扩展(本步骤详细的代码及文字说明请参见本文后续第四节内容)。
第四步: 为新建立的 ExtendedWindowsButtonProxy 创建 RFT Customization (*.rftcust) 文件,从而建立 TestObject 与 Proxy 之间的映射关系。
需要注意的是 :这里 RFT Customization (*.rftcust) 文件名须与 Project 名相同。
清单 1. NetWindowsButtonProxy.rftcust 映射文件
<?xml version="1.0" encoding="UTF-8"?> <ConfigFile L=".ConfigFile"> <Section L=".ConfigFileSection"> <Name>proxies</Name> <Val L=".ProxyManager"> <DomainImplementation L=".DomainImplementation"> <Name>Net</Name> <Obj L=".Proxy"> <ClassName> [NetWindowsButtonProxy]ProxySDK.Sample.Net.ExtendedWindowsButtonProxy </ClassName> <Replaces/> <UsedBy>[System.Windows.Forms]System.Windows.Forms.Button</UsedBy> </Obj> </DomainImplementation> </Val> </Section> </ConfigFile>
第五步: 完成以上工作后,可以在 Microsoft® Visual Studio .NET2003 菜单中点击“生成 -> 生成解决方案”直接将该工程生成 .dll 动态链接库文件(生成 .dll 文件配置可以通过菜单中“项目 ->NetWindowsButtonProxy 属性”进行更改)。该项目文件结构如图 8 所示:
图 8. 项目文件结构图
第六步: 配置并发布 NetWindowsButtonProxy.dll 及 NetWindowsButtonProxy.rftcust 两个文件至 RFT,需要将这两个文件拷贝至RFT customization Directory (C:/Documents and Settings/All Users/Application Data/IBM/RFT/customization) ,之后重新启动 RFT 。
第七步: 重新启动 RFT 后,使用TestObjectMap 查看 Button 组件所对应的” Proxy Class Name ”,会发现已被 ProxySDK.Sample.Net.ExtendedWindowsButtonProxy 所代替。同时使用 RFT 提供的 Update Recognition Properties 功能,查看 RFT 所能获取到的该 Button 组件的所有 Property 属性及其对应的值时,会发现新的名为” ClickCount ”的 Property,由于还未调用该 TestObject 的 click() 方法,因此其值为” 0 ”,如图 9 及图 10 所示:
图 9. 查看 Button 组件新的 Proxy Class Name
图 10. 查看 Button 组件包含的所有 Property 属性
第八步: 创建一个测试用的 Script1.java 来检验当调用 Button 对应 TestObject 的 click() 方法后,是否能够获取到新加入的名为“ ClickCount ”的 Property 属性,同时查看其记录的点击次数是否正确,其结果如图 11 所示:
图 11. 查看 Button 组件新的名为” ClickCount ”的 Property 属性
四 . ExtendedWindowsButtonProxy.cs 详细代码及说明
通过建立 ExtendedWindowsButtonProxy.cs 来实现对原有的 ButtonProxy 对象进行扩展,主要方法功能说明及代码清单如下:
方法 GetProperties(): 用于添加新的 Property 属性及其值,从而使得脚本开发人员能够通过该方法,获取到更多组件属性信息。在这里我们添加了名为“ ClickCount ”的 Property 属性,如果 Button 组件被点击时,该 Property 属性会记录该 Button 当前被点击的总次数。
方法 GetProperty(String propertyName): 用于获取新添加 Property 属性的值。在这里当脚本开发人员使用getProperty(“ ClickCount ”) 方法时,就可以获取到该 Button 组件当前被点击的总次数。
方法 Click(): 用于在点击 Button 组件的同时记录点击的总次数。
清单 2. ExtendedWindowsButtonProxy.cs
using Rational.Test.Ft.Domain; using Rational.Test.Ft.Domain.Net; /** * Script Name : <b>ProxySDK.Sample.Net.ExtendedWindowsButtonProxy</b> * Generated : <b>2008-1-15 09:00:00</b> * Description : Microsoft® Visual C# .NET Project * Original Host : wangxyue * * @since 2008/01/15 * @author (Daniel) [email protected] * Company IBM CSDL */ namespace ProxySDK.Sample.Net { public class ExtendedWindowsButtonProxy:ButtonProxy { //num:Use this static int var to record click button count static int num = 0; //click:If call Click() method, this value set to "true" bool click = false; //.NET Domain Proxy Constructor public ExtendedWindowsButtonProxy(NetTestDomainImplementation domain, IChannel channel,System.Object theAUTObject): base( domain, channel, theAUTObject) { } //Override Click() ProxyObject Methods here public override void Click() { num = num+1; base.Click(); } //Override GetProperty(string propertyName) ProxyObject Methods here public override object GetProperty(string propertyName) { if ( (propertyName=="ClickCount") ) { return num; } return base.GetProperty(propertyName); } //Override GetProperties() ProxyObject Methods here public override System.Collections.Hashtable GetProperties() { System.Collections.Hashtable propertyTable = base.GetProperties(); propertyTable.Add("ClickCount",num); return propertyTable; }<br />
五、结论
本文介绍如何通过使用 Rational® Functional Tester proxy software development kit (Proxy SDK) 来扩展已支持的 .Net domains GUI 组件的 Proxy 对象。通过 System.Windows.Forms.Button 组件 Proxy 对象扩展的具体实例,来说明该过程,从而实现 RFT 对 Windows 按®组件记录点击次数的功能。希望通过本文,能为使用 Rational® Functional Tester 的脚本开发人员,在对处理某些 .Net domains GUI 组件 Proxy 对象的扩展方面,提供一定的参考。
通过这一系列文章的介绍,详细说明了 RFT Proxy SDK 的使用方法及主要的用途。从而使得 RFT 自动化测试脚本开发人员能够根据测试需求,自主扩展并完善 RFT 已有的功能,令 RFT 对于 GUI 组件的获取及控制手段更加的丰富和完善