IBM® WebSphere® Message Broker(以下简称为 Message Broker)支持业务应用程序之间的消息转换和路由,并且包括了一个工具箱,用于业务流开发和部署。
IBM® Rational® Functional Tester(以下简称为 Functional Tester)是一个测试工具,可以帮助您自动化功能、回归、GUI,以及数据驱动测试。本文将展示如何使用 Functional Tester 自动化 Message Broker Toolkit 操作,并将涵盖以下各个主题:
- 针对 Functional Tester Eclipse IDE 配置基于 Eclipse 的 Message Broker Toolkit
- 演示如何自动化 Message Broker Toolkit 操作的样例脚本
- 故障排除
您可以使用 Functional Tester 自动化任何 Message Broker Toolkit IDE 操作。作为一个例子,本文将告诉您如何自动导入和部署 Message Broker Toolkit 提供的 Message Broker 样例。
在手动测试中,往往需要重复执行相同的测试用例,这个过程容易出错并且繁琐而又费时。使用 Message Broker Toolkit 实现自动化测试可避免这些问题。该工具包允许您创建消息流并将其部署到 Message Broker 运行时。大型组织可能会开发和部署数以千计的业务消息流,根据不断变化的需求,所涉及的业务规则可能需要变动。您可能需要测试所有的业务流程,以防止回归 错误,例如,当您升级到一个新版本的 Message Broker,或新的业务需求要求强制修改消息流或其组件或参数时。
为了从本文中获益,您应该具备一定的 Java™ 编码经验,并且应该已经安装以下内容:
- Rational Functional Tester V8.1 或更高版本,操作系统为 Microsoft® Windows® 或 Linux®。
- WebSphere Message Broker V7 和 Message Broker Toolkit V7
使用 Message Broker Toolkit 创建一个默认配置:
- 单击 Help 并选择 Welcome。
- 单击 Get Started。
- 单击 Default Configuration。
- 在 Creating the Default Configuration 页面上,单击 Start the Default Configuration Wizard 并遵循 Wizard 中的步骤。
配置 Functional Tester:
- 启动 Functional Tester (Eclipse IDE) 并选择工作空间,如果还没有配置默认工作空间的话。然后单击 Configure。
- 选择 Enable Environments。
- 单击 Web Browsers 选项卡。对于 Windows 操作系统,默认添加了 Internet Explorer。如果使用的是 Linux,则需安装 Mozilla Firefox V3.0.4(使用较高版本可能会遇到兼容性问题)。
- 在
/usr/lib/firefox-3.0.4/plugins/
中创建libjavaplugin_oji.so
作为软链接,指向文件/opt/IBM/SDP/jdk/jre/plugin/i386/ns7/libjavaplugin_oji.so
:>cd /usr/lib/firefox-3.0.4/plugins/ >ln -s /opt/IBM/SDP/jdk/jre/plugin/i386/ns7/libjavaplugin_oji.so libjavaplugin_oji.so
/usr/lib/firefox-3.0.4/plugins/
是安装 Firefox V3.0.4 的位置。 - 要检查浏览器是否启用了 Functional Tester,启动 Functional Tester 并单击 Configure。
- 选择 Enable Environments for Testing。
- 在 Enable Environments 窗口中,单击 Web Browsers 选项卡,选择 Firefox,启用它,然后将其设置为默认浏览器。
- 单击 Test,您应当会看到如下所示的浏览器窗口:
图 1. 浏览器支持测试
- 单击 Run Diagnostic Tests。成功完成浏览器支持测试后,应当获得测试结果 PASSED:
图 2. 浏览器支持测试结果
对于 Microsoft Windows,按照图 1 和 2 所示的类似方式检查 Internet Explorer 是否支持 Functional Tester。 - 现在单击 Java Environments 选项卡:
图 3. 启用环境:JRE
- 启用默认 JRE。如果没有看到任何 JRE,那么如上图 3 所示启用系统 JRE。IBM JRE V1.6 为优先选择。
- 单击 Test 以测试 JRE 配置。您应当看到如下所示的弹出窗口,确认测试结果:
图 4. JRE 配置测试结果
- 单击 Eclipse Platforms 选项卡。
- 添加并启用 Message Broker Toolkit Eclipse 路径,如图 5 所示:
图 5. 启用环境:Eclipse
- 单击 Finish。
- 单击 Configure。
- 选择 Configure applications for testing。
- 添加 Message Broker Toolkit 可执行文件,如图 6 所示,然后单击 Finish:
图 6. Application Configuration Tool
- 完成配置后,启动 Message Broker Toolkit 并检查 Functional Tester Test Object Inspector 是否识别出 Message Broker Toolkit 应用程序对象。参见图 7。在继续之前,Test Object Inspector 需要能够识别应用程序软件对象:
图 7. Application Configuration Tool
- 您应当始终通过 Functional Tester 启动测试中的应用程序软件:单击 Test Object Inspector 窗口中的 Application 菜单,如图 8 所示。但是如果不希望通过 Functional Tester 菜单启动测试用的软件,那么添加
/opt/IBM/SDP/FunctionalTester/bin/libftevent.so
文件路径,同时研究配置文件中的LD_PRELOAD
变量:
图 8. 使用 Functional Tester 启动测试应用程序
使用 Functional Tester 自动化 GUI 操作
可以通过多种方法使用 Functional Tester 自动化 GUI 操作:
- 通过手动编码。
- 使用 Functional Tester Recorder 记录并回放脚本:Functional Tester 记录用户对测试软件的操作,并且您可以使用 Functional Tester 回放记录的脚本。要记录自己的脚本,单击 Script 菜单,然后选择 Add Script Using Recorder。
- 使用 Functional Tester find() API 或 Root Finder 方法:您可以在 Functional Tester 中编写自己的 Java 代码来自动化 GUI 操作。Root Finder 方法主要处理测试软件的对象属性。
脚本录制和播放方法实现起来更容易、更快,但它高度依赖于屏幕分辨率和屏幕坐标。因此,大多数录制的脚本无法直接移植到其它机器上,除非这些 机器使用相同配置设置。此外,Functional Tester 在 Linux 上不支持脚本记录。您可以使用 Root Finder 方法来解决这些限制,使您的代码具有健壮和可移植特性。本文重点介绍使用 Root Finder 方法自动化 GUI 操作。
TestObject[] testObjects = null; testObjects = root.find(RationalTestScript.atDescendant("<property1>","<value1>", ["<property2>","<value2>")]); if (testObjects.length > 0) { RationalTestScript.logInfo("Log text goes here....."); GuiTestObject gto = new GuiTestObject(testObjects[0]); gto.waitForExistence(); boolean b=gto.exists(); if(b==true){ gto.click(); } gto.unregister(); else { RationalTestScript.logError("\n Error message"); } } |
关于该代码片段的解释:
TestObject
包含 Message Broker Toolkit 中 GUI 对象的引用:TestObject[] testObjects = null;
- 该行代码根据
find
参数中的属性查找 GUI 对象。该函数接受一个或两个参数作为输入:testObjects = root.find(RationalTestScript.atDescendant("<property1>","<value1>", ["<property2>","<value2>")]);
- 该行代码将信息记录到 Functional Tester 测试日志中:
RationalTestScript.logInfo("Log text goes here.....");
- 该行代码获得 root finder 找到的对象引用。该引用稍后将用于程序中的 GUI 操作:
GuiTestObject gto = new GuiTestObject(testObjects[0]);
- 该行代码将继续等待,直到对象被创建:
gto.waitForExistence();
- 该行代码将对引用的对象执行左键单击(left-click)操作:
gto.click();
- 该行代码取消对对象的引用:
gto.unregister();
可以采用不同的方法针对基准结果(baseline)检查中间结果。可以通过异常以编程方式处理错误,本文提供的样例代码就使用了这种方法。还可以通过选择 Script => Insert verification point,在代码中插入检查点。
您可以 在文章底部下载用 Java 编写的样例 Functional Tester 代码。该代码启用了 Message Broker Toolkit,导入并部署了 Address Book Sample,然后从 Message Broker 和 Message Broker Toolkit 工作空间中移除了样例。解压缩该文件并将 .rftjdtr
文件导入到一个新的 Functional Tester 项目,将其作为一个 Functional Test Project Item,然后运行 WMBAutomation
脚本。
- 如果 Windows 或 Linux 屏幕自动或被用户锁定,Functional Tester 将无法继续进行处理。要解决这个问题,需要在测试机器上安装 UltraVNC 服务器,然后使用 UltraVNC 客户端从另一台机器上启动测试。
- 如果 Functional Tester 无法足够快速地识别对象,您可以修改 ScriptAssure Recognition 级别和 Warning 级别:选择 Window => Preferences => Playback => ScriptAssure。
- 如果使用一个映像作为检查点,可以在
RFT_installation_directory/bin
目录中的ivory.properties
文件中设置映像检查容差。在文件中作出以下修改:- 将
rational.test.ft.image.use.tolerance
设置为true
- 将
rational.test.ft.image.tolerance
设置为 0 到 100 之间的值,具体取决于所需的容差级别百分比。
- 将