基于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)