本篇主要讲解如何使用k8s搭建selenium grid集群

Selenium Grid集群部署

1、  首先我们将通过 Kubernetes 服务进行通信以到达hub和nodes。Kubernetes Service 在hub和nodes之间进行双向通信。如下图所示:

2、  建议使用vsc编写Selenium grid的YAML配置文件,并且安装YAML、Kubernetes和Docker插件,新建文件名为deploy.yml的配置文件,用于k8s部署Selenium Hub容器,Yaml具体内容如下:。

 apiVersion: apps/v1

 kind: Deployment

 metadata:

   name: selenium-hub        #hub名称

 spec:

   selector:

     matchLabels:

       app: selenium-hub

   strategy:

         type: RollingUpdate        #滚动部署

         rollingUpdate:

          maxSurge: 1

          maxUnavailable: 0

       template:

         metadata:

           labels:

             app: selenium-hub

         spec:

          containers:

           - name: selenium-hub

           image: selenium/hub:3.141.59-20200515     #hub镜像,其他版本可以访问:https://hub.docker.com/r/selenium/hub/tags.获取

             resources:

               limits:

                 memory: "1000Mi"

                 cpu: "500m"

             ports:

               - containerPort: 4444

             livenessProbe:

                 httpGet:

                   path: /wd/hub/status

                   port: 4444

                 initialDelaySeconds: 30

                 timeoutSeconds: 5

3、  新建文件名为service.yml的配置文件,用于k8s部署Kubernetes service容器,具体参数如下:

 apiVersion: v1

 kind: Service

 metadata:

    name: selenium-srv   #k8s服务名称

 spec:

   selector:

     app: selenium-hub

   ports:

   - port: 4444

         nodePort: 30001     #node端口

       type: NodePort

       sessionAffinity: None

4、新建文件名为service.yml的配置文件,用于k8s部署selenium/node-chrome容器,具体参数如下:

 apiVersion: v1

 kind: ReplicationController

 metadata:

   name: selenium-node-firefox-rep

 spec:  

   replicas: 3           #复制节点个数,可根据需求调整

   selector:

     app: selenium-node-firefox

   template:

         metadata:

           name: selenium-node-firefox

           labels:

             app: selenium-node-firefox

         spec:

           containers:

             - name: selenium-node-firefox

               image: selenium/node-firefox      #所用镜像,可访问:https://github.com/SeleniumHQ/docker-selenium获取所需镜像

               ports:

                 - containerPort: 5901

               env:

                - name:  HUB_HOST

                  value: "selenium-srv" 

                - name: HUB_PORT

                  value: "4444"

5、  新建文件名为service.yml的配置文件,用于k8s部署selenium/ node-firefox容器,具体参数如下:

 apiVersion: v1

 kind: ReplicationController

 metadata:

   name: selenium-node-chrome-rep

 spec:  

   replicas: 3

   selector:

     app: selenium-node-chrome

   template:

         metadata:

           name: selenium-node-chrome

           labels:

             app: selenium-node-chrome

         spec:

           containers:

             - name: selenium-node-chrome

               image: selenium/node-chrome

               ports:

                 - containerPort: 5900

               env:

                - name:  HUB_HOST

                  value: "selenium-srv" 

                - name: HUB_PORT

                  value: "4444"

执行部署操作

创建hub部署命令:

kubectl create -f deploy.yml

创建完成后查看详细信息命令:

kubectl describe deploy

相关命令结果如下图所示:

打开docker desktop切换到Containers/Apps界面可以看到新部署的selenium hub容器,如下图所示:

根据以上方法分别对其他容器进行部署,命令如下

Kubernetes service:

kubectl create -f service.yml
kubectl describe service

selenium/node-chrome:

kubectl create -f repchrome.yml

selenium/ node-firefox:

kubectl create -f repff.yml

K8s集群设置完成后可以通过以下命令获取所有创建的pod:

kubectl get pods

当所有pod的ready均为1/1时,启动成功,如下图所示:

使用浏览器访问:http://127.0.0.1:30001/grid/console,可以看到已部署成功的selenium grid集群,如下图所示:

最终在自动化测试代码的@Before下的函数中添加如下代码即可

URL hubUrl=new URL("http://172.30.17.109:30001/wd/hub");
DesiredCapabilities capabilities = DesiredCapabilities.firefox();//new DesiredCapabilities();
capabilities.setBrowserName("chrom");
capabilities.setPlatform(Platform.LINUX);
driver = new RemoteWebDriver(hubUrl,capabilities);

运行测试用例时,selenium hub会自动分配到配置有chrome的node下执行。

以上是基于Kubernetes可扩展的Selenium 并行自动化测试部署及搭建全部流程,亲测可用,如有问题请留言!

参考已下资源:

https://www.swtestacademy.com/selenium-kubernetes-scalable-parallel-tests/(基于mac环境)

https://www.kubernetes.org.cn/k8s(k8s中文社区)

https://blog.csdn.net/ai524719755/article/details/116712692(win10安装k8s)

基于Kubernetes可扩展的Selenium 并行自动化测试部署及搭建(3)——基于k8s的selenium grid集群搭建的更多相关文章

  1. 基于.NetCore的Redis5.0.3(最新版)快速入门、源码解析、集群搭建与SDK使用【原创】

    1.[基础]redis能带给我们什么福利 Redis(Remote Dictionary Server)官网:https://redis.io/ Redis命令:https://redis.io/co ...

  2. Kubernetes集群搭建之企业级环境中基于Harbor搭建自己的私有仓库

    搭建背景 企业环境中使用Docker环境,一般出于安全考虑,业务使用的镜像一般不会从第三方公共仓库下载.那么就要引出今天的主题 企业级环境中基于Harbor搭建自己的安全认证仓库 介绍 名称:Harb ...

  3. 基于Kubernetes v1.24.0的集群搭建(三)

    1 使用kubeadm部署Kubernetes 如无特殊说明,以下操作可以在所有节点上进行. 1.1 首先我们需要配置一下阿里源 cat <<EOF > /etc/yum.repos ...

  4. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  5. kubernetes(K8S)快速安装与配置集群搭建图文教程

    kubernetes(K8S)快速安装与配置集群搭建图文教程 作者: admin 分类: K8S 发布时间: 2018-09-16 12:20 Kubernetes是什么? 首先,它是一个全新的基于容 ...

  6. Redis复制与可扩展集群搭建

    抄自:http://www.infoq.com/cn/articles/tq-redis-copy-build-scalable-cluster 讨论了Redis的常用数据类型与存储机制,本文会讨论一 ...

  7. (转)Redis复制与可扩展集群搭建

    讨论了Redis的常用数据类型与存储机制,本文会讨论一下Redis的复制功能以及Redis复制机制本身的优缺点以及集群搭建问题. Redis复制流程概述 Redis的复制功能是完全建立在之前我们讨论过 ...

  8. 基于zookeeper的Swarm集群搭建

    简介 Swarm:docker原生的集群管理工具,将一组docker主机作为一个虚拟的docker主机来管理. 对客户端而言,Swarm集群就像是另一台普通的docker主机. Swarm集群中的每台 ...

  9. [Kubernetes]CentOS7下Etcd集群搭建

    Etcd简要介绍 Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息 Etcd构建自身高可用集群主要有三种形式: ①静态发现: 预先已知 Etcd 集 ...

  10. Redis复制与可扩展集群搭建【转】

    本文会讨论一下Redis的复制功能以及Redis复制机制本身的优缺点以及集群搭建问题. Redis复制流程概述 Redis的复制功能是完全建立在之前我们讨论过的基于内存快照的持久化策略基础上的,也就是 ...

随机推荐

  1. 浅说 c++20 cppcoro (三)

    浅说 c++20 cppcoro (三),https://www.cnblogs.com/bbqzsl/p/18679860 接着上一篇浅说 c++20 coroutine (二) ,继续没说完的事. ...

  2. SpringBoot整合富文本编辑器(UEditor)

    UEditro是一款比较好用的富文本编辑器,所谓的富文本编辑器就是和服务器交互的数据不是普通的字符串文件,而是一些内容包含比较广的字符串,一般是指的html页面,目前比较好用的是百度的UEditor, ...

  3. 2024年最新iOS 17屏蔽系统更新方法,iPhone、iPad通用!

    到Safari浏览器打开,描述文件会自动安装进手机里. 这时候我们在设置里,找到设备管理,点击刚刚下载好的描述文件,进行安装.要注意看,有苹果的签名,才说明是官方出品,千万要注意哦!安装完成后,重启手 ...

  4. 2D量测流程

  5. 阿里云Windows server 2016服务器Antimalware Service Executable进程占比高,cpu接近100%,强制关闭该进程实测

    问题描述:阿里云Windows server 2016服务器Antimalware Service Executable进程占比高,cpu接近100%,需要强制关闭该进程,排查问题,进入系统服务关闭, ...

  6. 基于Microsoft.Extensions.AI核心库实现RAG应用

    大家好,我是Edison. 之前我们了解 Microsoft.Extensions.AI 和 Microsoft.Extensions.VectorData 两个重要的AI应用核心库.基于对他们的了解 ...

  7. 前端跨域方案-跨域请求代理(asp.net handler)

    现在技术开发偏向于使用统一的接口处理浏览器或者app的http请求. 大家都知道因为浏览器的同源策略的原因 js直接请求webapi 接口会有一些问题,即使做好服务器端的配置 同样会有不少的 问题   ...

  8. HarmonyOS SDK让小红书鸿蒙用户尽享原生相机的拍摄之美

    小红书是深受年轻人喜爱的生活社交类社区平台,越来越多的人在小红书上分享旅行.日常.心情.近日,不少使用鸿蒙原生版小红书的细心用户已经发现,直接使用小红书拍摄照片与自己使用原相机拍摄有一样清晰美观的呈现 ...

  9. New Bing 全面开放?我看未必

    前段时间大家应该都被ChatGPT刷屏了,其实就回答来说New Bing 才是最厉害的,因为它底层使用了ChatGPT 并且可以支持联网查询数据,回答中还能支持看到出处,方便确认其真实性. New B ...

  10. Golang 入门 : 变量声明

    变量声明 在Go中,变量是包含值的一块存储.可以使用变量声明为变量命名.只需使用var关键字,后跟所需的名称以及变量将保存的值的类型. 一旦你声明了一个变量,就可以用=为它分配该类型的任何值: qua ...