本文中主要使用的测试工具为 selenium Remote Core(Selenium RC),因此本文以下主要以 selenium RC 为例介绍 selenium 的技术原理及与 RFT 结合使用的实现方法。
从图 1 可以看出,Selenium RC 主要由 Selenium Server 和 Client Libraries 两部分组成。图 1 给出了 Selenium 的原理框架图。
Selenium Server:Selenium Server 负责控制浏览器的操作。Selenium Server 主要包括 3 个部分:Launcher,Http Proxy,Selenium Core。其中 Selenium Core 是被 Selenium Server 嵌入到浏览器页面中的,这样操作的目的可以使其实现同源策略。其实 Selenium Core 是一堆 Java Script 函数的集合,是通过这些 Java Script 函数,我们才可以实现用程序对浏览器进行各种操作。
Client Libraries:Client Libraries 为程序设计语言与 Selenium RC server 提供了一个接口,可以调用各种程序设计语言,来实现自动化测试的要求。
图 1. Selenium 原理框架图
Selenium RC 的工作原理,图 2 给出了 Selenium RC 的工作原理图。
测试用例通过 Client Libraries 的接口向 Selenium Server 发送 Http 请求,和 Selenium Server 建立连接。
Selenium Server 的 Launcher 启动浏览器,把 Selenium Core 加载到浏览器页面中,并把浏览器的代理设置为 Selenium Server 的 Http 代理协议。
测试用例通过 Client Libraries 的接口向 Selenium Server 发送 Http 请求,Selenium Serve 对请求进行解析,然后通过 Http 代理发送 JavaScript 命令通知 Selenium Core 执行操作浏览器的动作。
Selenium Core 接收到 JavaScript 命令后,执行相应的操作。
浏览器收到新的页面请求信息,而后发送 Http 请求,要求新的 Web 页面。由于 Selenium Server 在启动浏览器时已做了相应的操作,所以 Selenium Server 会接收到所有由它启动的浏览器发送的请求。
Selenium Server 接收到浏览器的发送的 Http 请求后,自己重组 Http 请求,获取对应的 Web 页面。
Selenium Server 的 Http 代理把接收的 Web 页面返回给浏览器。
图 2. Selenium 工作原理图
下面为了详细说明 Selenium 具体的实现方法,清单 1 给出了一个用 Selenium 提供的方法实现百度搜索的实例代码,代码应用的语言为 Java。
清单 1. 基于 Java 语言的 Selenese 开发代码
ant; padding-left: 2px; padding-right: 2px; font-family: arial, nsimsun, sans-serif; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 2px">
package com.example.tests;
import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;
public class Test extends TestCase {
public void setUp() throws Exception {
setUp("http://www.baidu.com/", "*firefox");}
public void testone() throws Exception {
selenium.open("/");
selenium.type("ibm", "selenium rc");
selenium.click("btnG");
selenium.waitForPageToLoad("10000");
assertTrue(selenium.isTextPresent("Results * for selenium rc"));
}
}
RFT 技术简介
IBM Rational Functional Tester (RFT) 是一款先进的,具有自动化测试的功能的回归测试工具,它适合测试人员和 GUI 开发人员。Rational Functional Tester 的基础是针对于 Java、.NET 的对象技术和基于 Web 应用程序的录制、回放功能。工具为测试者的活动提供的自动化的帮助,如数据驱动测试。它既包括了简单的适合一般测试人员的 Record 和 Replay 模式,又包括了适合自动化开发人员的脚本语言模式,实现了各种高级定制功能。同时,它为 Java 和 Web 测试人员,提供了和开发人员同样的操作平台 (Eclipse),并通过提供与 IBM Rational 整个测试生命周期软件的完美集成,真正实现了一个平台统一整个软件开发团队的能力 , 同时也方便了与其他测试工具集成,使之能够完成更加强大的测试功能。
下面将简单介绍 RFT 的工作原理:
工作原理 1:在 Record 和 Replay 模式下 , 如图 3 中所示,当 RFT 测试脚本开发人员在 test script 中,通过调用组件对象 Test Object 的方法对该组件进行操作的过程中,该 Test Object 会查找到与其对应的 Test Object Proxy 对象,从而使用 Test Object Proxy 来对该 Test Object 进行获取和操作。
图 3. RFT 原理结构图