Rational Functional Tester Proxy SDK 开发,第 3 部分: 使用 Proxy SDK 扩展 Java GUI 组件可捕获的验证数据

一、RFT 中的数据验证功能及原理

本系列的上一篇介绍了如何通过 Proxy 扩展测试组件的识别属性和方法。除了识别对象,RFT 也提供了较完善的验证功能,分为属性验证(properties verification)和数据验证(data verification point)两种。本篇主要介绍如何通过 Proxy 扩展 RFT 的数据验证能力,使其更灵活、更具适应性。

与属性验证关注于组件的属性不同,数据验证将期望数据与组件所包含的实际数据相比较,从而得到验证结果。 RFT 将数据验证细分为六种,包括列表、表格、树、菜单等。针对不同的测试对象,RFT 将捕获来的测试数据封装在这六种类型中,再进行验证。可见,从测试对象捕获数据的方式越灵活,验证功能就越强大。本文以表格(table)为例,说明如何加强 RFT 捕获数据的灵活性,从而增强数据验证功能。

二、通过 RFT Proxy 扩展数据验证功能

RFT Proxy 提供了一种扩展机制,方便用户针对不同的组件和应用情况定制 RFT 能够从被测组件所捕捉的数据以及数据的类型。以表格(Table)为例,现有的 RFT 仅提供四种方式捕获表格中的数据,它们分别是:可见或全部的选中单元格;可见或全部的表格内容。实际测试过程往往不限于这些测试数据。例如,在某些特定情况下,表格组件中的一部分被选中时,我们需要对“未选中”部分的数据进行验证。如果不使用 proxy,则需要依次查看表格中的单元格,获得未被选中的单元格数据,然后再验证。这样,实现自动化测试会比较麻烦,需要编写较多的代码,同时在代码重用方面也不太灵活。这时,便可以使用 Proxy SDK 扩展 Table 组件的 Proxy 对象。扩展后,RFT 可从 table 组件捕获“未选中单元格”;用户可以在 Verification Point and Active 向导中选择该项目,从而捕获这些数据并进行验证。使用 Proxy SDK 扩展时,具体对应关系如图一所示:

图 1. Proxy 具体对应关系

 

三、数据验证扩展实例及实现步骤分析

在本文中,根据测试需求,一个值班列表如图 2 所示。应用程序的实际需求是:在同一时间,团队中只能有一人不在岗位(休假或生病)。因此,当其中一人的“ Status ”一栏被设定为“ Illness ”或者“ On Vacation ”时,其它人的状态应自动被设为“ On Duty ”。要对这一过程进行 RFT 自动化测试,需要对 Java Swing 组件 javax.swing.JTable 对应的 JTableProxy 进行扩展,从而达到我们自动化测试目的。其步骤如下:


图 2. 包含下拉菜单的普通数据表格

 

第一步: 使用 RFT 中的 Verification Point and Action 向导增加验证点。首先选定待测的 javax.swing.JTable 组件,并选择数据验证方式(Perform Data Verification Point)。如图 3 所示:


图 3. 增加验证点并选择数据验证方式

 

第二步: 查看原始状态下 RFT 为 javax.swing.JTable 组件所提供的可用于验证的数据项目。此时的数据项仅包括 Table Contents 和 Selected Table Cells 。其中 Table Contents 包括表格中的所有数据项而 Selected Table Cells 只包含选中的单元格。如图 4 所示。

第三步: 在 Data Value 下拉菜单选择 Selected Table Cells,点击 Next,向导显示出被选中的单元格数据。如图 5 所示:


图 4. 查看当前 Table 组件能提供的验证数据项目

 

图 5. 查看由 Select Table Cells 选项所捕获的验证数据

 

第四步: 在此处,可使用 RFT 提供的功能将单元格与数据池中的某变量关联起来。具体地,当进行至图 3 所示步骤时,在期望验证的任一单元格上单击鼠标右键,弹出菜单出现后点击 “Convert Value to Datapool Reference” 选项,之后在弹出的 “Datapool Reference Converter” 窗口选择需要与之进行比较的数据池字段,点击 OK 。此外,也可以使用正则表达式进行验证。在单元格中单击右键,弹出菜单出现后点击 “Convert Value to Regular Expression” 选项进行配置。DatapoolRegular Expression 的具体使用方法还请参考 RFT 手册,不再赘述。如图 6 所示:


图 6. 建立单元格与 Data pool 变量的对应

 

