消除识别测试对象过程中的二义性情形

发表于:2011-12-13来源:未知作者:娃娃点击数: 标签:
IBM Rational Functional Tester 为测试人员提供了一个测试对象识别框架以及一个简单的用户界面,以执行基于 GUI 的测试脚本。但是,在有些条件下,例如测试一个基于 Eclipse 的程序,您可能会发现测试的 GUI 中全是二义性情形的测试对象。这些对象
本文内容包括:
  • 前提条件
  • Rational Functional Tester 项目结构的概述
  • 快速浏览一下 find() 方法
  • 导航基于路径的对象识别
  • 更好测试对象识别的建议
  • 下载
  • 参考资料

  IBM® Rational® Functional Tester 为测试人员提供了一个测试对象识别框架以及一个简单的用户界面,以执行基于 GUI 的测试脚本。但是,在有些条件下,例如测试一个基于 Eclipse 的程序,您可能会发现测试的 GUI 中全是二义性情形的测试对象。这些对象拥有几乎一样的属性,只有轻微的差异。很难直接指定目标对象属性的模式以及识别对象。识别的结果可能包含有多个二义性的类似对象,从而导致识别失败。本文向您介绍了怎样消除这些二义性的情况,并给出了一些指导以执行灵活且轻松的维护性测试脚本。

  前提条件

  安装 IBM® Rational® Functional Tester V7 版本。

  Rational Functional Tester 项目结构的概述

  导入范例 Rational Functional Tester 项目(查看 下载)。您将会看到一个名为 BaseCase 的脚本以及一个名为 util 的文件夹。

  通过选择 Window > Open Perspective > Java 来切换至 Java™ 视图。您将会看到以下的三个包:

  (default package)

  resources

  util

  BaseCase 脚本位于默认的包中,其中还有它的辅助类 BaseCaseHelper ,以及与 Resources 包中脚本有关的其他配置文件。这两个包在 Functional Test 视图下看不到。您创建了 util 包,以及包中的类。在接下来的章节中,您将会使用到这个框架(见于图 1)。

  图 1. Rational Functional Tester 项目的结构

 Java Perspective 下的包

  快速浏览一下 find() 方法

  建议您在 getMappedTestObject() 方法不能使用时,使用 find() 方法来找到一个测试对象。列表 1 中的代码显示了 find() 方法的结构。

  列表 1. 找到方法结构

// Finds all candidates that match given search criteria starting at this TestObject
public TestObject[] find(Subitem properties);

  find() 方法通过将测试对象的特定属性,与给定的标准相比较以找到一系列的候选对象。您可以通过代表属性的名字/值,或者包含有一个或者多个匹配字符串来搜索一个测试对象。如果使用默认的 getMappedTestObject() 方法不能识别一个测试对象,那么您可以首先定位它的父类,然后通过访问父类的 find() 方法来找到目标测试对象。显然,find() 方法提供了可观的便利。脚本不再取决于对象映射。搜索候选测试对象的结果是可预测的,因此也是可靠的。您可以通过对象的属性值来找到一个测试对象,这些属性值可能是一个简单的文本。维护脚本起来会更加容易。

  但是,如果 getMappedTestObject() 方法不可行的话,find() 方法不会包含所有的事例。不会总有明显系列的属性值会匹配。find() 方法取决于明显系列的属性值。因此,如果测试对象没有这样一系列的属性,那么这种方法就不会正常地发挥其功能。但是我们可以在返回的数组中一个个地试一下测试对象,这并不是一个聪明的办法。有时,甚至很难找到测试对象可识别的父类,所以搜索必须从最顶层开始,例如从窗口开始。这就会降低测试对象的可识别性。

  导航基于路径的对象识别

  考虑一下 find() 以及 getMappedTestObject() 方法的缺陷,您需要另外一个方法来解决 Rational Functional Tester 对象识别中的二义性情形。在本文中,我们介绍了基于路径导航方法,来找到目标测试对象。我们将会使用程序 ClassicsJavaA 作为一个范例。为了让事情变得更加简单,我们假设 Place Order 按钮就是要找的测试对象。

  图 2. 范例程序的主窗口

控制 Main 窗口中的图片和按钮

  在记录 Place Order 按钮的点击操作之后,您会得到图 3 中对象映射的以下层级结构。您可以看到 Place Order 按钮是框架的子部分。框架会作为主窗口来显示,而且它就是 Place Order 按钮的位置所在。当然,在本例中,您可以简单使用 find() 方法来定位按钮。但是,我们将会尝试另外一种方法来解决这个问题。

  图 3. 对象映射的层级结构

对象映射内的按钮测试对象

  对基于导航对象识别的介绍

  有时测试人员会通过可见的线索来搜索测试的对象,例如关系中的相对位置。例如,您可能会通过它与文件夹封面图片的相对位置来找到 Place Order 按钮。与之类似,对于一个给定的测试对象,叫做锚对象,您可以使用 Rational Functional Tester API 来找到带有给定路径的任何对象。再次使用上面的例子,您可以通过找到对象附近的位置、文件夹的图片以及特定路径来找到 Place Order 按钮。这里所谓的术语“路径”是指在对象映射中将一个对象节点移动到另一个上时的逻辑距离。

  通过对象映射来进行导航

  在 Private Test Object Map for Script BaseCase 窗口中,您知道 Place Order 按钮是主框架的子类。显然,该对象映射并 没有 包含主框架中所有的构件。按照以下步骤来得到对象映射树的大致轮廓:

原文转自:http://www.ltesting.net