前言:隨着自動化測試越學越深,深深覺得有太多的東西需要總結。
1.記錄下學習中遇到的坑,當做學習筆記。
2.有前人路過看到文章中比較落后的做法,請務必一定要指教。(因為是初學者視角,很多東西只是走通而已,不足的地方多的去了,無論誰的指教都會讓我受益匪淺)
3.因為我就是一個初學者,所以我打算詳細的記錄操作步驟,爭取和我一樣的初學者看着這篇文章就可以成功搭建測試環境。
項目背景:
我負責的自動化web測試框架已經搭建完成了。框架主要主要使用了:
語言:python
測試框架:pytest
web自動化:selenium
報告框架:allure
CI集成:jenkins
引入docker的目的:
優化自動化測試框架。當case在單個瀏覽器上走通了以后,就開始考慮是否需要考慮下兼容性,反正都是機器跑,跑一個瀏覽器是跑,跑二個也是跑。剛開始的時候打算用Selenium Standalone Server解決這個問題,但是在社區里看到了docker文章。立刻被吸引到了,通過docker 啟動容器創建一個干凈的測試環境,把外界因素對自動化測試的干擾降至最低。自動化測試穩定才是王道。
目標:
1.成功搭建docker結合selenium構建分布式測試環境。
2.編寫腳本執行web的自動化測試分布式測試。
1.安裝docker
以前docker必須安裝太linux系統上的,不過最近docker發布了windows的版本,至少讓我這種沒有linux操作環境的人也能使用docker。
去docker官網下載dockerToolbox.exe,然后直接安裝即可。這個完全沒有難度。
然后在啟動或者找快捷方式 Docker Quickstart Terminal ,打開docker的terminal。
第一次啟動可能花費很長時間,耐心等待即可。看到下圖就說明我們可以開始使用docker了。
2.獲取docker鏡像
按照我對docker理解,初學者就直接認為docker是一種輕量級的虛擬機,然后在虛擬機里搭建各種環境,在需要的時候,直接啟動即可。docker的根本就是鏡像,任何操作的來源都是從鏡像開始的,找到合適我們自己項目的鏡像就可以了。
我們可以去docker的公共倉庫找一些已經做好的鏡像。
輸入命令
docker search selenium
我們可以在公共倉庫里找到關於selenium的鏡像。
既然是分布式測試,那么我們就需要hub,node。合適我們的鏡像就被我們找到了。
hub:selenium/hub
node:selenium/node-firefox , selenium/node-chrome
node有兩種,一個是firefox,一個chrome。看來這兩種瀏覽器是現在的主流,當然如果我們在將來的工作需要在docker上進階,我們自己也可以構建ie之類的鏡像,那就是后話了。
輸入命令
docker pull selenium/hub
docker pull selenium/node-firefox
docker pull selenium/node-chrome
如果下載鏡像不成功,就多試幾次,再不行就翻牆再下載。
全部下載完成以后
輸入命令
docker images
查看鏡像列表
如上圖顯示的話,基本上就成功了。
3.運行docker鏡像
我們已經下載好了docker的鏡像,接下來就是運行鏡像,在docker的世界里叫做啟動容器,通俗點就是啟動了虛擬機。
3.1啟動selenium-hub
輸入命令
docker run -p 5555:4444 -d --name hub selenium/hub
輸入命令
docker ps
可以看到以下內容
我來解釋下基本命令
run 是讓我們運行一個鏡像,創建出一個容器。
運行的鏡像名字叫做selenium/hub
-p 5555:4444 這個是把容器里的端口映射出來,讓別人可以訪問。
-d 在后台運行
--name 給這個容器起一個容易明白的名字,這里我就直接把這個容器成為hub。
3.2啟動selenium-node
輸入命令
docker run -P -d --link hub:hub --name firefox selenimu/node-firefox
docker run -P -d --link hub:hub --name chrome selenimu/node-chrome
--link 是鏈接別名為hub的容器
輸入命令docker ps
然后在本機的瀏覽器中輸入
http://192.168.99.100:5555/grid/console
然而我們現在用docker+selenium 也做到了這點。
輸入命令
docker logs hub
4.運行測試腳本
# coding=utf-8
from selenium import webdriver
chrome_capabilities ={
"browserName": "chrome",
"version": "",
"platform": "ANY",
"javascriptEnabled": True,
# "marionette": True,
}
browser = webdriver.Remote("http://192.168.99.100:5555/wd/hub", desired_capabilities=chrome_capabilities)
browser.get("http://www.163.com")
browser.get_screenshot_as_file(r"D:/sample/chrome.png")
browser.quit()
這是一個典型的python的selenium腳本調試命令。
其中要注意的的以前在本機調試我們都是
browser = webdriver.Chrome()
但是我們現在node和hub的概念,所以我們在定義webdriver的時候是定義在hub上的。所以我們看到了
webdriver.Remote("http://192.168.99.100:5555/wd/hub", desired_capabilities=chrome_capabilities)
在本機上運行改腳本,沒有很大問題應該會在制定的目錄生成一張快照,證明我們腳本的確跑起來了。
5.debug模式
我們在運行docker的時候是看不到任何界面的,但是有的時候為了 debug方便,我們需要看容器里到底在干什么。
所以,docker-selenium提供了debug模式。
首先我們要去下載debug專用的鏡像
輸入命令
docker pull selenium/node-chrome-debug
docker pull selenium/node-firefox-debug
如果如要本地調試的鏡像
docker pull selenium/standalone-chrome-debug
docker pull selenium/standalone-firefox-debug
輸入命令
docker run -d -p 5900:5900 --link hub:hub selenium/node-chrome-debug
我們在創建了node 容器的同時把接口5900暴露出來了。
那么我們現在就要使用vnc進行連接。
我選擇了vnc viewer
如圖所示,vnc server 輸入docker的ip加上容器暴露出來的接口5900
連接,會要求輸入密碼,默認密碼就是secret
進入vnc viewer 就可以看到以下Ubuntu系統的圖形界面。會linux的人肯定不會陌生。
在運行我們前面的調試腳本,這次就會在vnc viewer中的看到selenium整個操作過程。
以上我們應該就已經把selenium結合docker構建分布式測試環境配置好了,debug模式也配置好了。
需要軟件測試資料的小伙伴,可以來加群:747981058。群內會有不定期的發放免費的資料鏈接,這些資料都是從各個技術網站搜集、整理出來的,如果你有好的學習資料可以私聊發我,我會注明出處之后分享給大家。







