zoukankan      html  css  js  c++  java
  • selenium

     selenium 是thoughtWorks公司的一个强大的开源Web功能测试工具系列,采用javascript来管理整个测试过程,包括读入测试套件,执行测试和记录测试结果。它采用javascript单元测试工具JSUnit为核心,模拟正式用户操作,包括浏览页面,点击链接,输入文字,提交表单,触发鼠标事件等。并且能够对页面结果进行种种验证。也就是说,只要在测试用例中把预期的用户行为与结果都描述出来,我们就得到了一个可以自动化运行的功能测试套件。Selenium的核心是用javascript写的,他和浏览器进行通行,把测试用例的信息发送给浏览器执行,从而达到自动化测试的目的

           Selenium系列包含4种产品如下:

    1、Selenium Core

         Selenium Core是Selenium的核心,是由javascript和html文件组成,它是selenium IDE和Selenium RC的核心引擎。

    2、Selenium IDE

           Selenium IDE提供了一个浏览器的插件模式,在浏览器的该插件模式下,可以录制和运行脚本。目前只支持Firefox一种浏览器插件

    3、Selenium Remote Control

        selenium RC支持用程序语言编写测试用例,这样做的好处是,可以将selenium与其他测试框架集成。比如testNg,可以把两者集成,用selenium来编写测试用例,用testng实现测试用例的自动化运行

          selenium RC比其他包要大,主要包括以下几个部分:selenium core,selenium server,selenium提供的针对各种语言的类库。selenium core和selenium server运行时都放在selenium-server.jar中。

    4、selenium grid

        他是selenium的一个扩展,也是开源的。他把管理一小撮selenium-rc的事情和为了运行一个测试而廉价一个seleniumserver的事情分开了,实际上,selenium Grid提供了一个hub,像个用于控制测试的远程控制器,但是是显示的将请求发送到一个或多个机器上的某个有效的selenium RC实例上

          我选用了seleniumRC,因为他支持很多浏览器,可以使用java等语言写测试案例,易于维护,同事提供了很好的扩展性。

    selenium RC由两部分组成:

      a、selenium Server: 主要控制浏览器行为,总的来说,selenium server由三部分组成:launcher,http proxy,selenium core,其中selenium core是在selenium server启动浏览器时,嵌入到浏览器中的。selenium core是一堆javascript函数的集合,当selenium rc通过网络与selenium server通讯时,seleniumserver解析客户端请求为selenese command然后就会调用相应的js函数来控制浏览器操作。

    b、selenium libraries:写测试案例时主要控制selenium server库,客户端提供了编程接口,允许你可以通过编程运行selenium命令,client libraries为每一种编程语言提供了selenium RC服务器通讯的编程接口。一个selenium客户端类库时间上是提供一套函数集合,你可以通过运行你的测试程序来运行selenium command,类库中的每一个接口都是和selenium command对应的

       客户端类库通过发送一个selenium command与selenium server通讯,从而使被测应用程序执行相应的操作。客户端类库收到selenium command命令返回结果,并把结果返回给应用程序并赋值给相应的便利。

    三、selenium-RC架构

    1、同源策略:它是由netscape提出的一个著名的安全策略,现在所有的可支持javascript的浏览器都会使用这个策略。所谓同源就是值域名、协议、端口相同。例如浏览器的两个tab1、tab2分别打开了两个页面 A 与B,javascript a1、a2属于A的脚本,b1、b2属于B的脚本。tab1只能运行a1、a2脚本,不允许执行b1、b2脚本,从而防止其他网页对本网页的非法篡改。

    2、selenium RC 运行模式: Heightened Privileges Browsers 和 Proxy Injection

        heightened privileges browser(高特权模式):这种模式与代理模式的工作流程很相似,唯一不同的是,在Heightened privileges browsers模式下,browser对web的请求没有经过http proxy。所以返回的web页面就可能与selenium core不同源了(一般情况下,open都应该只获取“源”下的某个子页面,用open获取其他源的影子在测试中应该是极少数的,因为在这种情况下,我们还应该再new一个新的selenium 进行处理,虽然用open获取其他源的页面出现的机会很少,但是如果真的需要这样的话,也只能启动-proxyInjectionMode模式了,虽然这样的效率会低一些)

      proxy Injection(代理模式):

            a、测试案例(TestCase)通过ClientLib接口向selenium server发送http请求,要求和selenium server建立连接。为什么要通过发送http情况控制selenium server而不采用其他方式呢?从上文中可以看出,seleniumserver是一个独立的中间服务器(确切的说是代理服务器),它可以架设在其他机器上!所以测试案例通过发送HTTP请求去控制selenium server很正常

         b、selenium server的launcher启动浏览器,把selenium core加载入浏览器页面当中,并把浏览器的代理设置为selenium server的http proxy

        c、测试案例通过Client Lib接口想selenium server发送http请求,selenium server对请求进行解析,然后通过heep proxy发送js命令通知selenium core执行操作浏览器的动作

        d、selenium core 接收到指令后,执行操作

        e、浏览器收到新的页面请求信息(因为在d中,selenium core的操作可能引发新的页面请求),于是发送http请求,请求新的web页面。由于selenium server在启动浏览器时做了手脚,所以seleniumserver会接收到所有由它启动的浏览器发送的请求

         f、selenium server接收到浏览器的发送的http请求后,自己重组http请求,获取对应的web页面

         g、selenium server的http proxy把接收的web页面返回给浏览器。

    因为浏览器的同源策略,所有selenium RC中的selenium server需要以这种代理模式运行

  • 相关阅读:
    java
    java
    java
    java
    java
    java
    java
    java
    sed命令的用法
    linux系统产生随机数的6种方法
  • 原文地址:https://www.cnblogs.com/liubingna/p/3421043.html
Copyright © 2011-2022 走看看