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