1. 程式人生 > 實用技巧 >Docker學習10-docker-slenium進行web自動化測試

Docker學習10-docker-slenium進行web自動化測試

前言

實際上是 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 -dp 4444:4444 --name selenium-hub selenium/hub

-d:掛後臺執行

-p:對映ip

2、docker 安裝 分支節點selenium/node-chrome:

當然還有debug版本、Firefox版本的分支節點,這裡說chrome。瞭解更多:https://hub.docker.com/search?q=selenium%2Fnode-&type=image

sudo docker run -d --link selenium-hub:hub 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