UML软件工程组织

 

 

使用 IBM Rational Functional Tester 实现全球化应用的自动化测试

2008-06-13 作者:Komal Mirchandani,Shruti Ujjwal 来源:IBM

 
本文内容包括:
如果您想为了全球化的应用开发测试自动化脚本,但是您遇到了困难,因为记录在特定位置的自动化的脚本运行在其他位置时会失败,那么这篇文章正好能助您一臂之力。这篇文章向您介绍了一种方法,可以使您完美地运行一个在不同地点的 IBM ®Rational®Functional Tester 开发出来的测试自动化套件。测试自动化工程师只需要知道对象的部分属性,就能够使用测试套件开放的知识解决本地化的应用问题。

前提条件

  • 需要安装 IBM Rational Functional Tester 版本 6 或 7 以及必要的语言包。
  • 根据需求(例如日本、中国和法国),为所有必需的地点安装操作系统语言包。

测试自动化概述

手动测试很耗时间、劳动强度高,并且通常是很单调的。手动测试引入了一些问题,尤其是在资源有限、期限严格的情况下。如果您需要改善您的应用程序测试并且确保其无障碍地工作,那么您向着自动化全部手动测试任务方向移进这一点是非常重要的。

在当今自动化测试周期逐渐缩减的环境下,自动化测试使得不仅是专业人士甚至是新用户在应用程序测试中快速地得到了高质量的结果。自动化工具记录了用户和一个应用程序的交互过程,由这个过程生成的脚本之后可以用来接下来的测试。总而言之,测试自动化使您在期限内以节省成本的方式最优化复杂应用程序的质量。这样能使您更快地得到更高质量的软件。

通过使用 IBM Rational Functional Tester,将其作为一个测试自动化工具,测试自动化是一个三步过程::

  1. 记录:当用户导航应用程序的时候记录当前的测试脚本。您也可以插入验证点使系统的相应有效,使数据驱动的测试脚本在各种数据输入上执行相同的脚本。
  1. 增强:增加代码以执行各种不同的功能。典型的增强测试脚本的修改包括条件分支、重构和例外处理
  1. 回放: 运行脚本在测试时记录过程中仿真一个用户对应用程序的相同行为。差异被记录在日志中,测试人员可以确定是否功能性良好,有没有回归的缺陷被引入了。

全球化测试自动化遇到的典型问题

由于不断变化的软件部署趋势,一个测试自动化工程师要面临一些挑战。当前的趋势是,使用它们的软件开发组织和客户分布于不同的地理位置,这就意味着应用程序必须是全球化的。

全球化应用程序是指在其中所有的字符串,例如消息、标签和文本都是本地化的,也就是说,翻译成这个应用程序启动或登录所在地的语言。举个例子,如果一个应用程序从日文语言或者操作系统中启动,那么所有的信息都是用日文来显示的。类似地,如果一个应用程序从法文语言或者操作系统中启动,那么所有的信息都是用法文来显示的,依次类推。“全球化”是指允许非英文字符集输入输出的应用程序。

结果是,即使在这些全球化应用程序成功自动化之后,您也可能会遇到如下这些问题:

  • 自动化脚本 ,其记录在一个特定语言环境中,会在您尝试于不同语言环境中确认它们时发生失败。这种情况会发生是因为用于回放自动化脚本(例如自动化脚本必须操控的按钮上的标签)的对象定义从英文环境到日文环境可能是不一样的。(参见图 1。)
  • 验证点 ,其存在于一个特定语言环境中,会在您尝试于不同语言环境中确认它们时发生失败。这种情况会发生是因为期待的或者初始的验证点的记录值与测试下的全球化应用程序展示的实际值是不相符的,因为这个应用程序是在一个不同语言环境启动的。
  • 数据驱动的测试脚本 不能选择和扩展数据集,而依赖于测试的应用程序是从哪个语言环境中启动的。这种情况会发生是因为自动化脚本没有隐含的智能来帮助确定语言。

例如,图表 1 描述了一个在英国一个地点初始启动用来记录测试脚本的全球化应用程序。之后,当应用程序在日文环境启动时相同的脚本会被回放,但是脚本会失败,因为此测试下的应用程序的消息是用英文记录的。但是在日文环境启动相同的应用程序,消息会被翻译成等价的日本文本,并致使底层的对象属性发生变化。

图表1. 在某地记录的脚本在另外一个地方回放会失败
在某地记录的脚本在另外一个地方回放会失败

问题: 记录/回放模型失败
原因:测试下的应用程序是全球化的

  • 在地点1记录(比如,英语)
  • 在地点2回放(比如,日语)
  • 结果: 脚本失败
  • 原因:用于回放自动化脚本的对象定义因不同的地点而有差异。

