zoukankan      html  css  js  c++  java
  • 配置selenium grid

    本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试。
    运行环境为Windows 10,Selenium版本为 3.5.0,Chrome版本为61,Firefox版本为55

    1. Selenium Grid简介

    Selenium Grid允许你在多台机器的多个浏览器上并行的进行测试,即分布式测试。
    通常,以下两种情况会需要使用Selenium Grid:
    1) 通常多个浏览器的兼容性测试,即在不同浏览器或不同操作系统的浏览器中进行测试
    2) 测试用例较多时,可以通过分布式测试减少测试执行时间 

    2. Selenium Grid结构

    Selenium Grid由一个中心hub及多个节点node组成(类似于其他分布式系统的matser-slave),其中hub用来管理各个node的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求再转发给node来执行。

    3. 环境准备

    由于Selenium Grid的hub及node启动时需要java环境,所以首先需要安装JDK。 

    3.1 JDK环境

    2. 选择Java SE 8u151/ 8u152,点击JDK下载
    3. 安装下载的JDK
    4. 配置系统环境变量 

    3.2 selenium-server-standalone下载

    2. 下载与本机selenium 3.5.0匹配的版本:selenium-server-standalone-3.5.0.jar
     
    2. 拷贝selenium-server-standalone-3.5.0.jar至本地工作目录下,如c:grid

    3.3 webdriver下载

    3.3.1 IE

    2) 下载与selenium版本、系统均匹配的IEDriver版本:IEDriverServer_Win32_3.5.0.zip

    3.3.2 Chrome

    2) 下载与系统及浏览器版本匹配的driver版本:chromedriver_win32.zip

    3.3.3 Firefox

    2) 下载与系统及浏览器版本匹配的driver版本:geckodriver-v0.19.1-win64.zip
     

    driver下载完成解压后,分别拷贝IEDriverServer.exe,geckodriver.exe,chromedriver.exe至Python安装路径(如C:Python27)下即可

    4. Selenium Grid启动

    4.1 启动hub

    hub启动命令如下:
    java -jar selenium-server-standalone-3.5.0.jar -role hub
    其中 -role指定角色为hub,通过下图可以看到:hub已使用默认4444端口启动成功,且node可以通过http://localhost:4444/grid/register/进行注册

    4.2 启动node

    node启动命令可以使用下面两个钟的任意一个:
    java -jar selenium-server-standalone-3.5.0.jar -role node -port 5555 -hub http://localhost:4444/grid/register
    其中 -role指定角色为node, -port指定端口为 5555, -hub指定连接hub地址,通过下图可以看到node已成功连接hub
    或者使用下面的命令:
    java -jar selenium-server-standalone-3.5.0.jar -role node

     同理我们另外启动两个 node(使用端口号分别为5556/5557):

    java -jar selenium-server-standalone-3.5.0.jar -role node -port 5556 -hub http://localhost:4444/grid/register
    java -jar selenium-server-standalone-3.5.0.jar -role node -port 5557 -hub http://localhost:4444/grid/register
     
    此时打开页面http://localhost:4444/grid/console,可以看到我们启动的三个node:

    4.3 更好的启动方法 — bat脚本

    1. 新建一个文件selenium_grid.bat,写入我们刚才启动hub及node的命令:
    cd /d D:grid
    start java -jar selenium-server-standalone-3.5.0.jar -role hub
    start java -jar selenium-server-standalone-3.5.0.jar -role node -port 5555 -hub http://localhost:4444/grid/register
    start java -jar selenium-server-standalone-3.5.0.jar -role node -port 5556 -hub http://localhost:4444/grid/register
    start java -jar selenium-server-standalone-3.5.0.jar -role node -port 5557 -hub http://localhost:4444/grid/register
    1) 第一行是进入并修改当前目录为存放 selenium-server-standalone-3.5.0.jar的目录:D:grid
    2) 后面三行stat java...是分别打开新的cmd窗口用以启动hub及node
     
    2. 双击selenium_grid.bat即可启动hub及node
     
    下面,我们编写一个Selenium Grid自动化测试脚本,分别在3个node上运行Chrome,Firefox及IE浏览器,执行WEB页面自动化测试。
    示例脚本如下:
    例子一:
    使用remote的方式来测试自动运行浏览器:
    from selenium.webdriver import Remote
    
    driver = Remote(command_executor= 'http://192.168.87.1:4444/wd/hub',  #command_executor参数格式是固定的
                    desired_capabilities= {'platform':'ANY',
                                           'browserName':'chrome',        #这个desired_capabilities参数格式也是固定的
                                           'version':'',
                                           'javascriptEnable':True
                                           }
                    )
    
    driver.get('http://www.baidu.com')
    driver.find_element_by_id('kw').send_keys('remote')
    driver.find_element_by_id('su').click()

     例子二:

    我们分别在本机上开启了一个hub 和3个node: 来测试自动运行浏览器

     1 lists = {'http://192.168.87.1:4444/wd/hub':'chrome',
     2          'http://192.168.87.1:5555/wd/hub': 'firefox',
     3          'http://192.168.87.1:5556/wd/hub': 'firefox'}
     4 
     5 for host,browser in lists.items():
     6     print host,browser
     7 
     8     driver = Remote(command_executor=host,
     9                     desired_capabilities={'platform':'ANY',
    10                                           'browserName':browser,
    11                                           'version':'',
    12                                           'javascriptEnabled':True}
    13                     )
    14 
    15     driver.get('http://www.baidu.com')
    16     driver.find_element_by_id('kw').send_keys(browser)
    17     driver.find_element_by_id('su').click()

     例子三:实现在远程的node上运行测试用例

    要想在其他主机上启动node,则必须满足下面的条件:

    (1).本地的hub主机必须与远程的node主机之间可以用ping联通.我用的是虚拟机 需要注意一点的是 需要关闭防火墙才可以ping通对方,否则会不通.

    (2)远程主机必须安装浏览器和webdriver驱动 并且要放在环境变量path目录下

    (3).远程主机必须要安装java环境,并且还需要讲selenium server的jar包放在远程主机本地目录下,因为在调用远程node主机的时候需要在远程主机上运行node

    (4).也要安装python环境

    操作步骤:

    1.启动本地hub主机(本机IP地址为:192.168.87.1)

    2.启动远程node主机(远程主机ip地址为:192.168.31.128)

    设置端口号为5556,指向的hub为主机IP地址:192.168.87.1

    3.修改远程主机的ip地址和端口号,在远程主机上的firefox和Chrome上运行脚本

    lists = {'http://192.168.31.128:5556/wd/hub':'chrome',
             'http://192.168.31.128:5555/wd/hub': 'firefox',
             'http://192.168.87.1:4444/wd/hub': 'firefox'}
    
    for host,browser in lists.items():
        print host,browser
    
        driver = Remote(command_executor=host,
                        desired_capabilities={'platform':'ANY',
                                              'browserName':browser,
                                              'version':'',
                                              'javascriptEnabled':True}
                        )
    
        driver.get('http://www.baidu.com')
        driver.find_element_by_id('kw').send_keys(browser)
        driver.find_element_by_id('su').click()

      现在再来运行脚本,会发现在远程主机上可以看到脚本被运行.

    5. 常见问题

    脚本运行过程中若IE浏览器报错找不到元素,而Chrome及Firefox浏览器正常,原因是IE浏览器的保护模式没有关闭:
    1) 打开IE浏览器,在浏览器的菜单栏上点击“工具”选项,然后点击“Internet选项”
    2) 在“Internet选项”中,切换到“安全”选项,取消“启用保护模式”的勾选
    3) 并且上面四个区域的保护模式都需要关闭
  • 相关阅读:
    硬盘坏道及后续的拯救工作
    Extension GL_VERSION_1_2 could not be loaded.
    js显示当前的年月日时分秒
    如何删除桌面上的回收站?
    Fedora 15 U盘 安装心得
    庄子·内篇·逍遥游
    Additional Oracle Performance Extensions
    Features Specific to JDBC OCI Driver
    OracleDatabase 配置
    vim字符编码设置
  • 原文地址:https://www.cnblogs.com/stephenmc/p/7892878.html
Copyright © 2011-2022 走看看