一旦录制完成,Rational Functional Tester 便会自己复原。新录制的测试脚本位于中间的视图中。滚动浏览代码并观察所录制的命令。
右边是 Script Explorer 视图。该视图为您显示关于脚本的信息,例如类层次、数据池、验证点和与测试相关的测试对象。
双击 Test Objects 树上的creditCombo对象。Test Object Map 窗口打开了,如图 14 中所示。Test Object Map 包含在录制过程中所收集的与所有遇到的对象相关的属性。该图中的属性将在回放的过程中用于确认应用程序中的对象。每一行右边的权重表示该属性对于识别有多重要。
图 14. 针对 creditCombo 的测试对象图

图中这个特殊的控件条目有两个属性。Functional Tester 专有的 ScriptAssure™模糊逻辑技术将使用所有属性来确定,在回放过程中每一项匹配得有多好。任何属性中的变更都不会导致回放失败。即使在新版的应用程序中有两个或三个属性发生变更,也不会导致回放失败。
关闭 Test Object Map。
向数据池中添加数据变更
双击 Script Explorer 视图中的 Private Test Datapool 对象。这样做打开了与位于窗口较下位置的脚本相关的数据池,如图 15 所示。
图 15. Test Datapool 视图

- 在 Test Datapool 中右键单击任意位置,并选择Add Record...
- 为您的测试显示出第二行数据。在信用卡号字段中双击,并输入新的卡号:1234 1234 1234 1234。
- 将信用卡类型变更为Amex。
- 在截至日期字段,输入截止日期06/08。
向测试中添加定制操作
如早先所提到的,测试脚本完全是 Java 代码 ——不是 JavaScript,也不是专用语言。它给予您非常强大的功能来满足测试中的独特需求。而且,Functional Tester 提供丰富的 Application Programming Interface(API),通过这些 API,您可以访问测试对象,并控制测试的执行。
记住,在您录制测试的时候,首先您手动输入了信用卡号和截止日期,然后使用数据驱动命令向导来使 Functional Tester 在回放过程中用数据池中的内容填充这些字段。这样做在您的测试中遗留下一些不必要的命令。这实际上不会伤害到任何东西,但此时您可以删除它们,看看手动编辑脚本代码是如何进行的。
- 在 PlaceOrder.java 视图中的测试脚本中,删除图 16 中显示的四行(注意到,如果您通过 Tab 键在字段间切换,而不用点击的方法,那么您的命令看起来会稍微有点不同):
图 16. 要删除的代码

2. 接下来,您需要添加一行代码,获取计算机屏幕的图像,放入测试日志中。在测试脚本中,找到用数据池中的值输入截止日期的命令。该行以 expirationDateText().setText开头。
3. 将您的光标放在该行的最后端,按下 Enter 键开始新的一行。
4. 开始输入logi,并按下 Ctrl-Space。一个弹出窗口出现了,同时还出现了在该环境中有效的所有可能完成的代码,如图 17 所示。该特性通称为代码助手。
5. 按下键盘上的下箭头键,选中列表中的第二项。这是 logInfo(),RationalTestScript 类中的静态方法,该方法在测试日志中创建了信息的输入,需要一个 String 类型的参数(标签)和一个BufferedImage(要插入的屏幕快照)。
图 17. 代码助手入口

6. 按下 Enter 键,将该方法调用插入脚本中。
7. 选择 String 参数占位符。简单地输入"Screen Snapshot"(包括引号),并按下 Tab 键,前进到图像占位符。
8. 要获取屏幕图像,使用 root 测试对象的一个方法。输入getRootTestObject()。如果您需要的话,使用代码助手将输入工作减少到最少。
9. 在该行的末尾添加分号。保存您的变更。您的脚本应看起来像下面的图 18。
图 18. 插入到脚本中的 logInfo() 调用

在 Functional Tester 脚本中,您可以利用定制代码做很多很多事情。时间不允许我们进一步探究定制代码了,但类似扩展 API、强大的调试器,和代码助手的功能令定制脚本容易实现,甚至是对那些测试新手。
准备 ClassicsJava Build B
Functional Tester 还对 ClassicsJava 示例应用程序进行第二次构建。在本教程的下一个部分中,您将依据此新的构建版本回放您的测试,以展示,随着应用程序的演进,Functional Tester 如何适应 UI 布局中的变更。但首先,您需要准备脚本来使用新的构建版本。
- 定位到脚本中testMain()方法开头附近的startApp代码行。用ClassicsJavaB 替代 ClassicsJavaA。这样会导致 Functional Tester 使用不同的快捷方式来启动 ClassicsJava 的新版本。注意快捷方式名称区分大小写,因此务必使用大写B。
- 保存变更。