zoukankan      html  css  js  c++  java
  • [Selenium] Grid 介绍

    Selenium Grid 支持分布式测试,使测试人员可在分布式环境中进行测试

    一般而言,在面临以下情况时可考虑使用Selenium Grid :

    1.测试多个浏览器或单个浏览器多个版本,或测试不同操作系统上各种浏览器

    2.减少测试套件运行时间

    Selenium Grid 包含一个Hub 和至少一个 Node,两者都可由 selenium-server-standalone.jar 文件启动

    Selenium Grid 的部署

    1.安装Selenium Grid :从Selenium 官网下载 selenium-server-standalone.jar 文件即可。Java 可执行文件的路径必须正确,这样才能从命令行运行文件,如果运行出错,检查系统的路径变量看其是否依据包括Java 可执行文件的路径

    2.启动Selenium Grid :一般而言,运行Selenium Grid 需要先启动Hub,因为 Node 的调用依赖于 Hub

    1、Grid Hub

    1)默认启动 Hub

    用下面的命令可启动默认设置的Hub

    $java -jar selenium-server-standalone-2.37.0.jar -role hub

    所有可支持操作系统都能调用该命令。需要注意的是根据selenium-server-standalone 版本的不同,jar 文件名里的版本号需要有相应改动。Hub 启动的默认端口号为4444,用户可通过 -port 参数来定义其启动端口

    可通过浏览器中输入如下地址来检查 Hub 是否启动成功:

    http://localhost:4444/grid/console

    单击view config 可查看Selenium Grid 的配置信息,默认情况下,单个Hub 支持的最大会话数为5个

    2)配置 Hub 端口

    Hub 默认端口是4444,当自动化测试用例连接到 Selenium Grid Hub 时,监听端口就是TCP/IP 端口,如果机器上已经有另一个程序在使用这个端口,或 selenium-server-standalone 已经被启动,日志会提示端口已经被占用而无法启动Selenium Grid Hub 。

    解决方案之一是关闭正在使用4444端口的程序,解决方案二是让 Selenium Grid Hub 使用另一个端口。在命令行中用 -port 更换 Hub 使用的端口:

    $java -jar selenium-server-standalone-2.37.0.jar -role hub -port 8888

    该方法即使在已有Hub 在机器上运行时也能奏效,只要这两个 Hub 所使用的端口不一样。

    如果想知道机器上所有正在运行的程序使用哪些端口,可用下面命令:

    $netstat -a

    3)JASON 配置文件

    除了在启动命令中指定参数来定制 Hub 的配置,还可以通过预定义好的配置文件来启动 Hub。这些配置信息可写在一个 JASON 格式的配置文件中,示例:

    {

      "host":null,

      "port":4444,

      "timeout":300000,

      "maxSession":5,

      ...

    }

    然后通过在启动命令中添加 -hubConfig 参数来加载该 JASON 配置文件

    $java -jar selenium-server-standalone-2.37.0.jar -role hub -hubConfig

    hub-json-cfg.json

    2、Grid Node

    1)默认启动 Node

    通过如下命令;

    $java -jar selenium-server-standalone-2.37.0.jar -role node -hub

    htttp://localhost:4444/grid/register

    这里假设默认设置的 Hub 已经被启动。Hub 用来监听新请求的默认端口是4444,所以定位 Hub 的URL 中使用了4444这个端口。使用本地主机是假定 Node 和 Hub 在同一台机器上运行。

    如果在不同机器上运行 Node 和 Hub,则需要将本地主机名替换成运行Hub 的机器的主机名。在这种情况下,Node 会将本机操作系统所能支持的浏览器信息全部注册到 Hub 上。

    如果将参数-roal node 替换成 -role webdriver,则表示该 Node只兼容WebDriver 的执行模式。相应的,如果替换成 -role rc,则表示该Node 只兼容 Remote Control 的执行模式

    2)注册 Mac OS X&Opera

    2种方式将Node 注册到 Hub上,第一种是通过命令行的方式添加,只需要加上相应的参数:

    $java -jar selenium-server-standalone-2.37.0.jar -role node -browser "seleniumProtocol=WebDriver, browserName=opera,version=15,maxInstances=1,platform=MAC" -hubHost localhost

    可通过浏览器中输入如下地址来检查 Hub 是否注册成功:

    http://localhost:4444/grid/console

    第二种方式是创建一个 JASON 格式的配置文件,并在启动 Node 时加载该JSON 配置文件

    {

      "class":"org.openqa.grid.common.RegistrationRequest",

      "capabilities":[

        {

          "seleniumProtocol":"WebDriver",

          "browserName":"opera",

          ...

        }

      ],

      "configuration":{

        "maxSession":5,

        ...

      }

    }

    然后通过在启动命令中添加 -nodeConfig 参数来加载该 JASON 配置文件

    $java -jar selenium-server-standalone-2.37.0.jar -role node -nodeConfig

    hub-json-mac-opera.cfg.json

    3)注册 Linux & Firefox

    如果系统中存在多个浏览器版本,则需要指定浏览器的可执行程序路径。本示例设定的配置项如下:

    执行模式为WebDriver,以Firefox 最新版本的路径firefox_binary 为例,maxInstances 设置为2,表示最大支持2个浏览器实例的执行

    $java -jar selenium-server-standalone-2.37.0.jar -role node -browser "seleniumProtocol=WebDriver, browserName=firefox,version=25,firefox_binary=/home/selenium2/firefox25/firefox maxInstances=2,platform=LINUX" -hubHost 192.168.0.104

    4)注册 windos & Internet Explorer

    C:Selenium2> java -jar selenium-server-standalone-2.37.0.jar -role node -browser "seleniumProtocol=Selenium, browserName=iexplore,version=10,maxInstances=4,platform=WINDOWS" -hubHost 192.168.0.104

    5)注册 Android & Chrome

    首先要设置转发端口,命令如下,其作用是确保主机与Android 模拟器或真机可以进行通信

    $./adb -s<serialId> forward tcp:8080 tcp:8080

    如果是在 LInux 环境下操作,可通过如下命令安装 socat 并设置端口转发。其作用是确保在另外一台机器上也可以访问当前机器上的Android WebDriver Server

    $sudo apt-get install socat

    $socat TCP-LISTEN:8889,fork TCP:localhost:8080

    通过上面的设置,就可以在网络上任意一个地方通过如下地址来访问 Android WebDriver Server 了;

    http://hostname:8889/wb/hub

    接下来注册Android 和自带 Chrome 浏览器组合的 Node 到Hub,命令如下,其中端口为8889

     $ java -jar selenium-server-standalone-2.37.0.jar -role node -browser "seleniumProtocol=WebDriver, browserName=android,version=4,maxInstances=1,platform=ANDROID" -port 8889 -hubHost 192.168.0.104

    6)注册 Appium-iOS & Safari

    针对 iOS 平台,这里重点关注如何通过 Appium 这个框架注册 Node 到 Hub 上。可编写一个 JSON 的配置文件,包括相关的操作系统信息、浏览器类型和版本信息等,然后通过 Appium 的命令行方式将该 JSON 配置文件加载进去。JSON 配置文件范例;

    {

      "capabilities":[

        {

          "browserName":"safari",

          "platform":"MAC",

          ...

        }

      ],

      "configuration":{

        "maxSession":1,

        ...

      }

    }

    JSON 配置文件包括2部分:

    1.capabilities:用于配置操作系统、浏览器名称和版本、运行实例等信息。由于org.openqa.selenium.platform 中目前没有官方直接支持 iOS 类型,所以 platform 使用 MAC 即可

    2.configuration: 用于配置与 Hub 交互时的信息

    接下来通过如下命令和参数 --nodecofig 加载写好的 JSON 配置文件;
    $ appium --nodeconfig node-json-appium-ios.cfg.json

    加载成功会看到如下打印信息:

    ...

    info:Responding to client with success...

    7)注册多个不同类型的浏览器

    如果需要在一个 Node 上同时运行多个不同类型的浏览器实例,可通过在JSON  配置文件中将所有能支持的浏览器信息定义进去,然后通过命令行方式一次性加载并将相关信息注册到 Hub 上。JSON 示例:

    {

      "capabilities":[

        {

          "browserName":"firefox",

          "version":23,

          "maxInstances":5,

          "seleniumProtocol":"WebDriver",

        },

        

        {

          "browserName":"firefox",

          "version":3.6,

          "maxInstances":5,

          "seleniumProtocol":"WebDriver",

        },

        {

          "browserName":"chrome",

          "version":28,

          "maxInstances":5,

          "seleniumProtocol":"WebDriver",

        },

        ...

      ],

      "configuration":{

        "maxSession":5,

        ...

      }

    }

    通过如下命令加载JSON 配置文件,并同时注册到 Hub 上

    $ java -jar selenium-server-standalone-2.37.0.jar -role node -nodeConfig node-json-multiple-browsers.cfg.json

    3.编写Grid 的测试用例

    1)对于执行模式为WebDriver 的Node,要使用 RemoteWebDriver 和 DesiredCapatilities 示例代码:

    DesiredCapabilities firefoxCap=DesiredCapabilities.firefox();

    firefoxCap.setBrowserName("firefox");

    firefoxCap.setVersion("25");

    firefoxCap.setPlatform("LINUX");

    WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), firefoxCap);

    如上述代码所示,需通过 DesiredCapabilities 来设置测试用例使用的浏览器名称、浏览器版本和操作系统平台。这样就可以确保该测试用例被Hub 分配到同时满足以上三个条件的 Node 上执行

    2)对应执行模式为 Remote Control 的 Node,则需要使用 DefaultSelenium,示例代码

    Selenium selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.baidu.com");

  • 相关阅读:
    Golang 实现简单的 Web 服务器
    Aliyun linux repo文件
    云服务器查看登录ip和本机出口ip
    10个高效Linux技巧及Vim命令对比
    使用mkfs.ext4格式化大容量磁盘
    LINUX SHELL 多个命令一起执行的几种方法
    GPT分区
    3种方法更改Linux系统的主机名(hostname)
    Nginx代理访问RDS
    Centos7安装Docker
  • 原文地址:https://www.cnblogs.com/feifeidxl/p/4613611.html
Copyright © 2011-2022 走看看