上篇介紹了 selenium 腳本,接下來要介紹要怎麼整合 selenium 到 Jenkins CI/CD 流程之中,由於我們的 Jenkins Server 是架設在 Linux 環境,Linux 環境沒有安裝桌面程式,所以我們需要啟動一個 selenium/standalone-chrome Container,之後 selenium 腳本會跑在 這個Container 上面.
Jenkins 整合 Selenium 測試
下載 docker selenium ,並執行Container ,開始 4444 port
docker run -d -p 4444:4444 --shm-size=2g selenium/standalone-chrome:3.14.0-iron
docker ps -a
開啟網頁 console
http://localhost:4444/wd/hub/static/resource/hub.html
修改 selenium 連結到 Remote Drive 官方範例
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.CHROME)
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.OPERA)
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.HTMLUNITWITHJS)
修改 selenium 腳本 vim test_selenium.py
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
class GoogleTestCase(unittest.TestCase):
def setUp(self):
# self.browser = webdriver.Firefox()
# 主要是設定 webdirver remote
self.browser = webdriver.Remote(
command_executor='http://localhost:4444/wd/hub',
desired_capabilities=DesiredCapabilities.CHROME)
# self.addCleanup(self.browser.quit)
def testPageTitle(self):
self.browser.get('http://www.google.com')
self.assertIn('Google', self.browser.title)
def testYahoo(self):
self.browser.get('http://www.yahoo.com')
assert 'Yahoo' in self.browser.title
elem = self.browser.find_element_by_name('p') # Find the search box
elem.send_keys('seleniumhq' + Keys.RETURN)
def tearDown(self):
self.browser.quit()
if __name__ == '__main__':
unittest.main(verbosity=2)
python test_selenium.py
在實作的過程之中,有一些進步的方向,可以使用 selenium grid 架構來提昇測試多種不同的瀏覽器,並且這邊還少了錯誤回報機制,如果測試有問題的時候可以截圖回傳到 Jenkins 來,方便測試人員查看.
selenium-python
/docker-selenium
seleniumHQ