1、搭建瀏覽器集群,進(jìn)行兼容性測(cè)試和分布式測(cè)試,提高測(cè)試效率
2、分布式UI自動(dòng)化測(cè)試原理
Grid Hub是控制端-控制瀏覽器,node是執(zhí)行端-操作瀏覽器。
啟動(dòng)selenium測(cè)試腳本->發(fā)送請(qǐng)求給Grid Hub->Grid Hub把請(qǐng)求變成測(cè)試任務(wù)分發(fā)給node(node中包含webdiever),node驅(qū)動(dòng)瀏覽器進(jìn)行操作->結(jié)果發(fā)送給Grid Hub->Grid Hub返回結(jié)果給測(cè)試腳本。

分布式UI自動(dòng)化測(cè)試圖
3、拉取鏡像
docker pull selenium/hub:3.7.1-beryllium
4、啟動(dòng)容器
4.1、通過(guò)link的方式啟動(dòng)容器
docker run --name=hub -p 4444:4444 -e GRID_TIMEOUT=0 -e GRID_THROW_ON_CAPABILITY_NOT_PRESENT=true -e GRID_NEW_SESSION_WAIT_TIMEOUT=-1 -e GRID_BROWSER_TIMEOUT=15000 -e GRID_TIMEOUT=30000 -e GRID_CLEAN_UP_CYCLE=30000 -d selenium/hub:3.7.1-beryllium
docker run --name=chrome -p 4445:5900 -e NODE_MAX_INSTANCES=6 -e NODE_MAX_SESSION=6 -e NODE_REGISTER_CYCLE=5000 -e DBUS_SESSION_BUS_ADDRESS=/dev/null -v /dev/shm:/dev/shm --link hub -d selenium/node-chrome-debug:3.7.1-beryllium
打開(kāi)鏈接查看http://XX.XX.XX.XX:4444/grid/console

image.png
4.2、通過(guò)compose的方式啟動(dòng)容器
# To execute this docker-compose yml file use `docker-compose -f <file_name> up`
# Add the `-d` flag at the end for detached execution
version: "3"
services:
selenium-hub:
image: selenium/hub:3.141.59-xenon
container_name: selenium-hub
ports:
- "4444:4444"
chrome:
image: selenium/node-chrome:3.141.59-xenon
volumes:
- /dev/shm:/dev/shm
depends_on:
- selenium-hub
environment:
- HUB_HOST=selenium-hub
- HUB_PORT=4444
firefox:
image: selenium/node-firefox:3.141.59-xenon
volumes:
- /dev/shm:/dev/shm
depends_on:
- selenium-hub
environment:
- HUB_HOST=selenium-hub
- HUB_PORT=4444
4.3、不使用link方式 使用環(huán)境變量方式啟動(dòng)(解決hub在一臺(tái)機(jī)器,node在另外一臺(tái)機(jī)器的問(wèn)題)
# 運(yùn)行hub
docker run --name=hub -p 5001:4444 \
-e GRID_TIMEOUT=0 \
-e GRID_THROW_ON_CAPABILITY_NOT_PRESENT=true \
-e GRID_NEW_SESSION_WAIT_TIMEOUT=-1 \
-e GRID_BROWSER_TIMEOUT=15000 \
-e GRID_TIMEOUT=30000 \
-e GRID_CLEAN_UP_CYCLE=30000 -d selenium/hub:3.7.1-beryllium
# 運(yùn)行節(jié)點(diǎn)
docker run --name=chrome1 \
-e NODE_MAX_INSTANCES=6 \
-e NODE_MAX_SESSION=6 \
-e NODE_REGISTER_CYCLE=5000 \
-e HUB_PORT_4444_TCP_ADDR=hub_ip \
-e HUB_PORT_4444_TCP_PORT=hub_port \
-v /dev/shm:/dev/shm \
-d selenium/node-chrome:3.7.1-beryllium
5、編寫UI自動(dòng)化測(cè)試腳本
class TestTsg:
def setup(self):
self.driver = webdriver.Remote(
command_executor='http://XX.XX.XX.XX:4444/wd/hub',
desired_capabilities={'browserName': 'chrome'}
)
self.driver.get('https://www.baidu.com')
print("open baidu browser")
self.driver.find_element_by_id("kw").send_keys("docker selenium")
self.driver.find_element_by_id("su").click()
sleep(3)
self.driver.get_screenshot_as_file("baidu.png")
print("test end")
def teardown(self):
self.driver.quit()
def testmy(self):
pass
6、執(zhí)行UI自動(dòng)化測(cè)試腳本
方法一:用例對(duì)應(yīng)的目錄下面有baidu .png的截圖,表示執(zhí)行成功,否則表示執(zhí)行失敗。

image.png
方法二:使用vnc viewer查看瀏覽器操作過(guò)程
參考:https://github.com/SeleniumHQ/docker-selenium
說(shuō)明:本文是測(cè)試課程的學(xué)習(xí)筆記。