用WinRunner做OracleAS的Globaliza.docx
《用WinRunner做OracleAS的Globaliza.docx》由会员分享,可在线阅读,更多相关《用WinRunner做OracleAS的Globaliza.docx(64页珍藏版)》请在咨信网上搜索。
1、用WinRunner实现软件的全球化测试作者:月白(笔名) 甲骨文软件研究开发中心(北京)有限公司北京市海淀区中关村软件园孵化器2号楼A座一层 邮编:100094移动电话:13651010781,邮件:tina.wang摘要本文采用循序渐进的方法详细的介绍了如何用WinRunner实现软件的全球化测试。当然,单靠WinRunner本身是无法完全实现的,我们开发了一个小程序COFAL来帮助WinRunner实现全球化测试。通过学习这篇文章,您可以掌握: WinRunner的在全球化测试中的缺陷 WinRunner本身可用于全球化测试的地方 COFAL如何帮助WinRunner实现全球化测试 CO
2、FAL的实现细节关键字Globalization(g11n),Internationalization(i18n),localization(l10n),Code Once Fit All Language(COFAL)1. 背景全球化已经成为当今软件发展的趋势,许多大型跨国软件公司都在亚洲设立了自己的专门从事全球化测试的部门。2004年的8月,我加入Oracle甲骨文北京研发中心,正式成为这其中的一员,我测试的软件是Oracle Application Server 10g,以下简称Oracle AS。Oracle AS是一个基于J2EE架构的应用系统,详细的介绍您可以参考OTN上的相关文档
3、。1.1 全球化中的概念全球化的英文是Globalization,由于单词较长,所以为了书写方便,通常缩写为G11N,中间的11代表首字母”G”和尾字母”N”之间省略的11个字母。引用”中国本地化”网站上对全球化的定义:Globalization是使产品或软件进入全球市场而进行的有关的商务活动。包括正确的国际化设计,本地化集成,以及在全球市场进行的市场推广、销售和支持的全部过程。全球化中与我们测试直接相关的有国际化设计和本地化集成。国际化的英文是internationlization,由于单词较长,通常缩写为I18N,中间的18代表首字母”I”和尾字母”N”之间省略的18个字母。引用”中国本地
4、化”网站上的定义:国际化设计是指设计一个适用于多种语言和地区的应用程序的过程。适用于多种语言和地区的含义是当使用不同语言及处于不同的地区的用户在使用这个应用程序时,应用程序必须使用他们能看懂的语言和符合他们文化习惯来显示信息。本地化的英文是localization,由于单词较长,通常缩写为L10N,中间的10代表首字母”L”和尾字母”N”之间生罗的10个字母。引用”中国本地化”网站上的定义:本地化是指将产品或软件针对特定国际语言和文化进行加工,使之符合特定区域市场的过程。真正的本地化要考虑目标区域市场的语言、文化、习俗和特性。通常包括改变软件的书写系统(输入法)、键盘使用、字体、日期、时间和货
5、币格式等。Locale表示表示一个特定的地理、政治或文化的区域,在java中有Locale类,我们会在1.3小节中给出详细的描述 1.2 全球化测试的内容简单的说,全球化测试主要是测试软件的处理数据和显示数据的功能。以Oracle AS为例: 处理不同的字符集(encoding)数据Oracle Internet Directory(简称OID)是一个LDAP服务器,数据保存在Oracle数据库中,现在想测试它创建用户的功能,要求用户的DN可以为不同国家的字符集,通俗的说,可以创建英文的DN,简体中文的DN和日文的DN等。当然具体可以创建哪些字符集的DN也要看当前Oracle数据库的字符集,只
6、是那些在可以和当前字符集正确转换的字符集中的DN才可以正确的创建,否则很有可能无法创建或者创建的结果错误,如我们经常会看到的一些数据变成了问号(?)。 动态显示与Locale有关的数据Oracle Delegated Administration Services(简称DAS)是一个通过web页面访问的组件,页面的编码方式为UTF8,要求当选择不同的浏览器语言时,以下各项都可以显示为与当前Locale相符的形式: 页上元素的文本类型的属性如某个页的标题,在英文下为“Home”,在中文下为“主页”;某个按钮上的标签,在英文下为“OK”,在中文下为“确定”。 表示日期、时间、时区和货币等的文字如某
7、个页上的一段表示出生日期的文字,在英文下显示为“January 1, 1976”,在中文下显示为“1976年1月1日”。1.3 Java程序的国际化设计Java语言是平台无关的,它采用双字节字符编码(UTF16),在解决国际化问题上有天生的优势。下面我要介绍的是Java中“动态显示与Locale有关的数据”的原理。这里要用到的几个主要类都在java.util包(package)中,包括有Locale、ResourceBundle、ListResourceBundle、PropertyResourceBundle等,其继承关系如下图所示: Locale该类包含对主要地理区域的地域化特征的封装。通
8、过设定Locale,我们可以为特定的国家或地区提供符合当地文化习惯的字体、符号、图标和表达格式。例如,我们可以通过获得特定Locale下的Calendar类的实例,显示符合特定表达格式的日期。Locale有以下三个构造函数: Locale(String language) Locale(String language,String country) Locale(String language,String country,String variant)language参数:代表两个小写英文字符的ISO语言编码,如zh表示Chinese,可用的语言编码可以参考:http:/www.ics.uc
9、i.edu/pub/ietf/http/related/iso639.txtcountry参数:代表两个大写英文字符的ISO国家或地区编码,如,CN表示China,TW表示TAIWAN,国家代码对照表如下:http:/userpage.chemie.fu-berlin.de/diverse/doc/ISO_3166.htmlvariant参数:代表与供应商或浏览器相关的代码。如,WIN表示windows,MAC表示Macintosh,POSIX表示POSIX。当有两个variant存在的话,用下划线(uderscore)连接,并把最重要的variant放在前面。下面是几个典型的Locale的例
10、子Locale(ja)Locale(zh,CN)Locale(zh,TW,WIN)Locale(es,ESTraditional_WIN)Locale.getDefault(),得到当前Java虚拟机的宿主系统上默认的Locale ResourceBundle该类是一个抽象类,它定义了三个静态方法来获得具体的实现类(ListResourceBundle的子类或PropertyResourceBundle类)的实例: static final ResourceBundle getBundle(String baseName)等同于调用:getBundle(baseName,Locale.getD
11、efault(),this.getClass.getClassLoader()使用的是系统缺省的Locale。 static final ResourceBundle getBundle(String baseName,Locale locale)等同于调用:getBundle(baseName,locale,this.getClass.getClassLoader()使用的是参数locale指定的Locale。 static final ResourceBundle getBundle(String baseName,Locale locale,ClassLoader loader)下面我们
12、来说说baseName参数和locale参数。BaseName参数指定的是一组ReourceBundle的公共的基础名称,例如,设baseName等于“TestBundle”。如果用ListResourceBundle子类来实现,则要有如下这样的类:TestBundle.class、 TestBundle_zh_CN.class和 TestBundle_fr.class等;如果用PropertyResourceBundle来实现,则要有如下这样的属性文件:TestBundle.properties、 TestBundle_zh_CN.properties和 TestBundle_fr.prop
13、erties等。locale参数和选择策略一起决定运行时具体选择这组ResourceBundle中的哪一个。假设locale参数指定的Locale为(language1,country1,variant1),系统默认的Locale为(language2,country2,variant2),则按照以下优先级的顺序查找最满足条件的ResourceBundle: baseName + _ + language1 + _ + country1 + _ + variant1 baseName + _ + language1 + _ + country1 baseName + _ + language1
14、 baseName + _ + language2 + _ + country2 + _ + variant2 baseName + _ + language2 + _ + country2 baseName + _ + language2 baseName 在每一种情况下,会先尝试按ListResourceBundle类的方式加载,失败后会再尝试按照访问属性文件的方式加载PropertyResourceBundle类。如果所有这些情况都没有找到的话最后会抛出一个MissingResourceException的异常。注意,在第一个getBundle静态函数中locale参数指定的Locale
15、就是系统默认的Locale。 ListResourceBundle该类继承ResourceBundle类,也是一个抽象类。它实现了ResourceBundle类中的抽象函数getKeys()和handleGetObject(String key),并提供了一个抽象函数getContents()。在应用中,通过创建继承ListResourceBundle的子类来实现ResourceBundle。要求子类必须实现getContents函数并提供一个包含有一组属性对的数组,如:package oracle.cdc.sgt.unicode;import java.util.ListResourceBu
16、ndle;public class MResources extends ListResourceBundle public Object getContents() return contents; static final Object contents = s1, Home ; package oracle.cdc.sgt.unicode;import java.util.ListResourceBundle;public class MResources_zh_CN extends ListResourceBundle public Object getContents() retur
17、n contents; static final Object contents = s1, 主页 ; 下面是一个java类根据不同的Locale从相应的ListResourceBundle子类中取数据来显示:package oracle.cdc.sgt.unicode;import java.util.ResourceBundle;import java.util.Locale;public class TestListResourceBundle public static void main(String args) ResourceBundle messages;Locale curl
18、oc;try if (args.length != 2) curloc = Locale.getDefault(); else curloc = new Locale(args0, args1);messages = ResourceBundle.getBundle(oracle.cdc.sgt.unicode.MResources, curloc);System.out.println(messages.getString(s1); catch (Exception e) System.out.println(e);把这三个类加入到classpath中,运行“java TestListRes
19、ourceBundle zh CN”或在简体中文操作系统上运行“java TestListResourceBundle”,打印出“主页”;运行“java TestListResourceBundle en”或在英文操作系统上运行“java TestListResourceBundle”,打印出“Home”。 PropertyResourceBundle继承ResourceBundle类,它不是抽象类,也不需要创建它的子类。与ListResourceBundle相同的是它也实现了ResourceBundle类的抽象函数getKeys()和handleGetObject(String key);不
20、同的是,它是从属性文件(.properties)中读入属性对的。例如,定义如下一组properties文件,并加入到classpath中:MResources.properties:s1=HomeMResources_zh_CN.propertiess1=主页下面是一个java类根据不同的locale从相应的Properties文件中取数据来显示:package oracle.cdc.sgt.unicode;import java.util.Locale;import java.util.ResourceBundle;public class TestPropertyResourceBundl
21、e public static void main(String args) ResourceBundle messages;Locale curloc;if (args.length != 2) curloc=Locale.getDefault(); else curloc = new Locale(args0,args1);messages = ResourceBundle.getBundle(oracle/cdc/sgt/unicode/MResources, curloc);System.out.println(messages.getString(welcome);运行的方式和结果同
22、TestListResourceBundle一样。留意一下TestListResourceBunlde和TestPropertyResourceBundle唯一不同的地方就是在调用getBundle函数的那个语句,按照我们上面所说的,完全可以统一写成:“oracle.cdc.sgt.unicode.MResources”,因为getBundle会缺省先找基础名称为MRseources的类,失败后再找基础名称为MResources的属性文件,在查找属性文件前它会自动把“.”转换为“/”。当然,如果通过存在基础名称为MResources的类和属性文件时,也可以通过直接使用“oracle/cdc.s
23、gt/unicode/MResources”来略过查找基础名称为MResources的类。当然,java程序的国际化设计并不只是这么简单,当涉及日期和时间显示等问题时,还可以利用java.text包以及java.util包中的TimeZone、SimpleTimeZone和Calendar等类进行辅助处理。我们就不在这里详细叙述了,您只需要记住一个ResourceBundle的概念就可以了,本文的后续部分都是围绕着这个概念展开的。2. WinRunner调研WinRunner适合于测试那些有图形操作界面的组件。目前,我们手头可用的版本WinRunner7.5,启用Web和Java插件(plug
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WinRunner OracleAS Globaliza
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。