背景:

1、 UI自动化测试用例, 可能想要在不同版本、不同浏览器下执行

2、 UI自动化测试用例较多的时候,耗时时间长,这个时候可以通过分散在不同的机器上执行,减少自动化测试时间

实现

通过selenium grid来实现分布式测试,其整个结构有一个hub的主节点和若干个node代理节点组成。hub用来管理各个子节点的注册和状态信息(包括启动配置的信息),并接收远程客户端代码的请求调用,然后把请求的命令再转发给代理的节点执行。使用grid远程执行的代码与直接调用selenium server是一样的,只是环境启动的方式不一样,需要同时启动一个hub和至少一个node

两种启动方式

1、本地启动hub,和两个node节点;直接看 实践_本机启动一个hub和两个node

2、本地作为客户端连接,局域网内的机器作为grid的服务器,启动hub和node节点;可直接看:实践_本机远程调用已启动的grid节点(局域网)

环境配置:

1.下载selenium server,地址:https://www.seleniumhq.org/

2.由于运行jar需要有对应的java环境,所以提前需要有java环境,java环境配置详见:https://blog.csdn.net/weixin_37579123/article/details/83855873;根据jdk环境,选择对应版本的selenium-server-standalone-xxx.jar ;

不同机器上部署node节点

链接:https://www.jianshu.com/p/561e9703bb36

实践_本机启动一个hub和两个node

本机机器,启动一个hub,一个chrome和firefox的子节点,就是启动一个hub和两个node

启动hub

已经下载了selenium-server-standalone-3.11.0.jar的jar包,windows在当前文件夹,使用cmd回车进到命令窗口

使用命令:

-role hub: 为hub,主节点

java
-jar D:\XXXXjar包路径\jar\selenium-server-standalone-3.11.0.jar -role hub

启动成功

Nodes should register to http://192.168.8.146:4444/grid/register/:node节点启动的时候要注册到这个地址

Clients should connect to http://192.168.8.146:4444/wd/hub
客户端连接使用,要连接到这个地址(局域网ip使用)

子节点node注册到当前hub后,会输出日志

或者可在浏览器输入:http://localhost:4444/grid/console,查看已经注册的节点

点击configuration,可以看到node浏览器的配置信息

启动node(子节点)-chrome

使用命令:

-role node:表示启动的是node节点

-port 5555:指定node节点端口

-hub http://192.168.1,79:4444/grid/register:表示hub机的注册地址

-maxSession 5:node节点最大会话请求

-version:浏览器版本,和当前浏览器版本一致,否则调不起驱动

-browser browserName=chrome,seleniumProtocol=WebDriver,maxInstances=5:=设置浏览器的参数,browserName表示浏览器名字,如chrome、firefox、ie;maxInstances表示最大实例,可以理解为最多可运行的浏览器数,这个值很关键,不能大于前面maxSession的值,否则可能会出错

原文链接:https://blog.csdn.net/LuoDZHDA/article/details/123402564

命令:

java
-jar D:\XXXjar包路径\selenium-server-standalone-3.11.0.jar -role
node -port 4445 -hub http://192.168.8.146:4444/grid/register -maxSession 5
-browser browserName=chrome,version=103,seleniumProtocol=WebDriver,maxInstances=5

启动成功:

日志输出:

Selenium Grid node
is up and ready to register to the hub

The node is
registered to the hub and ready to use

启动第二个node_firefox

启动第二个node的注册地址一样,端口号不能重复,设置的是firefox浏览器,浏览器版本和当前版本一样,当前环境要有火狐的驱动文件

使用命令:

java -jar D:\XXXXjar包地址\selenium-server-standalone-3.11.0.jar
-role node -port 4446 -hub http://192.168.8.146:4444/grid/register -maxSession
5 -browser
browserName=firefox,version=102,seleniumProtocol=WebDriver,maxInstances=5

客户端远程连接hub

# 火狐远程连接,从配置的capabilities中,获取浏览器的配置信息,然后从当前主的hub,查找配置信息一样的子节点grid执行
capabilities = {
"browserName": "chrome", # firefox
"seleniumProtocol": "WebDriver",
"maxInstances": "5",
"maxSession": "5",
"version": "103"}
driver = webdriver.firefox.webdriver.RemoteWebDriver(command_executor="http://192.168.8.146:4444/wd/hub",desired_capabilities=capabilities)
driver.get("https://www.baidu.com/")
print("grid test is ok")
driver.quit()

如代码设置的是远程连接firefox火狐浏览器,填写的配置信息和启动的node信息一样

如果客户端配置的信息和启动node的不一样,hub获取到请求,去查找的时候,会查不到

客户端配置的信息和启动的node一样,hub去查找对应node,将代码发送到node执行

node接收到hub转发的代码:

实践_本机远程调用已启动的grid节点(局域网)

背景

本机机器作为客户端,调用同一个局域网下,其他机器下,已经启动的grid节点

搭建方式和前面本机搭建一样,不同的是,环境不同,搭建的grid是一样的操作

客户端:本机:192.168.8.146

Grid节点机器(远程机器):虚拟机:192.168.8.212

准备条件

同一局域网下的机器:虚拟机中的windows10

A. 已安装好Java,且已配置环境变量

B. 已安装对应的浏览器和驱动,如谷歌浏览器和驱动

C. 已下载selenium sever的jar

D.启动当前机器的hub和子节点node(子节点注册地址为hub的地址),将命令写在bat文件,如果新的机器,需要更新selenium-server-standalone-3.11.0.jar包的位置

操作步骤

虚拟机操作(远程机器)

虚拟机器中,要使用selenium grid的必须安装的软件和启动的文件

当前虚拟机下,启动主的hub,会打印出客户端访问的地址和node注册的地址

Clients should connect to http://192.168.8.212:4444/wd/hub

Nodes should register to  http://192.168.8.212:4444/grid/register/

当前虚拟机下,关联主的hub进行注册,启动,等待主的hub接收远程的命令,并转化命令到node

客户端使用代码访问(本机)

虚拟机启动grid的成功后,获取到客户端访问地址是:http://192.168.8.212:4444/wd/hub

客户端启动代码后,会访问到虚拟机的grid节点,根据配合的浏览器的配置信息,查找符合要求的node,执行代码,如果找不到,检查代码中的浏览器的配置信息和node启动的是否一样

主的hub接收到请求,根据请求的Capabilities,查找符合要求的node

Node机接收到命令,执行

完整的代码

# 火狐远程连接,从配置的capabilities中,获取浏览器的配置信息,然后从当前主的hub,查找配置信息一样的子节点grid执行
capabilities = {
"browserName": "chrome", #firefox
"seleniumProtocol": "WebDriver",
"maxInstances": "5",
"maxSession": "5",
"version": "103"} # 虚拟机(远程机器的grid):http://192.168.8.212:4444/wd/hub
# 本机:http://192.168.8.146:4444/wd/hub
driver = webdriver.firefox.webdriver.RemoteWebDriver(command_executor="http://192.168.8.212:4444/wd/hub", desired_capabilities=capabilities)
driver.get("https://www.baidu.com/")
print("grid test is ok")
driver.quit()

