WinRunner(3)

2019-04-15 15:55

Prolang varchar2(60) 从ResourceBundle文件名中提取出来的表示语言的串,如从TestBundle_zh_CN.properties中提取出的zh_CN 从ResourceBundle文件 内容中提取出来的(key-value)对中的key Key value varchar2(400) Value1 location nvarchar2(400) 从ResourceBundle文件 内容中提取出来的(key-value),因为有的value非常长,已经超出了4000个字节的字段长度限制,所以如果value超过4000个字节,提取vlaue中前400个字节否则保留全部字节。注意是400个字节不是4000个字节,因为在WinRunner中完全可以通过正则表达式的使用将字符串截短,不用保留那么长的串。 clob 这是一个备份字段,当value超过4000个字节时把整个value备份到这里,否则为空 varchar2(1200) 保留(key-value)对的出处,即它来自于哪个ResourceBundle 注意:component和version字段是为了能更有效的翻译而引入的,在导入resourcebundle时应该确定它属于哪个component的哪个version,这样在翻译时就可以通过增加where判断条件来更具体化一个查询。

抛开如何获得prevalue先不说,最终要进行的select查询就是以下两种 ● SQL精确查询

☆ 获得key的SQL语句

select key from GLOBALRES where value=’Add Another Row’ and prolang=’en’ and component=’UIX’ and version=’10.1.2.0.2’

☆ 获得postvalue的SQL语句

假设上面的SQL语句查询出来的key是TABLE_ADD_ROW_SINGLE_TEXT,则获得postvalue的语句为: select value from GLOBALRES where key=’TABLE_ADD_ROW_SINGLE_TEXT’ and prolang=’zh_cn’ and component=’UIX’ and version=’10.1.2.0.2’ ● SQL模糊查询

☆ 获得key的SQL语句

select key from GLOBALRES where value like 'Certificate Mana%') and prolang=’en’ and component=’oca’ and version=’10.1.2.0.2’

☆ 获得postvalue的SQL语句

假设上面的SQL语句查询出来的key是OCAUIAdminTabText,则获得postvalue的语句为:

select value from GLOBALRES where key=’OCAUIAdminTabText’ and prolang=’zh_cn’ and component=’oca’ and version=’10.1.2.0.2’

看到这里,您也许会有一个疑问:从key到postvalue是一对一的关系,但是从prevalue到key则是多对一的关系,比如可能有多个key在英文下的value都是OK,这就是所谓的对象多翻译的情况,我们将在3.2.4小节说明如何处理这种情况。

11

3.1.2 操作系统级数据翻译

有时测试要打开一些操作系统级的窗口使用里面的一些对象,由于我们不知道如何获得它们的ResourceBundle,所以只好用一种最笨的办法: (1) 第一次将用到的操作系统级的对象手动搜集(可以使用WinRunner的Spy来录制)

在一起,保存成在一个单独的resourcebundle中;

(2) 以后再用到时,从这个resourcebundle里找。

在COFAL中,我们单独定义了一张表SYSRES来保存操作系统级的resourcebundle,表的结构如下: 字段名 win obj value lang 这张表的结果完全是按照WinRunner中“窗口和子对象”的模式定义的,我们规定: ● win字段和obj字段都只能是英文字符串,取对象在英文环境下的名字。如“Security

Alert”窗口中的“OK”按钮对应的win字段为“Security Alert”,ob字段为“OK”。 ● value字段实际上就是对象在不同语言环境下的名字。如“Security Alert”窗口

在英文下的value是“Security Alert”,在简体中文下的value是“安全警报”。

由于我们作出了这样的规定,操作系统级数据只能从英文翻译到其他语言,且prevalue等于key,这样就可以用key直接查找postvalue,省略了从prevalue到key的过程。

另外,在SYSRES中没有象GLOBALRES中的component和version字段,这是因为操作系统的版本比较固定,不象产品那样会有很多个release,同时获得component对我们来说意义也不大。当然,您也可以根据您的实际情况添加这两个或其他字段。

字段类型 varchar2(120) varchar2(120) 描述 窗口的绝对逻辑名 对象的相对逻辑名,当对象是窗口是该字段那为null nvarchar2(240) 对象的需要翻译的属性值 varchar2(10) 语言 3.2 翻译策略

需要翻译的prevalue来自于对象的属性值,但并不是所有的对象都需要翻译,即使需要

翻译也不是所有的属性都需要翻译,即使找到了需要翻译的属性,它的值也一定都可以直接翻译,可能要经过一些特殊处理才能够翻译。下面我们就来一一说明。

3.2.1 通过class属性来判断object是否需要翻译

每个object的定义里都肯定要包含它的class属性,通过class属性可以判断出该object是否需要翻译。

12

3.2.1.1 不需要翻译的class

以下class类型一般不需要翻译:

● edit

● combobox

● check_button ● list

● radio_button

3.2.1.2 需要翻译的object

除了以上那些不需要翻译的class外,其他的class类型基本上都需要翻译。

注意,以上我们所说的class都是WinRunner能够理解的标准的web class,如果您自定义了一些新的class类型,是否需要翻译要由实际情况而定。

在Oracle AS中我们没有定义新的class类,一些非标准的object也可以用标准的class类型定义,如Oracle AS中的某一按钮的定义如下:

\{

MSW_class: html_rect, class: object, html_name: \ location: 0 }

