- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
国际化软件测试技术的实现
摘 要: 对国际化软件测试的重要性、内容、方法等方面作了深入分析,并就当前普遍采用的国际化软件测试自动化工具存在的弱点进行了剖析,最终以Selenium Pc-Java工具做为解决问题的平台,提出了相应的解决办法,对已有的测试工具在国际化软件测试方面的功能的扩展提出了思路。
关键词: 软件测试;软件国际化;软件国际化测试;软件本地化测试;软件测试工具
经济的国际化促进了软件产业的国际化,软件国际化生产和全球服务已成为更多国际软件公司的发展策略。软件产品要获得更多的国际市场份额,必须进行软件国际化设计、开发、测试和服务。
为了满足国际化软件世界范围内发布的需要,软件的国际化设计和本地化工程处理是两个重要步骤。作为软件质量保证的国际化软件测试过程包含一系列相互关联的测试技术和流程。在广泛采用国际化开发模式的基础之上,如何提高这些测试的效率值得进一步研究。
国际化软件测试包括软件国际化测试和软件本地化能力测试。软件的国际化测试是重要的测试阶段,必须在本地化测试之前进行。国际化软件的测试目的是判断软件的国际化设计程度,确定软件是否支持可能的区域,本地化是否容易。
软件本地化测试的对象是本地化的软件,需要在本地化的操作系统上进行。本地化测试过程中,需要同时运行源程序软件和本地化软件,以源程序软件结果作为本地化软件的主要参考。
1 测试工具国际化弱点
测试工具(尤其是自动化工具)在如今的测试过程中扮演着重要角色。尽管自动化测试无法完全取代手动测试,但许多测试领域都因自动化测试的引入而获益匪浅。例如,通过使用自动化测试工具,可以有效地验证本地化产品的功能或测试产品的全球化程度。
测试工具通过对原始应用程序和本地化后的应用程序对照运行自动化测试,可以验证应用程序的本地化是否对功能造成破坏。使用自动化测试,无论UI语言是什么,工具都可以测试其功能。此外,为确保产品已全球化,在测试过程中需要采用更广泛的测试输入范围以及更多样的环境设置。自动化操作可更轻松地应对测试方案数量上的增加,并可以有效地跟踪全球化测试的结果。
虽然自动化测试过程是在全球化环境下针对新产品运行一些可信赖的旧有测试工具,但如果被测应用程序已被翻译,则检查应用程序UI功能性的测试工具可能会被中断。即使未受译文的影响,其他因素也可能导致测试结果不正确,例如工具验证日期时认定日期格式是固定的。而在全球化的应用程序中,日期格式会随着区域和地区的不同而不同,这样就会造成自动化测试工具不起作用。
为避免上述问题的发生,测试工具的开发人员必须与全球化软件的开发人员遵循相同的规则。测试工具必须是全球化的,必须动态调整其区域设置,并且应该能够处理国际化文本数据。此外,如果需要通过名称来访问可本地化对象,则测试工具必须是可本地化的。
目前全球化测试的问题主要有:(1)在针对国际化测试技术和策略中实现自动化测试脚本的复用问题。(2)测试环境的语言及字符集设置的选择,如果缺乏这种选择或者错误地进行了选择,则可能在具体测试过程中带来系统由于码制的切换错误而出现乱码的问题。(3)多种语言显示的测试问题,软件的翻译质量包括翻译的准确性、完整性、一致性,以及特定区域市场的文化、传统、习俗等内容。如果要实现对翻译的检查,需要根据所测语言而准备相应的翻译文件进行对比。当测试多种语言时,会增加测试人员的负担。(4)多语言和字符集的测试数据的自动生成,为了测试软件对接收、处理和发送不同字符集的能力,需要实现针对不同语言和字符集数据的自动产生。
总之,伴随对软件测试的日益重视以及自动化测试的逐步引进,各种自动化测试工具相继推出。但是各种自动化测试工具的可应用性程度和支持侧重有所不同,并且广泛缺乏对国际化测试的支持。
2 测试工具国际化的扩展
针对以上论述的国际化软件测试的技术实现难点,通过对Selenium RC-java工具进行分析用以实现其对国际化支持的扩展。
Selenium是由ThoughtWorks团队开发的Web应用程序自动化测试的工具,适合进行功能测试、验收测试。Selenium RC基本测试流程如图1所示,它提供了一个Selenium Server,可以自动开始/关闭/控制所支持的浏览器。Selenium Server与浏览器使用AJAX(XmlHttpRequest)直接通信,可以使用简单的HTTP GET/POST请求直接向服务器发送命令,即可以使用任何可以发出HTTP请求的编程语言在浏览器中自动执行Selenium测试。
Selenium RC和大多数的自动化测试工具一样,也在很多方面缺乏对国际化测试的支持。如在没有指定浏览器参数文件的情况下,Selenium Server会启动一个系统默认设置的浏览器执行测试,默认设置语言为当前浏览器版本语言;操作函数直接使用大量页面元素作为参数,对这类数据取值存在依赖,使得Selenium测试变得脆弱且需要针对测试脚本中同一页面元素文本属性值进行重复修改;不能提供多语言和字符集的测试数据等。
针对Selenium工具的不足,通过对测试脚本结构的设计,以及在Selenium RC封装的Java工具包中添加对环境设置的选择和参数文件的处理等改进,实现针对国际化测试的扩展任务。
2.1 将特定语言的测试元素独立于测试脚本代码,支持多语言测试的脚本复用
为了达到在多国语言测试时复用整套脚本的目的,将所有取决于特定语言文化的测试元素独立于测试脚本代码存储在参数文件内。
(1)存放固定参数的参数文件。在这类文件中,存放针对任何语言版本测试过程中均不需改变的参数数据。这些固定参数可以是测试用例运行过程中输入的字符串,也可以是界面元素的属性值,例如测试机IP地址、界面上按钮的ID值、界面上表格的xpath值等。
(2)根据测试语言和字符集,存放输入的随机数据的参数文件。根据测试语言和字符集要求,分析涉及直接或间接处理字符串输入/输出的测试案例,抽取其中可以被替换为任意国际输入类型的随机数据。在执行测试时,通过替换这些输入数据,以测试软件对处理不同语言和字符集的能力。例如,在执行新建用户这个测试用例时,需要输入一个新建用户的用户名。在设计中,这个用户名可以为任意国际输入类型的数据。为了测试软件对语言为英文、字符编码为ISO-8859-1的输入数据UserName的处理能力,将该输入数据作为参数存储在参数文件进行测试。
(3)根据测试语言,存放界面元素的文本属性值的参数文件。在Selenium工具包中,操作函数直接使用界面元素的属性值作为参数,而这些属性值的类型包括name、ID、xpath、txt等等。当测试的目标语言发生改变时,界面元素的文本属性值也根据目标语言对应的翻译文本而发生改变。如果这类参数与测试语言不相匹配,测试会因为界面文本数据不合法而失败。因此,将这类参数存储在单独的参数文件中,以方便对其灵活处理。例如,在测试英文版本软件时,需要点击一个命名为Apply的按钮,将其名字作为参数存储在参数文件中。
2.2 动态选择语言和字符集,支持多种语言测试过程
以某具体Web产品的国际化测试项目为例,测试项目全过程是通过使用ant这个构建部署工具作为流程脚本引擎,自动调用程序而完成。整个过程可以全部自动化,测试人员只需输入简单的配置命令。当然在每日构建的基础上,还可以不用输入命令而通过定时任务的设定实现每天自动执行回归测试。
满足这种国际化回归测试的要求,首要条件就是有正确的初始化测试环境——需要添加对测试环境语言和字符集的设置。这种语言及字符集设置的选择,不仅包括对当前所测软件语言版本的选择,还需要包括当前操作系统等环境语言与字符集设置的选择。
在没有指定浏览器参数文件的情况下,Selenium Server只会启动一个系统默认设置的浏览器执行测试,默认设置语言为当前浏览器版本语言。特定浏览器语言和参数字符编码的设定主要通过以下方法实现:首先,根据测试人员的选择,将需要测试的语言和字符集存储在配置文件中;然后,根据测试要求的浏览器语言和字符集设置,在Firefox的参数文件prefs.js中添加为用户语言首选项;最后,在启动Selenium Server时,添加“firefoxProfileTemplate”选项并指向已修改的Firefox的参数文件目录。
客户端操作系统(Redhat4.0)的语言和字符集,可以通过修改文件/etc/sysconfig/i18n或者通过设置LC_ALL 和LANG 2个参数实现。
上述方法也可以扩展到多个语言和字符集环境的设置的情况。首先,将所有需要测试的语言的字符集存储在配置文件中;然后,串行或者并行地在测试机上进行测试。其中,串行执行是指依次正确初始化测试环境,循环执行测试流程,而并行执行是通过Socket通信将信息传递到多台目标测试机,并行初始化测试环境,执行全部测试流程。
2.3 通过对XLIFF格式的翻译文件的查找,实现测试页面上显示的翻译
本项目中的翻译文件采取XLIFF文件格式。XLIFF是一种XML应用,每个文本片段保存在一个翻译单元中(<trans-unit>)。通过查找相应测试语言的XLIFF文件,实现对前述的第三类参数文件的正确替换,以支持对不同语言版本显示的翻译的测试。
2.4 利用正则表达式,处理包含特殊字符的翻译单元
在上述自动化的参数文件替换过程中,需要对大量的XML格式的翻译文本数据进行查找。但是,有一些特殊字符在写入到XML文件时,会被实体引用所替换。所以,目标界面上显示的字符串,可能出现与写入在XLIFF翻译文件中存储的翻译字符串不一致的现象。
针对上述这类翻译字符串与显示字符串不一致的情况,可以通过正则表达式解决。利用正则表达式的模式匹配表达法,对字符串进行比较、匹配,从而判断测试结果是否正确。例如:软件界面上存在一个按钮,英文版本的按钮显示的字符串为“About(A)”,而简体中文版本的按钮显示的字符串为“关于(A)”。然而,写入在 XLIFF文件时,英文对应的翻译字符串应为“About(&;A)”,简体中文对应的翻译字符串应为“关于(&;A)”。因此,在进行简体中文本地化测试时,首先需要利用正则表达式符号“*”替换“&;”,通过“About*”查找XLIFF文件;然后,将查找结果“关于(&;A)”处理为“关于*”,再进行界面翻译测试。
2.5 采用简单替换方式,自动生成指定语言字符集的测试数据
在执行国际化测试时,需要测试软件对处理不同语言和字符集的能力。这种能力,可以通过简单的预处理进行测试。即简单替换前述的第二类参数文件。具体步骤如下:(1)需要维护一个包含所有待测语言和字符集的字符库;(2)根据参数文件中参数的字节数,从字符库中抽取制定测试语言和字符集的字符进行替换。
为了实现自动生成指定语言字符集的测试数据,上述方法相对简单易行。但是伴随测试语言和字符集范围的扩展,字符库需要覆盖的语言和字符集也需要相应增加,这将带来巨大的维护工作量。另外,如果需要字符库覆盖较全面的东亚语言字符,也将带来一定的工作量。
上述扩展方案针对Web技术的大型国际化应用软件的测试,主要使用Selenium RC-java工具开发测试脚本。项目要求同时实现在Linux+Firefox3.0环境下,对软件的九种语言版本进行国际化测试。
在实际的测试工作中,运用了测试元素独立、动态选择语言字符集、根据标准化XLIFF格式转化三项测试软件,以及特殊字符翻译处理、测试数据生成两项实际技术,对Selenium RC-Java工具进行了必要的扩充和修改。实践验证了其对于国际化测试的支持,取得了良好的效果。
参考文献
[1] 崔启亮,胡一鸣.国际化软件测试[M].北京:电子工业出版社,2006.
[2] 李华宇.Java的国际化和本地化原理及解决方法[J].微型机与应用,2001(11).
[3] 周洪斌.浅析Java国际化编程及其实现[J].电脑编程技巧与维护,2005(12).
[4] 包竹苇,李淼,张建.Java网络传输中字符编码问题的研究[J].计算机工程与应用,2007(4).
[5] 许晖,李涓子.J2EE系统国际化问题的解决方案[J].计算机工程,2005(18).
[6] 苏红帆,黄宁宁,韦录丰.Windows环境下软件国际化开发的解决方案[A].广西计算机学会2006年年会论文集[C],2006.
[7] 姜湘岗,章小莉.实现软件多语言用户界面方法之分析[J].北京电子科技学院学报,2006(2).
上一篇:泛华测控携行业解决方案亮相成都电子展
下一篇:NI推出最新以太网数据采集平台