暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Selenium Grid 分布式自动化测试-1

432


selenium-Grid的定义


Selenium-Grid允许您在不同的机器上并行地针对不同的浏览器运行测试。也就是说,针对运行不同浏览器和操作系统的不同计算机同时运行多个测试。从本质上讲,Selenium-Grid支持分布式测试执行,它采用Hub和Node模式。它允许在分布式测试执行环境中运行测试。




selenium Hub用来管理各个selenium Node的注册信息和状态信息,并且接收远程客户端代码的测试调用请求,并把请求命令发送给符合要求的selenium Node执行。


Selenium Grid工作原理


Selenium Grid实际它是基于Selenium RC的,而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成。Hub用来管理各个代理节点的注册信息和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令转发给代理节点来执行。下面结合环境部署来理解Hub与node节点的关系。



Selenium Grid 配置与安装


1.安装java


为了更好的讲解并演示、我将我自己的jdk卸载了重新安装一遍、首先我进入公司的共享资源



文档中拿到了我想要的jdk、拷贝到自己的电脑上、我也给大家准备了现在路径。


https://www.jdkdownload.com/



官网需要科学上网可能大家都无法进入所以给大家分享一个这个下载地址


进入后按照自己的版本进行下载建议jdk8以上、进行下载exe或者zip、目前是在windows系统上进行搭建环境、之后也会出linux版本及docker版本。



现在完后进行安装jdk


1.1 安装jdk



更改安装目录



开始安装了、很简单




再次修改安装目录、不能是相同目录 这次是安装sdk可以无需安装



1.2 配置环境变量


JAVA_HOME  = jdk安装的目录指定到bin目录



JRE_HOME = 与上面一样指定到jre目录下



进行确定保存后在path系统变量中添加


%JAVA_HOME%


%JRE_HOME%\bin


保存后进行验证java是否安装成功且变量配置成功


java -version



出现上面内容上面安装成功



2.下载 selenium-server-standalone-2.53.1.jar


下载地址:http://selenium-release.storage.googleapis.com/index.html



进行选择需要下载的版本




下载后进行进入下载目录、为了更好的使用命令行我们可以将.jar的文件名称修改为selenium-server也可以不进行修改




我们简单的使用一下


3.启动selenium-server hub


