使用k8s做分布式自动化测试

背景:

对于UI自动化来说

用例得多线程执行,需要得更多得浏览器支持,selenium grid是不二之选,加上容器技术的流行,更方便的将 grid hub、grid node运行起来。

可是case随着时间无限的递增,如不能增加运行的浏览器,运行时间就会延长,单台服务器已经不能满足自动化需求。

所以,衍生了在多服务器中的容器编排---------------k8s

天然的支持分布式测试,多服务器分摊压力资源,动态调整pod副本数这些优势不得不说“很牛皮”

而k8s的原理很难理如pod中网络互通、文件共享。不理解原理也很难写出对应的 yaml进行部署

流程图

.

UI自动化通过 框架比如 testng,触发成百上千的的线程不是问题

据此可知,集群提供selenium grid HUB节点的URL来支持大量用例的并发

所以把selenium grid部署在k8s即可,HUB、node分为2个服务进行部署

selenium node即通过调整pod副本数来支持更多的用例

----------------------------------------------------------------------------

以下 hub节点 的 k8s 的yaml

apiVersion: apps/v1
kind: Deployment
metadata:
   name: selenium-hub
   labels:
      name: selenium-hub
spec:
  replicas: 1
  selector:
    matchLabels:
      name: selenium-hub
  template:
    metadata:
      labels:
        name: selenium-hub
    spec:
      containers:
        - name: selenium-hub
          image: xxxxxxxxx
          imagePullPolicy: ifNotPresent
          ports:
            - containerPort: 4444
          env:
           - name: GRID_TIMEOUT
             value: '0'
           - name: GRID_THROW_ON_CAPABILITY_NOT_PRESENT
             value: 'true'
           - name: GRID_NEW_SESSION_WAIT_TIMEOUT
             value: '-1'
           - name: GRID_NEW_BROWSER_TIMEOUT
             value: '15000'
           - name: GRID_TIMEOUT
             value: '30000'
           - name: GRID_CLEAN_UP_CYCLE
             value: '30000'
           - name: JAVA_OPTS
             value: -Xmx512m
           - name: GRID_MAX_SESSION
             value: '30'
---
apiVersion: v1
kind: Service
metadata:
   name: selenium-hub
   labels:
      name: selenium-hub
spec:
   type: NodePort
   ports:
      - port: 4444
        targetPort: 4444
        name: port0
        nodePort: 30000
   selector:
      name: selenium-hub
   sessionAffinity: None

  

 

posted @ 2021-09-07 10:46  半城风雨  阅读(859)  评论(1)    收藏  举报