本篇主要讲解如何使用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. windows配置maven

    1.下载mavenhttps://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/ 中找到相应的版本2.解压3.配置环境变量MAVEN_HOMED: ...

  2. kvm远程管理

    列出centos7中所有的虚拟机 [root@kvm1 ~]# virsh list --all Id Name State ------------------------------------- ...

  3. Tensorflow 安装和测试(Anaconda4.7.10+windows10)

    一. 软件下载 二. 配置相关 1. 修改 Jupyter notebook 默认工作路径 (1)打开 Anaconda Prompt ,输入 jupyter notebook --generate- ...

  4. CF895C Square Subsets 题解

    看到 \(a_i\le 70\) 后,发现 \(n\) 啥用没有,因为只需要枚举 \(1-70\) 选几个即可. 看到求完全平方数后,想到分解质因数,由于 \(a_i\le 70\),所以只有 \(1 ...

  5. QT5笔记:3.手动撸界面和可视化托界面混合

    3.手动撸界面和可视化托界面混合 参考视频:https://www.bilibili.com/video/BV1AX4y1w7Nt 3.1 工具栏可以通过在UI界面右键选择添加工具栏 3.2 设置窗口 ...

  6. 无界 | Bncr | Boundless Nodejs Chat Robot 机器人框架安装使用教程

    背景:Bncr 是一个开箱即用的Nodejs Chat RoBot(会话式机器人)框架.它基于OOP函数响应式编程,具有占用小.响应快.开发易等特点,允许开发者创建高度可测试.可扩展.松散耦合且易于维 ...

  7. Python - [03] 基础语法

    题记部分 一.标识符 第一个字符必须是字母表中字母或下划线_ 标识符的其他部分由字母.数字和下划线组成 标识符对大小写敏感 二.Python保留字 三.注释 (1)单行注释:以#开头 #!/usr/b ...

  8. 盒马新零售基于DataWorks搭建数据中台的实践(转载自阿里云的计算平台负责人--许日花名欢伯)

    简介:大家好,我叫许日花名欢伯,在2016年盒马早期的时候,我就转到了盒马的事业部作为在线数据平台的研发负责人,现在阿里云的计算平台负责DataWorks的建模引擎团队.今天的分享内容也来源于另一位嘉 ...

  9. SpringBoot三种获取Request和Response的方法

    通过静态方法获取,你也可以封装一个静态方法出来 @GetMapping(value = "") public String center() { ServletRequestAtt ...

  10. python 字典使用

    整理很好的文章 文章复制链接: https://mp.weixin.qq.com/s/Aj65A-uuTaARW3vvYTxvzQ 1.检查键是否存在于字典中 def key_in_dict(d, k ...