验证点和数据驱动的测试脚本也会出现类似的问题。

全球化应用程序的自动测试是如何工作的

一个全球化的应用程序使用本地的资源文件在不同地点启动的同样的应用程序中显示本地化的消息、标签和文本。这里描述的方法是基于 IBM Rational Functional Tester 的,这种方法使用装载着全球化应用程序的当地资源文件。当地资源文件在对象的属性值和那个值对应变量间建立一一对应。这有助于从资源文件中选择文本的等价值,而这个资源文件依赖于应用程序回放时在何处启动。

如果您打算把您的测试自动化套件全球化,您必须处理这些对象图。对象图只是测试的应用程序中所有 GUI 对象的集合,有相应的属性值。您必须选择属性值(例如,按钮上的标签)然后找到资源文件(图表2)中相应的变量。当对象的属性值被这个变量取代,底层的代码就会根据当前的地点(图表3)取出这个变量的值。

图2. 对象图的图表显示
对象图的图表显示

图3. 自动测试全球化应用程序的底层工具
自动测试全球化应用程序的底层工具

之后回放脚本时,Rational Functional Tester 使用在每个地方都相同的变量,而不是再查看其因地点而异的属性值了。因此,脚本会顺利地回放。这种方法使得测试自动化脚本针对地点的改变具有可重用性和一定的弹性。此方法还使得自动化脚本能找到全球化应用程序的缺陷,再也不用更多的手动全球化测试了。

全球化应用程序的自动测试的步骤

让我们以一个Java™基础类(JFC)按钮全球化应用程序的范例开始来实现这种方法 。JFC 按钮的accessibleName 和 name Properties 是本地化的,就是说相对应于这些属性的值取决于这个应用程序启动的地点。

图 4 展示了一个全球化应用程序是如何建立并分包的。此时,JFC 按钮应用程序是一个可执行的 Java™ Archive (JAR) 文件。 它含有Java 类生成的源代码,并与能使应用程序中的文本可以被翻译的各种当地资源文件绑定在一起。因此,当在不同的地点启用这个应用程序时,显示在用户界面上的文本是从该地相应的资源文件中读取出来的。就是这个资源文件使得一个应用程序全球化。

图4. 一个 JFC 按钮全球化应用程序的结构
Schematic diagram of executable

记录

想自动化任何一个仅在一个地点记录但在不同地点(如日本、中国、法国)回放的全球化应用程序,请遵循以下步骤:

  1. 在 ivory.properties 文件中设置 Enable Localization 变量为 True (rational.test.ft.services.enable_localization=true) ,这个变量在 Rational Functional Tester 的安装位置能够找到。(参见列表1的源代码。)
列表1. ivory.properties 文件的一部分,其中 Enable Localization 变量被设为 True
 
                
###
### Internal properties: Not intended for consumer modification
###
# Version number applied to the enabler.wsw plugin when an eclipse shell gets enabled
rational.test.ft.enabler.plugin.version=7.0.0
# rational client JVM startup options
#rational.test.ft.client.jvm_options=-xj9
# When enabled this option allows the install directory for the local
# TestContext to differ from the global setting
# (the install directory of the first TestContext created)
rational.test.ft.install_dir.ignore_mismatch=true
# When enabled this option allows recording / playback against product own UI
rational.test.ft.testability.allow_testing=true
# When enabled this property allows string lookup in the localized
# string table, if available 
rational.test.ft.services.enable_localization=true
# Internal. Allow connecting to a .NET project for execution framework testing
#rational.test.ft.testability.allow_vbnet_remote=true

第2步 使用 IBM® 框架(以前被称为 ITCL)在 Rational Functional Tester 中开发测试脚本。使用这个框架确保了结构化的方法去开发测试脚本,并且提供了其他好处:通过组织测试自动化脚本形成 AppObjects、任务、测试用例层来实现对于测试自动化脚本的一层抽象。最小化的复杂度,以及可复用的且一般化的测试脚本。一个提供了一般自动化功能的库文件的基本集,用于测试脚本开发和扩展。

  1. 使用 IBM 框架组织为 JFC 按钮全球化应用程序而开发的 Rational Functional Tester 脚本,使它们分为 3 层(参见图5):
    • appObjects 层: 新建一个叫做appJbutton的类,这个类存储与测试脚本交互的对象。
    • 任务层: 新建一个叫做 taskJbutton 的类,其中真正的逻辑以各种任务的形式写成,也叫做函数
    • 测试用例层:新建一个叫做 testCaseJbutton的 类,其中写在任务层的各种任务用来实现端到端的测试场景。
