[資工] 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) 新增專案
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 測試報告結果」
這邊我們來新增一個讓 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 自動建置介紹,謝謝收看。
留言
張貼留言