使用selenium grid实现下发任务到远程机器,远程执行测试用例的更多相关文章

  1. jenkins 登录远程机器并执行脚本,脚本中有后台执行的程序无法执行解决方法。

    jenkins构建shell执行配置 在远程shell脚本中,需要后台执行的命令需要以$( )括起来

  2. 【原创】python+selenium,用xlrd,读取excel数据,执行测试用例

    # -*- coding: utf-8 -*- import unittest import time from selenium import webdriver import xlrd,xlwt ...

  3. 用SSH登录远程的机器,在远程机器上执行本地机器上的脚本

    假设本地的机器IP为10.245.111.90,我们想要在10.245.111.93上执行一个保存在10.245.111.90上的脚本. 经过测试通过的命令如下: ssh root@10.245.11 ...

  4. Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试

    最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做 ...

  5. Selenium Grid分布式测试入门详解

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

  6. 配置selenium grid

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

  7. Selenium Grid的原理、配置与使用(转)

    Selenium GridSelenium Grid在前面介绍Selenium的时候说过它有三大组件,Selenium Grid就是其中之一而作用就是分布式执行测试.讲分布式之前还是要说说UI自动化的 ...

  8. jenkins中通过Publish Over SSH将项目部署到远程机器上

    Publish Over SSH插件使用在使用Publish Over SSH之前,需要制作SSH私钥.机器间做免密登录配置.假设机器A,ip为192.168.AA.AAA,机器B: 192.168. ...

  9. 浩若烟海事半功倍|利用Docker容器技术构建自动化分布式web测试集群Selenium Grid

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_195 "世界上有那么多城市,城市里有那么多的酒馆,可她,却偏偏走进了我的-",这是电影<卡萨布拉卡> ...

  10. 搭建selenium grid简单配置

    1.使用selenium提供的服务端独立jar包 :服务端.客户端都是运行于java7环境. 2.启动hub: hub配置文件如下: Java -jar selenium-server-standal ...

随机推荐

  1. [Trading] 买卖如何移动 ( 影响 ) 市场价格

    大多数人都知道市场价格的变化是因为买卖行为,但却没有多少人了解买卖行为是如何影响市场价格的. 乍一看,这可能令人困惑,因为每一笔市场交易都要求总有一个买家和一个卖家. 首先,重要的是要明白市场上总是有 ...

  2. vue使用websoket(非封装)

    上代码: create:function(){ this.initWebpack() } methods:{ initWebpack(){//初始化websocket           let us ...

  3. PHP游戏线下线上陪玩平台APP小程序H5源码开发多少钱?可用于家政,陪诊,陪伴服务等

    做陪玩app项目,不少创业者们都比较头疼该如何去选择软件系统!目前软件市场上,陪玩app平台的软件系统五花八门,价位也是参差不齐.创业者们都比较纠结是定制开发,还是选择开元源码二次开 发? 前两天成都 ...

  4. 【内存优化】Oracle 的SGA与Linux的shmall和shmmax的关联

    查看linux下的Oracle共享内存段 [oracle@oradb ~]$ ipcs -m ------ Shared Memory Segments -------- key shmid owne ...

  5. 01.Markdown 语法

    标题 # 一级标题 ## 二级标题 ### 三级标题 ...(最多六级标题) 字体 **hello**:粗体 *hello*:斜体 三个*:粗体+斜体 ~~hello~~:删除线 引用 > 引用 ...

  6. go-zero goctl命令图解

  7. fastposter v2.9.0 程序员必备海报生成器

    fastposter v2.9.0 程序员必备海报生成器 fastposter海报生成器是一款快速开发海报的工具.只需上传一张背景图,在对应的位置放上组件(文字.图片.二维.头像)即可生成海报. 点击 ...

  8. JDK源码阅读-------自学笔记(四)带标签的break和continues

    "标签"是指后面跟一个冒号的标识符,例如:"label:".对Java来说唯一用到标签的地方是在循环语句之前.而在循环之前设置标签的唯一理由是:我们希望在其中嵌 ...

  9. golang nsq 同一个topic有多个channel,同时项目又互相引用时出现的问题

    p.p1 { margin: 0; font: 12px ".PingFang SC" } span.s1 { font: 12px "Helvetica Neue&qu ...

  10. 使用 TestContainers 进行数据库集成测试

    在软件开发过程中,集成测试是至关重要的一环.它确保不同组件之间的协作正常,并验证系统在整体上的功能和性能.然而,传统的集成测试往往需要依赖于外部资源,如数据库.消息队列等,这给测试环境的搭建和维护带来 ...