zoukankan      html  css  js  c++  java
  • 第 10 章 Selenium Grid

    第 10 章 Selenium Grid

    本章介绍 Selenium 家族的另外一位成员——Selenium Grid。它主要用于自动化测试的分布式执行。

    10.1 Selenium Grid 介绍

    Grid 的两个版本的原理和基本工作方式完全相同,但是 Grid2 同时支持 Selenium 1 和 Selenium 2,并且在一些小的功能和易用性上进行了优化,例如指定了测试平台的方式等。
    Grid2 不再提供单独的 jar 包,其功能已经集成到 Selenium Server 中,所以,想要使用 Grid2,就需要下载和运行 Selenium Server。

    10.1.1 Selenium Server 环境配置

    下载、配置和运行 Selenium Server。

    1.下载 Selenium Server
    下载地址:http://www.seleniumhq.org/download/

    通过浏览器打开页面,找到 Selenium Standalone Server 的介绍部分,单击版本号链接进行下载,得到 selenium-server-standalone-xxx.jar 文件。由于 jar 包是用 Java 语言开发的,所以需要在 Java 环境下才能运行。

    2.配置 Java 环境
    Java 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

    小知识:Java 环境分为 JDK 和 JRE 两种。JDK 的全称为 Java Development Kit,是面向开发人员使用的 SDK,它提供了 Java 的开发环境和运行环境。JRE 的全称为 Java Runtime Environment,是 Java 的运行环境,主要面向 Java 程序的使用者,而不是开发者。
    根据操作系统环境选择相应的版本进行下载即可,本书以在 Windows10 下安装 JDK 为例进行介绍。
    双击下载的 JDK 启动安装程序,设置安装路径,这里选择安装到 D:javawebjdk-11.0.8目录下。
    安装完成后,设置环境变量,右击「此电脑」,在右键菜单中单击「属性」→「高级系统设置」→「高级」→「环境变量」→「系统变量」,单击「新建(W)...」按钮,添加名为 JAVA_HOME 和 CLASS_PATH 的环境变量。

    变量名:JAVA_HOME
    变量值:D:Javajdk-11.0.8

    变量名:CLASS_PATH
    变量值:.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar;

    找到「path」变量名,单击「编辑」按钮,追加配置。

    变量名:Path
    变量值:%JAVA_HOME%in;%JAVA_HOME%jrein;

    在 Windows 命令提示符下查看 Java 版本。

    还可以进一步通过输入「java」和「javac」命令验证。

    「java」命令用于运行 class 字节码文件。
    「javac」命令可以将 Java 源文件编译为 class 文件。

    3.运行 Selenium Server
    现在可以通过「java」命令运行 Selenium Server 了。切换到 Selenium Server 所在目录并启动,在 Windows 命令提示符(或 Linux 终端)下启动 Selenium Server。

    10.1.2 Selenium Grid 工作原理

    当测试用例需要验证的环境比较多时,可以通过 Grid 控制测试用例在不同的环境下运行。Grid 主节点可以根据测试用例中指定的平台配置信息把测试用例转发给符合条件的代理节点。例如,测试用例中指定了要在 Linux 上用 Firefox 版本进行测试,那么 Grid 会自动匹配注册信息为 Linux 且安装了 Firefox 的代理节点。如果匹配成功,则转发测试请求;如果匹配失败,则拒绝请求。调用的基本结构如图 10-1 所示

     

    Grid 分布式测试的建立是由一个 Hub(主节点)和若干个 node(代理节点)组成的。Hub 用来管理各个 node 的注册和状态信息,接收远程客户端代码的请求调用,把请求的命令转发给 node 来执行。使用 Grid 远程执行测试代码与直接运行 Selenium 是一样的,只是环境启动的方式不一样,需要同时启动一个 Hub 和至少一个 node

    java -jar selenium-server-standalone-3.13.0.jar -role hub
    java -jar selenium-server-standalone-3.13.0.jar -role node

    上面的代码分别启动了一个 Hub 和一个 node,Hub 默认端口号为 4444,node 默认端口号为 5555。如果想在同一台主机上启动多个 node,则需要注意指定不同 node 的端口号,可以通过下面的方式来启动多个 node。

    java -jar selenium-server-standalone-3.13.0.jar -role node -port 5555
    java -jar selenium-server-standalone-3.13.0.jar -role node -port 5556
    java -jar selenium-server-standalone-3.13.0.jar -role node -port 5557

    通过浏览器访问 Grid 的控制台,地址为 http://127.0.0.1:4444/grid/console。在控制台查看启动的节点信息,如图 10-3 所示

    在启动的 Hub 与 node 都在同一台主机上,如果想在其他主机上启动 node,则必须满足以下要求:

    ● 本地 Hub 所在主机与远程 node 所在主机之间可以用 ping 命令通信。
    ● 远程主机必须安装 Java 环境,因为需要运行 Selenium Server。
    ● 远程主机必须安装测试用例需要的浏览器及驱动文件,驱动文件需要设置环境变量。

    (1)启动本地 Hub 所在主机(IP 地址为 172.16.10.66)

    (2)启动远程 node 所在主机(IP 地址为 172.16.10.34

    设置 node 的端口号为 5555「-hub」参数指定 Hub 所在主机的 IP 地址为 172.16.10.66。 

    参考资料:https://www.cnblogs.com/turbogirllu/p/11282920.html

    10.2 Selenium Grid 应用

    分析 Selenium 源码可以发现,不同浏览器的 WebDriver 最终都继承了 remote 的 WebDriver 类

    该类通过向远程服务器发送命令来控制浏览器。在初始化方法中,command_executor 参数用来指定远程服务器的 URL 或自定义字符串的远程连接,默认为 http://127.0.0.1:4444/wd/hub,4444 为 Grid 的默认监听端口

    10.2.1 Remote 实例

    下面通过 Remote 来运行测试用例。首先,通过 Windows 命令提示符(或 Linux 终端)启动一个 Hub 和一个 node

    然后,通过 Remote 下面的 WebDriver 类(被重命名为了 Remote 类)来启动浏览器并运行测试

    如果在运行上面的代码时抛出 SessionNotCreatedException 异常,则是因为没有指定 desired_capabilities 参数,它用于定义运行的浏览器、版本、平台等信息

    在 Selenium 源代码的../selenium/webdriver/common/desired_capabilities.py 文件中定义了不同浏览器的配置

    修改测试代码如下

    grid_demo_01.py

    from selenium.webdriver import Remote, DesiredCapabilities
    
    # 引用Chrome浏览器配置
    driver = Remote(command_executor='http://192.168.183.1:4444/wd/hub',
                    desired_capabilities=DesiredCapabilities.CHROME.copy())
    driver.get("http://www.baidu.com")
    # ……
    driver.quit()

    这里引用了 DesiredCapabilities 类中 Chrome 浏览器的配置。运行上面的代码即可启动 Chrome 浏览器

    10.2.2 Grid 执行过程

    1.启动 Hub 日志

    Hub 默认会占用本地的 4444 端口号,192.168.183.1 为本机的 IP 地址

    2.启动 node 日志

    启动 node,并指定其端口号为 5555。如果正常启动,提示 node 已经注册到 Hub 上并准备被使用,则同时在 Hub 上会多出一条提示

    Hub 确认已经注册了一个本机端口号为 5555 的 node

    3.执行测试脚本

    Hub 获得创建 session 请求,浏览器为 Chrome,版本未指定

    node 新增日志如下

    node 给 ChromeDriver 发送请求,由 ChromeDriver 驱动 Chrome 浏览器启动,并生成 session ID(730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7。在执行 driver.quit)时,删除该 session ID

    所以,在使用 Grid 之后,整个自动化的执行过程如图 10-4 所示

    图 10-4 使用 Grid 之后的整个自动化执行过程

    10.2.3 创建远程节点

    通过 Windows 命令提示符(或在 Linux 终端)启动一个 Hub

    远程节点以一台 Ubuntu 主机为例,启动命令如下

    其中,192.168.183.1 为 Hub 所属主机的 IP 地址

    运行如下脚本

    grid_demo_02.py
     
    from selenium.webdriver import Remote, DesiredCapabilities
    
    # 引用Firefox浏览器配置
    driver = Remote(command_executor='http://192.168.183.1:4444/wd/hub',
                    desired_capabilities=DesiredCapabilities.FIREFOX.copy())
    driver.get("http://www.baidu.com")
    # ……

    command_executor 参数也可以手动指定 Hub。因为 Ubuntu 默认安装了 Firefox 浏览器(需要为对应的浏览器驱动文件设置环境变量,所以在脚本中指定 Firefox 配置后,Hub 会自动分配满足条件的 node 来运行测试,运行效果如图 10-5 所示

    图 10-5 运行效果

    部分内容来自于学习编程期间收集于网络的免费分享资源和工作后购买的付费内容。
  • 相关阅读:
    vi—终端中的编辑器
    CSS Selector
    转: 通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
    WMI入门教程之WMI中的类在哪里?
    WMI测试器
    WMI Explorer操作 和 powershell命令
    C++ WMI获取系统硬件信息(CPU/DISK/NetWork etc)
    使用C++进行WMI查询的简单封装
    ubuntu版本信息查看
    win10 修改文件夹右击默认打开程序
  • 原文地址:https://www.cnblogs.com/MarlonKang/p/12482037.html
Copyright © 2011-2022 走看看