建议,尽量用WinRunner Spy来录制应用程序中的object,不要一开始就自己手动定义。这样你才能发现WinRunner是如何识别你的object的。

3.2.1.3 需要翻译的属性

一般情况下,对于那些需要翻译的object,下列属性需要翻译: ● label

● html_name

● attached_text

注意:一个object一般只具有上列三个属性中的一个,有哪个就翻译哪个。另外,需要翻译的属性可能不只是这三个,但是在我们的测试中这三个属性就足够了。

13

3.2.2 判断是Java应用程序级对象还是操作系统级对象

由3.1.1和3.1.2两个小节可以看出,Java应用程序级对象和操作系统级对象的处理是不一样的。如果一个GUI文件或script文件中同时包含这两种类型的对象定义时,该怎么办呢?由于操作系统级对象的数量比较少,所以每次我们尝试把对象作为操作系统级对象进行翻译,如果不成功作为Java应用程序级对象进行翻译,也就是说先SYSRES中查找,不成功再在GLOBALRES中查找。

3.2.3 翻译规则及其优先级

把从GUI文件中提取出的属性值看作是prevalue,配合其他查询条件最好的情况是可以找到value字段值就等于prevalue的行,进而取出key字段。但有时没有这么幸运,那么是否就要开始模糊查询了,要知道对value字段使用like查询可能会找到很多行,也就是说很多key。无论如何这应该是最后一招,在这之前我们还应该再做些什么的。在实践中我们发现,WinRunner在学习对象的时候可能会对得到的属性值做一定处理,而且java程序在绑定数据时也可能对绑定的key返回的value一定的处理。而我们只要找到这些规则,然后通过反向运用,就可以得到一些更纯粹的子prevlaue,翻译这些子prevalue再把翻译的结果按规则正向组合起来作为最终的postvalue。

下面要介绍的这些语法规则是在我们的测试中用到的。

3.2.3.1 WinRunner的语法规则

WinRunner有许多语法规则,我们用到的就是“!.*”。 使用spy的朋友都知道,如果串过长,WinRunner会自动把它截短并在串的头和尾分别加上“!”和“.*”。其中:“!”表示省略,必须放在串首;“.*”表示任意字符串,可以放在除串首外任何位置,一般放在串尾。

3.2.3.2 SQL语法规则

在SQL语句中,用单引号作为字符串的边界符,所以不论是做select精确查询还是select模糊查询,都要把prevalue中的单引号escape掉,escape符号是SQL中的escape符:“’”(单引号)。

注意:java中字符串的边界符是双引号,escape符号是:“\\”(反斜杠)

3.2.3.3 Oracle AS绑定数据时的语法规则

在我们的测试中用到的规则有以下4条:

14

● 全串匹配

如: “submit”翻译成中文就是“提交” ● 嵌套串 如“Edit Policy Result: UniqueCertificateCo”就是由“Edit Policy Result: {0}”嵌套“UniqueCertificateCo”组成的,也要分别绑定后再组合在一起。 ● 多串连接

如”OracleAS Certificate Authority-Advanced Search”就是由”OracleAS Certificate Authority”和”Advanced Search”用”-”连接组成的,分别绑定后用”-”连接在一起。

注意:OracleAS中只存在连接两个串的情况,也就是说即使prevalue中有多个”-”,也只有一个是其连接作用的,其他的都是子串内部的。

3.2.3.3 翻译规则的优先级

根据上面的语法规则,我们制定了以下的三种翻译规则类别,优先级由高到低: 1、 准备类别

准备类别的优先级最高,是在翻译前必须要判断的,它包括以下两条: ● winrunner的省略符规则 如果在prevalue的首尾发现有“!”和“.*”,则要先去掉“!”和“.*”作为新的prevalue;然后如果对象的绝对逻辑名包含prevalue,则用对象的绝对逻辑名作为新的prevalue ● Escape掉prevalue中所有的单引号 因为最终要用prevalue在表的value字段上“=”或like的select查询,而select语句中是用单引号作为字符串的边界符的,所以要escape掉prevalue内部中的单引号,也就是说在prevalue内部的每个单引号前再加一个单引号。

注意:这两条规则没有优先级,哪条先执行都可以。

2、 精确翻译类别

准备类别后,就是精确翻译类别。包括以下4条,优先级从高到低: ● 常量规则

指prevalue在常量列表中。 ● 精确匹配规则

指用prevalue做select精确查询成功。 ● 嵌套匹配规则

把GLOBALRES表中所有满足条件的value字段包含有“{0}”的所有值取出来,把每个值中的“{i}”用“(.*)”代替后做成pattern,用prevalue与每个pattern匹配,分别解析出被嵌套的串outer和嵌套的串inner,这样可能有多个解析的结果。要求在至少一种解析结果中,outer满足精确匹配规则表示成功,而对于每个inner串,要先进行常量规则判断和精确匹配规则判断,在不满足这两个规则的情况下,取inner串本身。 ● 连接串全精确匹配规则 如果prevalue中包含“-”,则用不同的”-”解析出所有不同的前后段tmpfir和tmplas。要求在至少一种解析下,满足如下条件时表示成功:

☆ tmpfir满足常量规则或精确匹配规则或嵌套匹配规则

15


WinRunner(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:第四版人民币冠号印制顺序表

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: