[資工] Jenkins 篇:使用 python BDD 自動化測試網站 (Jenkins + behave + selenium)

Jenkins 這篇會記載如何從無到有安裝 Jenkins,並新增一個能夠閱讀 Junit 格式測試報告的自動測試專案。同時讓 Jenkins 與 github repo 掛勾,在有新的 commit 時能夠自動抓下來建置並執行測試。

1) Jenkins 端的配置與安裝

*裝在 mac 上所以會使用 brew 這個套件管理系統

1-1) 安裝

先安裝相依套件 JDK 8
brew cask install homebrew/cask-versions/adoptopenjdk8
再安裝 jenkins,這邊使用長期支援版本(LTS)
brew install jenkins-lts

1-2) 啟動

brew services start jenkins-lts
打開瀏覽器輸入 localhost:8080
在安裝的設定選擇常用的「基本套件」即可
幾過一連串的設定就可以看到 Jenkins 首頁



1-3) 新增專案

在首頁左邊選擇「新增作業」,進到頁面之後輸入專案名稱「Python-behave-testing」並選擇「自由專案」,接著會進到配置頁面去輸入有關 github repo 與建置動作的設定




1-3-1) 配置 git repository

a.選 Git
b.填入 github URL(使用 SSH 格式)
c.增加 Credential:點選 Add 按鈕開啟下拉選單並選擇 Jenkins,在新頁面輸入 github 登入的帳號跟密碼

1-3-2) 設定 SCM 輪詢

如果 Jenkins 架在私人機器不對外公開或者不打算使用 git webhook 的推播功能,那我們可以啟用 SCM 輪詢,這邊的排程採用 crontab 的時間格式,範例中為每隔 5 分鐘檢查 repo 是否有新的 commit。


1-3-3) 設定建置的腳本

由於這是一個網頁測試專案,其實不用建置,所以這邊直接輸入 behave --junit,讓 behave 這個 python 的 BDD 框架能夠產生 JUnit 格式的報告,讓 Jenkins 能夠讀取與分析。
但是由於我們把 behave 跟 selenium-chrome-webdriver 裝在 /usr/local/bin/ 底下,所以在執行測試的前一行需要增加一句 bash 指令「PATH=$PATH:/usr/local/bin」把環境變數 PATH 加上 /usr/local/bin/ 這個目錄即可讀取到測試相關的執行檔。

1-3-4) 設定建置後的動作

建置之後可以做的事情挺多的,包括「存封成品」、「建置其他專案」、「發布 JUnit 測試報告結果」等等,都可以按照需求新增動作。並安排多個動作之間的順序。


1-3-4-1) 保存每次的測試結果原始檔

雖然 Jenkins 在閱讀 Junit 格式的測試報告之後能夠產生具有互動性的閱讀頁面,但若您想要保存每次的測試結果的原始文件供後續分析使用,則可以在「建置後動作」的區塊中,選擇「保存成品」,這裡保存的是 behave 框架所產生的測試報告,在 reports 目錄中以TESTS-開頭結為為 .xml 的所有文件:


1-3-4-2) 讓 Jenkins 能夠整合測試報告

Jenkins 是以 Java 撰寫,所以讀取 JUnit 格式的報告是最基本的支援,最初我們選擇一般安裝即包括 JUnit 的報告,這裡不用額外安裝插件。
這邊我們來新增一個讓 Jenkins 知道去哪裡拿 Junit reports 的設定區塊。點擊「新增建置動作」下拉選單 -> 選擇「發布 JUnit 測試報告結果」

出現以上視窗之後同樣的在「測試報告 XML」區塊中鍵入如上一節的設定(reports/TESTS-*.xml)

以上這節做完到此就可以讓 Jenkins 這個 Python-behave-testing 自動測試的專案,在 github 有新的 commit 時,在五分鐘之內,Jenkins 會自動拉下來建置,執行 behave 測試並產生結果報告。

2) Jenkins 專案工作區域介紹

這邊會帶大家熟悉 Jenkins 裡面的一個專案的工作區域。

TBD: 在圖片裡寫太多字很累先放著

3) Q&A

3-1) 想進去 Jenkins 管理頁面但是忘記 Admin 密碼無法登入怎麼辦

可以去設定檔把需要登入的選項關掉(但也會變得不安全就是了)
編輯 Jenkins 的 config.xml
mac 系統的檔案位置在使用者個人資料夾的 .jenkins 目錄下
vim ~/.jenkins/config.xml
打開後找到
<useSecurity>true</useSecurity>
改成
<useSecurity>false</useSecurity>
然後存檔重刷 Jenkins 頁面即可。

3-2) 可以讓 Jenkins 自動更新頁面嗎?

Jenkins 有時候會讓人誤會沒有新的 build 跑進來自動在 run,但其實有可能是瀏覽器沒有更新而已。所以 Jenkins 提供了一個「開啟自動更新頁面」的按鈕,會自動每隔幾秒刷新整個頁面(好啦有點爛沒有 ajax ,顯示上會有刷過白屏的感覺,但是起碼堪用就好)


以上就是今天的 Jenkins 自動建置介紹,謝謝收看。

留言

這個網誌中的熱門文章

Art Of War:Legions 兵種分析:升級哪個兵種能夠獲得最大的戰鬥力跟持續力

「深耕」一詞在不同領域的英文翻譯

[英文] will + be + Ving 用未來進行式表示持續一段時間的動作