iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 23
0
自我挑戰組

DevOps學習之旅系列 第 23

Day 23 Jenkins 整合 Selenium 測試

簡介

上篇介紹了 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

螢幕快照 2018-10-24 下午11.20.47.png

docker ps -a

螢幕快照 2018-10-24 下午10.39.41.png

開啟網頁 console

http://localhost:4444/wd/hub/static/resource/hub.html

螢幕快照 2018-10-24 下午11.17.07.png

修改 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

螢幕快照 2018-10-24 下午11.05.22.png

螢幕快照 2018-10-24 下午11.03.56.png

點擊 Task Screenshop

螢幕快照 2018-10-24 下午11.08.58.png

結論

在實作的過程之中,有一些進步的方向,可以使用 selenium grid 架構來提昇測試多種不同的瀏覽器,並且這邊還少了錯誤回報機制,如果測試有問題的時候可以截圖回傳到 Jenkins 來,方便測試人員查看.

螢幕快照 2018-10-24 下午11.36.48.png

參考

selenium-python
/docker-selenium
seleniumHQ


上一篇
Day 22 Selenium 測試
下一篇
Day 24 GitLab 自動化測試與部署(一)
系列文
DevOps學習之旅30

尚未有邦友留言

立即登入留言