级别: 初级 Jirong Hu (9huj@sg.ibm.com)新加坡发展银行
2004 年 12 月 14 日 本文是 “入门:IBM Rational Robot Test Automation Framework Support (RRAFS)” 的扩展。在文中作者探究了用 RRAFS 自动测试主机应用程序的方法。
引言
在我们的机构里,所有主机应用程序都是通过来自 Microsoft Windows® 工作站的标准终端仿真程序 (WRQ Reflection® for IBM®) 连通的。其他机构可能会使用类似的工具,例如:Attachmate 或者 NetManage® Rumba®。伴随 IBM® Rational® Robot 和 Rational Robot Test Automation Framework Support (RRAFS) 与 Reflection 软件(或者其他终端仿真程序软件)安装在同一个工作站,Robot 与主机应用程序之间建立了连接,如下图 1 所示:
| |
图 1:通过终端仿真程序连接 Robot 和主机
|
识别对象
同其他终端仿真程序一样,Reflection 窗口(该窗口看上去与主机终端的屏幕显示类似)是基于文本的。因此,不能使用 Robot 的对象识别方法,尽管在终端窗口中没有对象。但是,Reflection 主窗口、工具栏和菜单仍旧是标准的 Windows 对象。
利用 Reflections 窗口标题来标识 Reflection 窗口。在以下的应用程序实例中,标题是当前的日期,“2/27/2004”,如图 2 所示。
| |
图 2: 以当前日期为窗口标题的应用程序
|
图 3 描述了在 Reflection 软件上运行的 IBM 应用程序实例。
| |
图 3: Reflection for IBM Internal 实例应用程序
|
通常在整个应用程序中 Reflection 窗口的标题始终是一样的,这使得在用 RRAFS 时 MAP 表格变得非常简单,如图 4 所示。
| |
图 4: 识别映射文件中的 Reflection 窗口
|
在我们的机构中,我们在开始测试之前手动运行 Reflection 软件,以便 Robot 可以按照以上的设置找到 Reflection 软件。为了使操作简便,应用程序小组常会给我们一个 Reflection 配置文件。我们只需要将配置文件拷贝到测试工作站上并双击测试文件运行 Reflection 窗口。
控制应用程序
为了能实现自动控制的目的,用键盘输入的方式能最好地驱动 Reflection 应用程序。用 InputKeys 命令将击键(键值)发送到 Reflection 窗口中。有两种类型的键用于自动控制。一种是用于输入应用程序数据的,例如:下面实例中的 “u004” (用户 ID)。另一种类型包含专用字符,例如 “{Tab}” 和 “{Enter}”,用来将指针从一个位置移动到另一个位置,或者使应用程序从一个画面转到下一个画面。
例如,图 5 显示了以下的输入用户 id、转到下一屏和暂停(停止一秒钟)的命令。
| |
图 5: 传送击键(键值)来驱动应用程序
|
验证数据
除了产生应用程序流之外,在测试自动控制工作中的另一项主要任务是验证终端屏幕上的应用程序数据和消息。这项工作既可以确保在正确的界面上操作,也可以验证结果。
在本文中提出了两种验证数据的方法:使用 Image VP 和 OCR,或者对 RRAFS 扩展以支持 HLLAPI。
使用 Image VP 和 OCR
Image VP 和 OCR 是 Robot 的内嵌特征。例如,以下步骤举例说明了如何确定是否正处于 “Welcome” 页面上,如图 6 所示:
| |
图 6: 验证 Welcome 界面
|
- 记录 GUI 脚本并生成 Regional Image VP
WelcomeMsg 和 Robot 中值为 WELCOME 的 OCR (图 7)。
| |
图 7: 记录测试脚本并生成 Regional Image VP
|
- 将
WelcomeMsg="45,86,226,106" 设为 RRAFS MAP 表(图 8)中 VP 的参考值。等号右面的值来自于先前记录的 GUI 脚本。
| |
图 8: 设置映像文件中的 VP 的参考值
|
- 将以上的 VP 内容拷贝到主 CycleDriver 脚本中,产生结果如图 9。不再需要已记录的脚本(例如,
CICS_VP_WelcomeScreen,如图 7 所示)。
| |
图 9: 生成带有 OCR 的 Regional Image VP
|
- 在 STEP 表(图 10)中生成测试步骤。
| |
图 10: STEP 表
|
在上面的 STEP 表中,HourGlass、StatusBar 和 WelcomeMsg 均是由 Robot 生成的 Regional Image VP。您可以将所有 Image VP 存储到主 CycleDriver 脚本中,对于在运行时的 RRAFS 引擎这些存储在脚本中的 Image VP 是可用的。以下是一组来自于 RRAFS 在线参考文档的关于如何使用 Regional Image VP 的说明:
WindowFunctions::VerifyImage
“在对象中运行 GenericObjectVP CompareImage 或者 RegionImageVP。基准 VP 必须存在,并且是当前运行脚本的一部分。通过掌握 VP 的名称(作为应用程序映像中组建下的一项),RegionImageVP 能够得以实行。该项的值必须是与 RegionImageVP (例如 “65,100,200,250”) 所需一致的值。”
使用 Image VP 和 OCR 时遇到的难题
我们知道 Image VP 并不健壮。基于 Image VP 的 OCR VP 也存在同样的问题。关于 OCR 的另一个问题是用不同的字体和颜色显示时 OCR 就不能很好地运行。例如,图 11 说明了 Robot 内嵌的 OCR 不能检测到 Reflection for IBM internal 实例的原有文本,只显示出黑屏和蓝色文本。
| |
图 11: 以此颜色 Robot OCR 不能正常显示
|
因此,你需要为自动控制而对应用程序的配色方案进行调整,如图 12 所示。
| |
图 12: 调整配色方案以便 Robot OCR 可以正常显示
|
通常,在运行测试的同时,必须保证屏幕显示的分辨率和大小都要与原来记录的一致。否则,Image VP 和 OCR VP 将会显示失败。
使用 HLLAPI
像大多其他主机仿真程序一样,Reflection for IBM 支持 HLLAPI。虽然 Robot 可以直接调用 Visual Basic API,但是 Robot 还提供了一种使用 RRAFS 中 HLLAPI 的方法(您可以在 运行实例 部分所列出的文件中找到实例源代码)。
用于验证 API
HLLAPI 提供了与终端屏幕通信的所有类型的方法。 (通过建立到主机的连接以输入应用程序数据,您可以使用 HLLAPI 完全驱动应用程序。) 例如,以下 API 可使您获得由行和列指示的准确位置上的屏幕显示文本:
Syntax DisplayText = object.GetDisplayText(Row, Column, Chars)
描述:
返回主机屏幕上显示的文本。
例如,以下命令设置变量 displayText 的值等于终端窗口上显示的开始于第 3 行,第 2 列且向后数的 30 个字符:
将 displayText 作为 String 型
displayText = Session.GetDisplayText(3,2,30)
对于 Robot,以上的 API 使得在测试过程中获得屏幕显示的文本并且将这些文本用作数据和消息验证这件事成为可能。
对于主机应用程序来说,UI 通常比普通的 web 应用程序简单,因为在应用程序准备做系统测试时,数据和消息的位置不怎么改变。在我们机构中的应用专家向我保证这件事是真的,所以使用这些方法进行检索来自于回归测试中的终端屏幕上的数据和消息,是很安全的。
为测试开发人员生成一个便于使用的 API,如图 13 所示:
测试开发人员可以调用任意 Robot 脚本中如上文所示的 API,如图 14 所示:
| |
图 14: 调用用来验证的 API
|
新的 RRAFS 命令
将以上 API 作为 RRAFS 命令是很有用的,正如其他标准组件和驱动程序命令(Driver command)一样。例如,使用新的驱动程序命令进行验证,如图 15 所示:
| |
图 15: 新的 RRAFS 驱动程序指令
|
RRAFS 提供许多方法来添加新的命令。最简单的方法可能是添加新的用户驱动程序命令。要实现一条新的用户驱动程序命令,只需要添加一些内容到 CustomDriverCommands.sbl 中,如图 16 所示。
编译该库并添加到您的工程 SQABasic 路径下,然后就可以开始使用这条用户驱动程序命令。
控制速度
如果在 Reflection 窗口中没有任何对象,就不能使用 “WaitForXXX” 驱动程序命令来控制客户端与服务器之间的同步。
有一个好的消息,那就是终端仿真程序通常会拥有一个占线指示器,表示正在发送请求到服务器(或者等待服务器返回应答),如图 17 和 图 18 分别所示。
| |
图 17: 占线指示器
|
| |
图 18: 通信完成
|
我们能做的是:在示忙器上建立 Image VP,并且 “一旦按下发送键,就将生成比较命令等待指示器出现,紧接着生成比较命令等待指示器消失。” (参见以下参考资料部分的 Mainframe Application Testing)
用 RRAFS,还可以生成两个 Image VP——一个用于占线指示器,另一个为空——如图 19 和图 20 分别所示:
| |
图 19: 占线指示器 Image VP
|
| |
图 20: 状态栏 Image VP (空)
|
图 21 STEP 表格中的实例说明了该技术:
| |
图 21: 同步的实例
|
应该依据特定的应用程序的运行情况(响应时间)调整 Verification Point 等待时间,如图 22 所示。
| |
图 22: 调整 VP 等待时间
|
退出应用程序
如果大部分主机或 CICS 应用程序发生系统错误,那么当前的交互将终止。在这种情况下,应使当前测试立即失败终止。
如果继续发送击键(键值)到屏幕上,将导致终端锁定。应该避免这种情况的发生。依据应用程序的运行状态,需要不同的方法来处理不同的错误。例如,在我们的应用程序中,标准错误信息将显示在消息行中,正好在屏幕下部的功能键显示区之上。因此,应该在必要时检查错误信息(依赖于应用程序)。
| |
图 23: 检查错误信息
|
一种退出测试的好方法就是使用以下命令:
-
C, ExitCycle :退出运行的表直至退出运行的 CYCLE
-
C, ExitSuite :退出运行的表直至退出运行的 SUITE
-
C, ExitStep :退出当前活动表
尝试一下
如果已经安装了 Reflection for IBM,可以试试以下实例。这些代码已经在 Reflection for IBM version 9.04 和 Robot v2002.05.20 中测试过。
配置实例
一个来自 Reflection for IBM 软件的 internal 实例。步骤 1-5 配置了到示范主机的连接并且创建了一个用于实行的 LocalDemo 设置文件。
- 打开一个新的(无标题) Reflection 会话。(可以使用 File 菜单中的 New Session 命令打开新的无标题会话。)
- 点击 Connection > Session Setup。在 Session 之下,将 Type 设置为 5250 Terminal 或者 3270 Terminal。在 Transport 之下,将 Type 设置为 Demonstration。为所选的会话类型选择仿真文件名。点击 OK 按钮,将 Session Setup 对话框关闭。
- 在登陆之前,要测试与主机的连接。要进行测试,点击 Connection > Connect,或者点击 Connect/Disconnect 工具栏按钮。键入用户名和密码,然后按下 Enter 键登陆。可以使用任意登陆名和密码登陆示范主机。
- 在成功连接之后,点击 Connection > Disconnect 断开与示范主机的连接。
- 最后,点击 File > Save As。在 File name 框中键入
LocalDemo,点击 Save。
运行实例
依照这些步骤运行实例:
- 将文件
ReflectionIBM.sbh、ReflectionIBM.sbl 和 CustomDriverCommand.sbl 拷贝到 Robot SQABasic 的路径下并编译。这是为支持 HLLAPI 而补充的对 RRAFS 用户驱动程序命令的实现。如果愿意可以将 CustomDriverCommand.sbl 重命名并保留原件。
- 在 Robot 中创建新的 Robot GUI 脚本
ReflectionSample_CycleDriver 和 ReflectionSample_ExportXLTables,并将内容从附属文件中拷贝出来并编译。
- 在
ReflectionSample_CycleDriver 主脚本中创建 HourGlass、StatusBar 和 LogonMsg VP。
- 将 Excel 文件、
ReflectionSample_HIGH、 ReflectionSample_MAP 和 ReflectionSample_STEP 复制到工程 Datapool 目录下。
- 连接到 Reflection for IBM internal 实例主机上。
- 运行
ReflectionSample_CycleDriver。
结束语
使用 Robot,许多方法可以自动控制主机应用程序测试。Pete Jenney 和 Raymond Gilbert 在 Mainframe Application Testing with Rational Robot 文章(以下的参考资料)中介绍了一些经验。还有许多其他的方法来操作终端屏幕文本。例如,使用复制或粘贴方式将屏幕上的文本拷贝到文本文件中并在那里检验内容。
我们的机构采用了 RRAFS 作为一种用于功能测试自动化的主要平台。因此在观察用来解决主机和其他应用程序测试自动化问题的新方案时,我们总是试图照着基于框架的方法去做。本文共享了一些我们在探索过程中得到的经验。对于那些对此领域感兴趣的人士,我们推荐您尝试 Application Testing 中介绍的其他技术。
参考资料
参考资料
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文。
关于作者  | |  | Jirong Hu 是一名软件过程专家,现为 IBM Global Services 工作。在这之前,他曾经在 J2EE 开发和 Microsoft 技术方面工作多年。当前他正致力于软件变更控制管理、配置管理和质量管理的工作上。他还是 IBM® Rational® 工具,(包括 ClearCase®、ClearQuest®、RequisitePro®、Robot 和 TestManager) 的技术顾问。 |
对本文的评价
|