前言
實際上是 docker 中部署一個 Selenium Grid,它用於分布式自動化測試,就是一套Selenium 代碼可在不同的環境上運行。
Selenium Grid 又分為:
hub :主節點,它首先根據你的代碼來識別分配到哪個node節點去運行;
node:分支節點,由主hub主節點分配給本地/遠程node來運行測試用例。
環境准備:
- centos
- docker
- python3 + selenium 等庫
一、docker-selenium搭建
由於廣深小龍不喜歡先pull一個鏡像下來,我是直接run起來。
1、docker 安裝 主節點 selenium/hub:
sudo docker run -d -p 4444:4444 -e GRID_MAX_SESSION=200 --restart=always --name hub selenium/hub
-d:掛后台運行
-p:映射ip
-e:GRID_MAX_SESSION=200
2、docker 安裝 分支節點 selenium/node-chrome:
當然還有debug版本、Firefox版本的分支節點,這里說chrome。了解更多:https://hub.docker.com/search?q=selenium%2Fnode-&type=image
sudo docker run -d -e NODE_MAX_INSTANCES=100 -e NODE_MAX_SESSION=100 --shm-size=5g --link hub:hub --name node selenium/node-chrome
以上步驟喝杯茶,等待一下下載完成后就會直接run起來。
3、run起來后,輸入:docker ps
[root@iZbp19lugf22zbsubsf1y6Z ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d33303b6a7fe selenium/hub "/opt/bin/entry_poin…" 2 days ago Up 2 days 0.0.0.0:4444->4444/tcp selenium-hub ff03e232af44 selenium/node-chrome "/opt/bin/entry_poin…" 2 days ago Up 2 days vigorous_agnesi
可以看到這兩個鏡像在運行着,接下來我們調試腳本。
二、調試腳本
由於當時項目需求,我將腳本放置服務器上試運行。大概是:docker + docker-selenium + jenkins + python3 + pytest
pytest的優點、插件都太多了,如分布式、前置后置,自定義順序執行用例,漂亮報告等等
1、測試腳本如下:
這里需要注意更改你的服務器主機ip,端口對應主節點的映射端口。
from selenium import webdriver import time driver = webdriver.Remote( command_executor='http://你的服務器主機ip:4444/wd/hub', desired_capabilities={'browserName': 'chrome'} ) driver.get('https://www.cnblogs.com/gsxl/') print("get 廣深小龍 博客園") text = driver.find_element_by_id("Header1_HeaderTitle").text driver.find_element_by_id("Header1_HeaderTitle").click() print(text) time.sleep(1) driver.quit() print("運行完畢,即將關閉...")
運行結果:
[root@iZbp19lugf22zbsubsf1y6Z ~]# python3 test.py get 廣深小龍 博客園 廣深-小龍 --揚帆起航! 運行完畢,即將關閉... [root@iZbp19lugf22zbsubsf1y6Z ~]#
如果在容器外部可以使用服務器本地ip,容器內部需要使用服務器主機ip,既是公網ip。
這樣調試后我們便可以通過 jenkins 持續集成進行測試了。
歡迎來大家QQ交流群一起學習:482713805