进行打开dos命令窗口需要在.jar文件目录下进行输入一下命令

    java -jar selenium-server.jar -role hub -maxSession 10 -port 4444
    复制


    参数简单介绍


    -jar 进行让java指定本次启动的是一个jar包


    -role 为指定当前的机器的角色(hub/node)


    -maxSession 为最大会话请求,这个参数主要要用并发执行测试用例,默认是1,建议设置10及以上。


    -port 设置端口



    运行起来了我们可以在浏览器中使用命令窗口显示的url地址



    http://192.168.5.113:4444/grid



    能打开就是正常启动了


    下面我们进行加入node机器


    一样的在需要的node机器上安装java与selenium-server



    下面我们来启动一下node机、hub机器与node机器可以是同一台机器


      java -jar selenium-server.jar -role node -port 5555 -hub http://192.168.0.245:4444/grid/register -maxSession 5 -browser browserName=firefox,seleniumProtocol=WebDriver,maxInstances=5 ,platform=WINDOWS,version=45.0.2
      复制

      复制

      运行成功



      可以看到连接的数量 http://192.168.5.113:4444/grid/register




      这样我们的selenium grid 环境就基本搭建完成了、比较简单;



      Selenium Grid使用


      我们现在需要代码实现了


      实例1

        from selenium import webdriver
        import os
        #
        chrome_driver = os.path.abspath(r"D:\node\chromedriver.exe")
        os.environ["webdriver.chrome.driver"] = chrome_driver
        chrome_capabilities = {
        "browserName": "chrome", # 浏览器名称
        "version": "", # 操作系统版本
        "platform": "ANY", # 平台,这里可以是windows、linux、andriod等等
        "javascriptEnabled": True, # 是否启用js
        "webdriver.chrome.driver": chrome_driver
        }
        driver = webdriver.Remote("http://192.168.5.113:8888/wd/hub", desired_capabilities=chrome_capabilities)
        # driver.set_window_size(1280,720)\
        # driver = webdriver.Chrome()
        driver.get("http://www.baidu.com")
        print(driver.title)
        driver.quit()
        复制


        运行后就可以正常启动浏览器执行分布式浏览器执行了;



        selenium grid 进阶


        什么时候用Selenium Grid

        • 同时在不同的浏览器、操作系统和机器上运行测试。最大程度用于兼容性测试

        • 减少运行时间

        怎样启动Selenium Grid?

        启动Selenium Grid
        的三种方式,一种直接用命令行,另一种用JSON
        配置文件,最后一种docker
        启动。


        json 文件配置详解

        hub机配置

          {  
          "host": null,
          "port": 4444,
          "newSessionWaitTimeout": -1,
          "servlets" : [],
          "prioritizer": null,
          "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
          "throwOnCapabilityNotPresent": true,
          "nodePolling": 5000,


          "cleanUpCycle": 5000,
          "timeout": 300000,
          "browserTimeout": 0,
          "maxSession": 5
          }
          复制


          复制

          hub 全部参数详解


          参数

          描述

          实例

          port

          宿主机端口

          hub端口

          newSessionWaitTimeout即没有超时;指定一个新的测试session等待执行的间隔时间。即一个代理节点上前后2个测试中间的延时时间,单位为毫秒默认-1
          servlets在hub上注册一个新的serlet访问地址为/grid/admin/XXXserlet
          throwOnCapabilityNotPresent如果为true则hub只有在当前有测试代理注册的情况下才会接受测试请求;如果为false则如果当前没有代理注册也会接受请求保存到队列直到有代理注册为止。默认为true
          capabilityMatcher

          一个实现了CapabilityMatcher接口的类,默认指向org.openqa.grid.internal.utils.DefaultCapabilityMatcher;该类用于实现grid在分布测试任务到对应代理时所使用的匹配规则,如果想要更精确的测试分配规则,那么就注册一个自己定义的匹配类。

          默认无需修改

          prioritizer一个实现了Prioritizer接口的类。设置grid执行test任务的优先逻辑默认为null,先来先执行
          host指定hub机的ip或者host值

          browserTimeout

          浏览器无响应的超时时间
          timeout所有浏览器运行超时时间,运行超过此时间则会自动回收session,关闭浏览器

          cleanupCycle

          代理节点检查超时的周期



          node注册

            {
            "capabilities":
            [
            {
            "browserName": "firefox",
            "maxInstances": 10,
            "seleniumProtocol": "WebDriver"
            },
            {
            "browserName": "chrome",
            "maxInstances": 10,
            "version": "82.0.3684.1",
            "wedriver.chrome.driver":"chromedriver.exe",
            "seleniumProtocol": "WebDriver"
            },
            {
            "browserName": "internet explorer",
            "maxInstances": 1,
            "seleniumProtocol": "WebDriver"
            }
            ],
            "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
            "maxSession": 10,
            "port": 5555,
            "register": true,
            "registerCycle": 5000,
            "hub": "http://192.168.1.107:4444",
            "nodeStatusCheckTimeout": 5000,
            "nodePolling": 5000,
            "role": "node",
            "unregisterIfStillDownAfter": 60000,
            "downPollingLimit": 2,
            "debug": false,
            "servlets" : [],
            "withoutServlets": [],
            "custom": {}
            }
            复制

            复制

            node json及全部参数详解

            参数

            描述

            实例

            port

            节点机端口

            node端口

            browserName

            节点机启动浏览器的名称

            这个就是设置浏览器的参数啦,这个很重要;browserName表示浏览器名字,如chrome、firefox、ie;,这个值很关键,不能大于前面的值,否则可能会出错;

            version

            表示浏览器版本


            platform

            表示操作系统

            ANY为默认、这里可以是windows、linux、andriod等等

            role

            机器角色


            maxSession

            为最大会话请求,这个参数主要要用并发执行测试用例,默认是1,建议设置10及以上。

            默认-1
            servlets在hub上注册一个新的serlet访问地址为/grid/admin/XXXserlet

            maxInstances

            表示最大实例,可以理解为最多可运行的浏览器数


            nodeTimeout

            客户端的无心跳超时时间


            hub

            hub机地址ip


            nodePolling

            hub检查代理节点的周期


            unregisterIfStillDownAfter

            单位毫秒,设定代理节点在无响应多长时间后hub才会注销代理节点注册信息

            默认1分钟

            registerCycel

            代理节点自动重新注册的周期,单位毫秒;适应于重启了hub时不需要重启所有的代理节点。



            命令行

              java -jar selenium-server.jar -role hub -hubConfig hubconfig.json
              java -jar selenium-server.jar -role node -hubConfig nodeconfig.json
              复制

              复制


              下一章进行全面实战演示

              1.分布式实战

              2.linux搭建分布式环境


              文章转载自测试前沿布道者,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论