第五步: 创建新的 Proxy 类并继承原有 .java.jfc.JTableProxy 类,通过覆写原有的方法来扩展在 Verification point 向导中能够从下拉菜单选择到的数据验证项目;另一方面,真正从测试对象中获取这些数据并做适当的封装,使其能被向导所识别和显示。(本步骤详细的代码请参见后续的第四章详细代码及分析。)

首先,在 RFT 中创建相应 Java Project,在本例中我们命名该项目为:TableProxy ;并为项目加载 Proxy SDK 所需的 jar 文件(请参阅本系列的上一篇)。建立新的 Proxy 类,名为 ExtendedSwingTableProxy,继承 JTableProxy,并显示地定义其构造函数。

其次,覆写 getTestDataTypes 方法。在原 Data type 的基础上增加一项可捕获的验证数据类型——未被选择的行(Unselected Rows),其显示名称是 Unselected Table rows 。

最后,覆写 getTestData 方法,除一般验证数据类型外,增加针对 Unselected Rows 的处理代码。具体地,首先递归的调用函数自身,获得 contents 数据类型的数据,即表格的所有数据。进而获得被选中的行的信息并依此对表格数据进行筛选。再次,将数据封装到表格数据类型 TestDataTableData 中。最后,将 TestDataTableData 对象封装到 TestDataTable 中,并返回。

值得注意的是,getTestData 方法的返回值必须是 ITestData 接口的实现类的实例或者其子类的实现类的实例。因此,在对组件数据进行处理后,需要将他们封装于图 6 所示的多个实现类中的一种。使用哪一个类进行封装,取决于用户希望 Verification Point and action 向导以什么方式将这些数据处理和显示出来。例如,如果希望处理后的数据被显示为一个表格,则适用 TestDataTable 类进行封装;如果希望返回的数据仅仅是一个字符串,则可用 TestDataText 封装。 ITestData 接口的继承关系如图 7 所示:


图 7. ITestData 接口、子接口以及它们的实现类

 

第六步: 为新建的 ExtendedJTableProxy 创建 RFT Customization 文件,如清单 1 所示。

第七步: 对该 Project 文件打包,Export 成 .jar 文件;

第八步: 配置并发布 JTableProxy.jar 及 JTableProxy.rftcust 两个文件至 RFT,重新启动 RFT。 以上三个步骤与本系列上一篇的步骤五、六、七相似,请参阅上一篇。项目文件结构请参阅本系列中的上一篇之图 6 。


清单 1. ExtendedJTableProxy.rftcust 映射文件

第九步: 重新启动 RFT 后,使用 Verification Point and Action 向导再次查看 Table 组件所能捕获的数据项目,会发现已增加了 Unselect table rows 选项。选择 Unselect table rows 后,向导显示出在 Table 组件中用户未选中行所包含的数据。如图 8 及图 9 所示:


图 8. 查看使用 Proxy 后 Table 组件能提供的验证数据项目

 

图 9. 查看 Unselected Table rows 选项识别出的测试数据

第十步: 现在则可以再次执行上文提及的步骤 4,对未选中行的下拉菜单组件进行验证了。

 

四、详细代码及分析

在上述过程中,起关键作用的是 ExtendedSwingTableProxy 类,它的结构如图 10 所示:


图 10. ExtendedSwingTableProxy.Java 代码结构示意图


 

其中,方法 getDescriptiveName() 修改了 JTable 组件在 RFT 中的描述名称;

方法 getTestDataTypes() 为向导中的 DataValue 下拉菜单增加了未被选择的行(Unselected Rows) 一项。

方法 getTestData(String) 具体处理表格中未被选中的行的数据,并将数据封装到 TestDataTable 对象中返回。具体程序代码如清单 2 所示:


清单 2. ExtendedSwingTableProxy.java

五、结论

本文介绍了如何通过使用 Rational® Functional Tester proxy software development kit (Proxy SDK) 来扩展 RFT 对 Java GUI 组件的测试能力。通过一个简单的 Swing Table 应用场景,展示了 RFT Proxy SDK 对数据验证功能的扩展方式,使得脚本开发人员可从 table 组件捕获“未选中单元格”,同时可以在 Verification Point and Active 向导中选择该项目,从而捕获这些数据并进行验证。通过这一部分内容的介绍,可以另 RFT 的数据捕获及验证更加的灵活性。在接下来的一篇文章中,将主要介绍如何使用 Proxy SDK,来扩展 .NET domain 下编写的 GUI 组件的 Proxy 对象,通过对 windows 的按钮控件(Button)的 Proxy 对象扩展,实现 RFT 记录按钮组件点击次数的功能。

 

转载:http://www.ibm.com/developerworks/cn/rational/r-cn-rftproxysdk3/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值