图5. 使用 IBM 框架组织 Rational Functional Tester 脚本
使用 IBM 框架组织 Rational Functional Tester 脚本
  1. 使用 Rational Functional Tester 记录任何地点(如英国)的脚本。
    1. 识别因不同地点值有变化的所有对象属性。
    2. 现在打开对象定义文件, 在 Rational Functional Tester 里也叫做对象图
    3. 选择因地点不同志也有所变化的对象属性。在这个应用程序范例中,javax.swing.Jbutton 对象的 accessibleName 和 name 属性有变化(参见图 6)。
图6. 全球化应用程序的对象图,具有变化值的对象属性被选中
全球化应用程序的对象图,具有变化值的对象属性被选中
  1. 在 JFC 按钮应用程序的资源文件中搜索对象属性值。这种情况下,可变对象的属性值是 Remove text。 这是在英文环境的值,在其它地点有等价的文本(见列表 2 和列表 3)。
列表2. 英文环境的资源文件的部分内容,键值对(变量-属性值)
 
                
# NLS_MESSAGEFORMAT_VAR
sampleapp.remove = Remove



列表3. 日文环境的资源文件的片段,键值对(变量-属性值)

   
# NLS_MESSAGEFORMAT_VAR
sampleapp.remove = \u9664\u53bb(E)

增强

  1. 用在资源文件中找到的值相应的变量名去替换 Rational Functional Tester 的对象图中的值。这种情况下,属性的属性值: accessibleName 和 javax.swing.Jbutton 对象的名字是 Remove text。 这个值被变量的名字 sampleapp.remove取代, 因为这是对应于 Remove 值(图7)的键。
图7. 取代之前的(带属性值)取代之后的(资源文件替代属性值的变量)对象图
对象图
  1. 在工程资源文件夹下放置所有本地化应用程序资源文件的副本。
    1. 重命名所有的当地资源文件,使得名称都以 Rational Functional Tester 的项目名开头,并包括当地名称。此例中,这些当地资源文件被重命名了,开头是 BeyondlocaleBarrier (因为它是项目名称),然后在文件名后加上各自的当地名称(见图表8)。
    2. 因此,比如在日文环境文件名就是: BeyondLocaleBarrier_ja.properties。 如第5步显示的那样,这就保证了用来表示对象属性的变量相应的值是由Rational Functional Tester脚本选择出来的,并在回放时能够恰当地识别对象。
图8. 放置在应用程序资源文件夹下的本地化应用程序资源文件
应用资源目录
  1. 写一个本地语言支持(NLS)工具(如图表9所示):
    • 接受相对应一个对象属性值的变量。
    • 检测现在所在的地点(例如,日本)。
    • 搜索针对当地的资源文件。
    • 在资源文件种搜索变量。
    • 返回本地化值:
      • 要设置此值为正确识别情况下的对象属性值,使用 setProperty() API。
      • 使用此值进行所要求的条件检测或者作为验证点(图表10)
图9. 用来测试 JFC 按钮全球化应用程序所写的 NLS 工具
样例工具

图10. 使用 NLS 工具进行条件检测或者验证点以保证期望的按钮名称与实际名称匹配
样例工具

回放

  1. 在不同的语言环境回放脚本,例如日文环境、中国、法国,这些测试脚本会成功地运行,因为它们现在是与地点无关的(参见图表 11 和图表 12)
图11. Rational Functional Tester 回放一个在日文环境启动的应用程序的测试脚本,此脚本与它在被记录地点的脚本是不同的
启动应用

注意:
使用了 NLS 工具,即使脚本是在英文环境记录的,它在日文环境也能通过

图12. 在日文环境启动的一个应用程序的 Rational Functional Tester 脚本回放日志
回放日志

这种方法的优点

使用这篇文章描述的方法开发全球化应用程序的自动化工具有很多优点。以下列其中的几条:

  • 全球化回归测试
    • 测试自动化小组能够使用这个方法建立一个自动化回归测试工具,在一遍遍生成后测试全球化应用程序。
  • 一次记录,各处回放
    • 小组可以在英国开发自动化脚本并在其他地点(日本、中国、法国等)运行同样的脚本,而脚本不需任何改动。
  • 明智地使用您的时间
    • 如果在某地测试自动化所需,比如说X天(每个测试人员),那么在九个地点测试自动化所需将是 9*X 天。
    • 通过使用 IBM Rational Functional Tester 自动全球化应用程序测试,所花时间最多是 2*X 天。
  • 易于维护
    • 如果测试的应用程序中文本或者标签发生了改变,只有资源文件需要替换,而不再需要改变自动化脚本了。这就使得只有一处对象的更新以及对象相应的属性。

参考资料

学习 获得产品和技术 讨论
 

组织简介 | 联系我们 |   Copyright 2002 ®  UML软件工程组织 京ICP备10020922号

京公海网安备110108001071号