简介:在测试自动化中,会将测试脚本和相关的测试框架绑定到接受测试的应用程序底层域。然后,判断是否可以跨域使用框架提供的相同记录对象、脚本和可重用函数成为了一个难题。要克服这个问题,关键是使得自动化测试脚本与域无关。其结果是,可以跨不同的测试应用程序域使用相同的应用程序对象、测试脚本和可重用函数,无需考虑它们是否是 HTML、Java、Microsoft .NET、Microsoft Windows 等。

  问题:域依赖性阻碍了脚本的重用

  无论测试自动化开发人员通过记录回放还是传统描述性编程来创建脚本,测试脚本和可重用函数都会绑定到接受测试的应用程序的底层域。那么,我们如何确保编写功能的工作(例如,将文本设置到某个 Edit Box)在每次域转变时都不会重复?,您可能正在为某个基于 Web 的应用程序编写测试脚本,并且每次都以 HTML 格式针对域进行记录和编写脚本。随后,您可能需要使用您之前已经编写代码的相同功能,但要跨一个基于 Java 的应用程序。

  当我们使用记录回放机制时,所有与应用程序交互的测试对象都被记录和存储在 IBM? Rational? Functional Tester 对象映射中。图 1 显示了一个这样的示例,其中应用程序域被硬编码为 Java。

  图 1. 以 Java 作为应用程序域的一个对象映射

  类似地,如果使用描述性编程机制开发测试脚本,函数会被绑定到某个特定的应用程序域。在这种情况下,实现测试函数可重用性会变得具有挑战性。

  因此,好使脚本和底层测试对象与应用程序域无关。

  解决方案:使用描述性编程实现跨域兼容性

  Rational Functional Tester 提供一种动态机制,在脚本回放过程中获得测试对象的引用。find() API 使这一点成为可能,因为它引用接受测试的应用程序中的对象时,无需在测试对象映射中记录或硬编码该对象。该 API 找到父测试对象或顶层测试对象,并查找一个匹配的子对象。

  使用 find() API 识别域或顶层对象

  鉴于这一点,通过描述性编程实现测试自动化框架以及使用 find() API 可以有助于识别接受测试的应用程序的域或顶层对象,并相应地找到该对象下面的一个匹配的子测试对象。清单 1 中的代码说明了该过程。

  清单 1. 为当前应用程序设置测试域值

 String myDomainName = "";

//For HTML Browser - Set the Application Domain Name
myDomainName = "Html.HtmlBrowser";

OR

//For HTML Dialog - Set the Application Domain Name
myDomainName = "Html.Dialog";

OR

//For Swing JDialog - Set the Application Domain Name
myDomainName = "javax.swing.JDialog ";

OR

//For Swing JFrame - Set the Application Domain Name
myDomainName = "javax.swing.JFrame";

OR

//For Custom Parent Objects - Set the Application Domain Name
myDomainName = " com.ibm.retail.rma.res.ui.config.MasterAgentInfoDlg ";

  在 Rational Functional Tester 代码中,当应用程序域被设置后,顶层测试对象可以被解析为它所要映射到的父对象类型。清单 2 中的代码片段说明了这一点。在本例中,如果域是 HTML Browser,顶层对象被解析为 BrowserTestObject;如果域是 HTML Dialog,顶层对象被解析为 TopLevelTestObject,等等。