工作原理 2: 在脚本模式下,RFT 通过其核心方法 .find 定位所有 UI 为对象,同样通过 Mapping Proxy objects 建立起定义对象到界面 UI 之间的对应关系,从而控制对象执行相应的操作。对于任何一个对象而言,他都属于一个树形结构的一部,find 方法,可以从某一个节点开始,定位其所有子类,或者只在子结点搜索。与录制方式中的静态树相比,这种方式其实是构建了一个虚拟的树,find 的方法只是在其中进行搜索而已,他不能对本身的结构产生影响,也不会添加某个结点,这点是很重要的。
对于 GVT 的自动化测试领域,需要特殊说明的是,我们的脚本由于是用来做 GVT 测试,现在很多产品都是 Agile 模式,所以翻译很早可能会进来,某些测试点需要不同的在不同的 locale 下才能测试,我们不拒绝在找对象属性的时候选择一些与翻译无关的 locale,但是在没有这种属性的时候,我们也会用 PII 中的翻译来做。
回页首RFT 和 Selenium 的集成开发环境
前文已介绍,由于 Selenium RC 需要 Java 作为它的开发环境。而 RFT 正好为 Selenium 提供一个较好的 Java 的开发平台。只需将 selenium-server 的 jar 包及 selenium-language-client-driver 的 jar 包导入 RFT 中即可对 Selenium 进行应用。Selenium 支持多种编程语言,它也提供了 .net,java,perl,php,python,ruby 等编程语言的 jar 包,使开发人员可以根据自己的需要选择相应的 jar 包。图 4 给出了 Selenium RC 的文件夹结构。
图 4. Selenium RC 的文件夹结构
例如我们以 java 编程语言为例,图 5 给出了将 selenium-server 及 selenium-java-client-driver 的 jar 包导入 RFT 中的示意图。从图中可以看到 selenium-server 和 selenium-java-client-driver 这两个 jar 包在 RFT 中的 libraries 中得以显示。
图 5. selenium-server 及 selenium-java-client-driver 的 jar 包导入 RFT 中的示意图
将这两个 jar 包导入后,自动化开发人员可以顺利地实现 RFT 与 Selenium 结合使用,进行编写各种自动化脚本了。
下面本文简要地介绍 Selenium Server 的启动方法。启动 Selenium-Server,可以在命令行中使用 java -jar 命令直接运行可执行 jar 包(对于中文 Windows 操作系统且使用 IBM JDK,还需要加参数 -Dibm.stream.nio=true)。
它的命令格式:java – jar selenium-server-standalone-X.X.jar。图 6 给出了 Selenium server 启动成功后的信息。
图 6. Selenium server 启动成功后的信息
RFT 和 Selenium 的对于 GVT 验证点的测试
RFT 和 Selenium 的结合使用可以是自动化开发人员方便地调用 GVT 的验证方法,到目前为止我们已经开发了很多 GVT 的自动化验证方法。例如对于语言字符串的输入及验证,时间日期格式的验证,路径的验证,及在不同语言环境下排序的验证等等。下面将具体介绍一下各个方法的实现机制及使用。
在自动化测试中涉及的 GVT 验证,我们是以 GVT Guide 为导向,ICU 为核心库,来实现一系列 GVT 验证方法的。
Date Time
针对我们在 GVT 中的时间日期格式,我们把日期时间格式的产生,格式化以及格式验证都归于 Date Time 一类,主要的实现方法包括:
( 日期时间格式都对应 4 种 style,分别是 FULL, SHORT, MEDIUM, LONG)
public static String getDateByLocal(Date date,int style, ULocale ulocale)
把一个英文的日期格式转换为对应 locale 下的日期格式 , 这里主要是用来做可接受数据的测试。
public static boolean isValidDate(String date,int style, ULocale ulocale)
判断一个日期串是否符合对应 locale 下某种 style 的格式,这里主要是用来做输出标准的测试。时间与日期的方法类似,不列举说明了。
Data Sort
对于字符串的排序,测试数据显得相当重要,如果测试数据选得不够准确以及特别,那么即使本身存在问题的地方,也有可能发现不出来。我们的主要的实现方法包括:
public static String[] createStrings(int n,ULocale ulocale)
产生在某个 locale 下长度为 n 的测试数据数组。
public static String[] sortedStrings(ULocale ulocale, String [] UnSortedString,int order)
order 表示排序规则是降序还是升序,整个方法为在某个 locale 下,对未排序的一组数组进行降序或者升序排列,返回值为排序好的数组。
Number
GVT 中对数字的处理主要有千分位格式化和货币格式化,我们的主要的实现方法包括:
public static String formatNumber(String num,ULocale locale)
public static String formatCurrency(String num,ULocale locale)
把一个数字字符串格式化成对应 locale 下的千分位和货币格式,用来做可接受数据的测试。
public static boolean verifyNumber(String num,ULocale locale)
public static boolean verifyCurrency(String num,ULocale locale)
验证一个数字字符串是否符合当前 locale 下的千分位和货币格式,这样编写的目的是用来做输出标准的测试。
OS File
在 GVT 中,关于文件系统的测试主要是对于某些系统特殊的分隔符的测试以及文件路径和文件名中包含某些高风险字符的测试,由于系统特殊分隔符属于操作系统级别,且我们在不同系统编译时能获取到当前的文件分隔符,所以我们这里主要针对后面两种情况的进行讨论。主要的实现方法有: