zoukankan      html  css  js  c++  java
  • 基于Kubernetes可扩展的Selenium 并行自动化测试部署及搭建(3)——基于k8s的selenium grid集群搭建

    本篇主要讲解如何使用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)

    原创帖,转载请注明出处及作者,标注严禁转载帖请勿转载,谢谢!
  • 相关阅读:
    连载一:RobotFramework+SeleniumWebdriver+RIDE的安装
    一个小小黑点乱了我的芳心
    JDK的环境配置
    Eclipse中安装TestNG插件
    RobotFramework的安装
    导入现有java工程
    eclipse创建项目(步骤加图片)
    java--算术运算符
    java--数据类型
    java程序结构--day01
  • 原文地址:https://www.cnblogs.com/Bug-Hunter/p/15096632.html
Copyright © 2011-2022 走看看