使用selenium grid实现下发任务到远程机器,远程执行测试用例
背景:
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实现下发任务到远程机器,远程执行测试用例的更多相关文章
- jenkins 登录远程机器并执行脚本,脚本中有后台执行的程序无法执行解决方法。
jenkins构建shell执行配置 在远程shell脚本中,需要后台执行的命令需要以$( )括起来
- 【原创】python+selenium,用xlrd,读取excel数据,执行测试用例
# -*- coding: utf-8 -*- import unittest import time from selenium import webdriver import xlrd,xlwt ...
- 用SSH登录远程的机器,在远程机器上执行本地机器上的脚本
假设本地的机器IP为10.245.111.90,我们想要在10.245.111.93上执行一个保存在10.245.111.90上的脚本. 经过测试通过的命令如下: ssh root@10.245.11 ...
- Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试
最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做 ...
- Selenium Grid分布式测试入门详解
本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试. 运行环境为Windows 10,Selenium版本为 3.5.0,Chr ...
- 配置selenium grid
本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试. 运行环境为Windows 10,Selenium版本为 3.5.0,Chr ...
- Selenium Grid的原理、配置与使用(转)
Selenium GridSelenium Grid在前面介绍Selenium的时候说过它有三大组件,Selenium Grid就是其中之一而作用就是分布式执行测试.讲分布式之前还是要说说UI自动化的 ...
- jenkins中通过Publish Over SSH将项目部署到远程机器上
Publish Over SSH插件使用在使用Publish Over SSH之前,需要制作SSH私钥.机器间做免密登录配置.假设机器A,ip为192.168.AA.AAA,机器B: 192.168. ...
- 浩若烟海事半功倍|利用Docker容器技术构建自动化分布式web测试集群Selenium Grid
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_195 "世界上有那么多城市,城市里有那么多的酒馆,可她,却偏偏走进了我的-",这是电影<卡萨布拉卡> ...
- 搭建selenium grid简单配置
1.使用selenium提供的服务端独立jar包 :服务端.客户端都是运行于java7环境. 2.启动hub: hub配置文件如下: Java -jar selenium-server-standal ...
随机推荐
- [Go] httprouter 自动 OPTIONS 响应 和 CORS
httprouter 是 Gin framework 使用的路由组件. 要对 OPTIONS 请求自动响应,比如支持 CORS 请求或者设置请求头,可用 Router.GlobalOPTIONS. r ...
- dotnet C# 通过 Vortice 将 ID2D1CommandList 作为特效的输入源
使用 Direct2D 过程中将可以使用到 Direct2D 强大的特效功能,比如给某些界面绘制内容添加特效支持.本文将告诉大家如何通过 Vortice 将 ID2D1CommandList 作为特效 ...
- 第3讲-Cadence分裂元件的制作方法
笔记3-Cadence分裂元件的制作方法 1.Homogeneous和heterogeneous的区别: 2.创建homogeneous类型元件: 3.创建heterogeneous类型元件. 把元件 ...
- 深入学习和理解Django模板层:构建动态页面
title: 深入学习和理解Django模板层:构建动态页面 date: 2024/5/5 20:53:51 updated: 2024/5/5 20:53:51 categories: 后端开发 t ...
- 大营销抽奖系统,DDD开发要如何建模?
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 大家好,我是技术UP主小傅哥. 经过5.1假期的一顿框框输出,终于完成了<大营销项目 ...
- SQL函数详解SUM\COUNT\AVG......
朋友们,个人公众号:SQL数据库运维 移动端的学习分享,各种数据库基础知识,一起进步,共同学习,期待你的加入. 函数的类型 1.聚合函数:对一组值执行计算,并返回单个值,也被称为组函数.聚合函数经常与 ...
- Shopify Theme 开发 —— 性能优化
一.概述 关于 Shopify Theme 的性能优化,通常有以下几点: 1.卸载未使用的应用程序 有些 app 会在 theme 里面插入一些代码,即使 app 未被使用,也可能会加载一些脚本文件, ...
- Django自定义模板标签与过滤器
title: Django自定义模板标签与过滤器 date: 2024/5/17 18:00:02 updated: 2024/5/17 18:00:02 categories: 后端开发 tags: ...
- 日常Bug排查-偶发性读数据不一致
日常Bug排查-偶发性读数据不一致 前言 日常Bug排查系列都是一些简单Bug的排查.笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材. Bug现场 业务场景 先描述这个问题出现的业务场景. ...
- MyBatis日志模块源码分析
MyBatis源码的logging包下是日志模块的相关实现,Mybatis日志模块通过适配器模式和代理模式优雅的实现了SQL日志的输出功能. 一. 适配器模式实现了MyBatis对第三方日志框架的适配 ...