代码改变世界

菜鸟学自动化测试(七)----selenium RC 工作原理

2012-02-01 23:30  虫师  阅读(13886)  评论(2编辑  收藏  举报

 

 

关于selenium RC环境搭建(基于java语言),我在系统的学习selenium之前就已经做了,并在我的这个系列的文章中可以找到。那是照着一位前辈的视频操作完成的,我详细的记录的操作步骤。

在这里我们一起了解一下selenium RC的工作原理。

 

简介

那么之前学习的了selenium IDEselenium命令,那么是不是我们用selenium IDE就可以完成我们的所有自动化测试工作了呢?No !Selenium IDE 没我们认为的那么强大,在实际的项目中会有各种复杂的操作,如条件判断、循环、读写文件、查询数据库和Email邮寄测试报告。这些都不是selenium IDE简单的录制就能完成的。

Selenium RC可以适应更复杂的自动化测试需求,而不仅仅是简单的浏览器操作和线性执行。Selenium RC 能够充分利用编程语言来构建更复杂的自动化测试案例。

 

Selenium RC工作原理

 

那么Selenium RC组件是如何运转的,以及他们在测试案例运行过程中扮演什么角色。

 

 

 

  

说明客户端库文件将命令传递给server。接着server使用selenium-CorejavaScript命令传递给浏览器,浏览器会使用自带的javaScript翻译器来执行selenium命令。这意味着测试脚本中的selenese操作和验证将被执行。

 

 

* Selenium server

它负责启动和关闭浏览器,解释和运行从测试程序传来的selenese命令,就像HTTP代理一样,截取和验证浏览器与待测应用(AUT)之间的HTTP消息。

 

在测试程序打开浏览器时(使用客户端库文件的API函数),RC server绑定 selenium Core并自动将它嵌入到浏览器中。selenium Core是一个javaScript程序,实际上市一系列javaScript函数,它们使用浏览器内置的javaScript翻译器来翻译和执行selenese命令。

* 客户端文件

 

客户端库文件提供编程接口。允许你使用自己编写的程序来运行selenese命令,对于不同的语言都有对应的客户端库文件。类似于数据库方言包的概念,如果你想用java操作数据库,对于不同的数据库,需要导入不同的数据库驱动jar文件,mysqlmysql的方言包,DBDB的方言包。

 

客户端库文件获取一条selenise命令,并将它传递给selenium Server ,以便执行一个指定操作或者基于待测应用(AUT)进行测试。客户端库文件收到命令的执行结果,在将其传给你的测试程序。程序接收到结果后,将它保存在变量中。接着报告成功还是失败,如果结果是意料之外的失败,还能有针对性地采取正确措施。

 

因此要创建测试程序,你只要使用客户端库文件的API来编写程序,程序会去运行一系列selenium命令,当然selenium IDE录制的内容生成selenese测试脚本,可以转换成不同测语言脚本。

 

 

Selenium RC 架构

 

下面我们来了解隐藏在selenium RC背后的技术实现。要了解selenium RC Server 工作的细节,需要我们理解下面几个概念。

 

1. 同源规则

Selenium面临的主要限制就是同源规则,市场上的每一款浏览器都应用了这一安全限制。其目的是确保一个站点的内容不会被另一个站点的脚本所访问。同源规则专注于确保浏览器加载的任何代码,都只能在同一站点内部进行操作。假如你在一个浏览器的一个选项卡内打开了一个网上银行的页面(www.yinhang.com)。又在另选项卡上不小心打开了一个挂马的页面(www.guama.com),那么挂马的页面是不能操作网上银行页面的内容,因为引入了同源规则。所以,他们不能相互作用。如果不引入同源规则,我们可以想象用户很生气,后果很严重。

 

要在这一规则下工作,selenium Core必须与待测系统在同一源中。在历史上,selenium Core被这一问题所限制,因为它是用javaScrpt实现的。但是selenium RC 没有被同源规则所限制,它使用selenium Server作为单利来回避这一问题,“哄骗”浏览器,让浏览器以为自己在server提供的单一站点上工作。

同源:相同的协议、端口、域名

 

感兴趣的同学google“同源规则”和“XSS(跨站点执行脚本)”相关技术

 

2. 代理注入

 

selenium 用来规避同源规则的第一种方法是代理注入,在代理注入模式下,selenium Server 像客户端配置的HTTP代理一样工作,它位于浏览器和待测系统之间。接着其伪造待测系统的URL(集成selenium Core 和一系列测试案例并加以传递,它们就像同源一样)

 

代理作为第三者,在双方间传递信息,它表现的像一个“web服务器”,想浏览器传递待测系统。作为代理selenium Server ,它拥有篡改待测系统真实URL的能力。

 

浏览器启动时,使用配置的profile,其中已经设置localhost:4444作为HTTP代理,这就是为什么任何来自浏览器的HTTP请求都会经过selenium Server,而且HTTP响应也来自selenium Server而非真实的服务器。

 

 

 

(1)客户驱动与selenium RC Server之间建立起一个链接。

(2)Selenium RC Server 启动浏览器,并在浏览器加载页面中注入了Selenium Core javaScript

(3)客户端驱动给Server传递一条Selenese命令

(4)客户端驱动个Server解释命令,并触发对应的javaScript在浏览器中执行。

(5)Selenium Core指示浏览器执行第一条指令,例如打开一个待测系统页面。

(6)浏览器接收到打开请求后,向Selenium RC Server(作为浏览器的HTTP代理),要求web站点内容。

(7)Selenium RC Serverweb服务器通信,请求页面,并且一旦收到响应就将页面传递给浏览器,但它会篡改源,是页面看上去好像来自于与selenium Core同源的服务器。

(8)浏览器接收到web页面后,就在保留的框架\窗口中展示页面。

 

3. 提高浏览器权限

 

这一方式下的工作流与代理注入十分相似,区别在于浏览器以特殊模式-------“高特权模式”启动。它允许浏览器做一些通常不被允许的事情,如XSS。通过这个浏览器模式,Selenium Core 可以直接带卡待测系统,并读取和操作其中的内容,而不需要通过Selenium RC Server来传递整个待测系统。

 

 

(1)客户驱动与selenium RC Server之间建立起一个链接。

(2)Selenium RC Server启动浏览器,其实用的URL会在页面中加载 Selenium Core

(3)Selenium Core 从客户端启动得到第一条指令(通过Selenium RC Server

(4)Selenium Core 执行第一条指令。

(5)浏览器接到打开请求,向web服务器请求页面,一旦浏览器接收到web页面后,就在保留的框架\窗口中展示页面。

===========================================================================

图不优雅,但也是自己花费一个多小时画的。

关于selenium RC 的工作原理。没有hyddd将的好,也没他理解的深入。但也算是自己小小的总结。

http://www.cnblogs.com/hyddd/archive/2009/05/30/1492536.html 欢迎参考hyddd的博客学习selenium

Web Page Counters
Computer Desks