已經有測試專案的基本架構,接下來會透過 CI / CD 工具 - Jenkins 把整個流程串接起來,使得提交程式碼以後,整個測試流程可以自動執行,並生成報告 和 發送通知。
CI = Continuous Integration 持續整合
是一個開發實踐,要求開發人員將他們的 Source Code 頻繁地合併到共享存儲庫中。每次合併後,系統會自動進行一系列測試,包括 Unit Test、Integration Test 等,以確保新 Source Code 的質量,有助於及早發現和解決問題。
CD = Continuous Delivery / Deployment 持續交付 / 佈署
主要是指將經過測試的 Source code 進行部署
持續部署: 每次通過測試的 Source Code 都會 自動部署
持續交付: 在 Source Code 通過測試後,等待人工觸發進行部署
優點:
為實踐 CI/CD 的流程,有很多 CI/CD 的工具能夠自動化軟體開發的不同階段,包括 Build Code、測試、部署和監控,從而實現快速交付高質量的軟體。一些常見的 CI/CD 工具包括: Jenkins、Circle CI,GitLab CI、GitHub Actions 等。
這裡選擇使用 Jenkins 講解,Jenkins 是一個開源的自動化服務器,可以用於執行各種自動化任務,包括持續整合和持續部署。它具有豐富的插件生態系統,而且具備清晰易用的使用介面,比較適合初學者學習使用,它亦是目前大部分公司都在使用的工具。
根據你的 OS 系統到 官網 下載 Jenkins,內有安裝教學。
使用 Jenkins 需要安裝 Java,請參看 官方文件 對 Java 版本的需求,目前的話需要版本 11 / 17。
安裝完成以後,在瀏覽器使用網址 http://localhost:8080 即可開啟 Jenkins 的頁面。然後跟著流程設定,若對 Plugin 的沒有特別需求的話,選擇 Install Suggested Plugin
即可。
Source Code Manager:
我們的專案都會使用到 Git,所以 Jenkins 需要跟 Git 的 Source Code Manager 作串接。我這裡會用 Github 作示範,了解如何操作,其他的 Git Service (I.e. Gitlab, Bitbucket) 的做法也是相似。
需要讓 Jenkins 串接,要有 Repository 的 URL 和取得資源的權限。
Step 1: Repository 的 URL 可以在 Github Repository 取得。
點選 Code > Local Tab > HTTPS > Copy URL,再貼到 Jenkins 的 Repository URL
Step 2: 在 Github 建立 Personal Access Token,
點選右上角的 Account Menu > Settings > Developer Settings > Personal Access Token > Tokens (Classic)
Generate new token > Generate new token (classic)
輸入 Token 的名稱 > 選擇 Token 的時限 > Select scopes 可按需求選擇,目前先什麼都不用選便可以了。
確認以後,就可以 Copy Token 了,Token 內容只會出現一次,離開頁面就不能再查看了,需要的話自行存放。
Step 3: 取得 Token 以後,回到 Jenkins 的頁面,會以 Credentials 來儲存 username 和 token。
在軟體開發和系統管理中,Credential(憑證) 是用於驗證身份和授予權限的敏感信息的一種通用術語。它可以是用戶名、密碼、金鑰等數據,用於確保只有授權的人員能夠訪問系統、服務或資源。
在 Credentials 下點選 Add
類型為 Username and Password,Username 輸入 GitHub 的 username,Password 則為剛取得的 Token,ID 跟 Description 選填,用作提示這個 Credential 是什麼資訊。
Build Step
串接 Github 以後,Jenkins 便可下載 Repo 的 Source Code 到這個 Job 的 Workspace,然後在這 Workspace 執行以下設定的指令。
Window 請選用 Execute Windows batch command
,而 Mac 請用 Execute Shell
,加入 Command pytest
以執行測試。
若出現 pytest command not found。通常是因為系統除了默認的環境以外,還有其他 Python 環境。
- 可使用 Command
python3 -m pytest
來指定使用 Python3。- 或是設定環境變數指定應用 Python 的路徑
export $PATH:<python location>
點選 Save 以後,再點 Build Job 則會開始執行,成功的話左邊的 Build History 會亮錄燈。該數字為 Build 的流水號,稱為 Build ID,點擊會顯示該次 Build 的資訊。
查看 Console Output 可以查看 Job 的執行資訊。
以上,就可以建立一個 Jenkins Job 進行 Automation test。
需要清楚目前身在的位置,遇到問題才比較知道要怎樣處理。
Job 執行一次後,就會看到 Workspace,可以點進去看,將會是從 Repo 拉下來的 Source Code。
Jenkins Job 是從 Workspace 作為起始位置。
知道如何使用 Jenkins 執行 Automation Test 後,我們還需要 Allure Report 套件,讓測試執行可以生成報告。
先到 Jenkins 的 Plugin 下載並安裝 Allure Report。
Home > Manage Jenkins > Plugins > Available Plugins > 搜尋 “Allure” > 點選 > Install without restart
設定 Allure Command Line
Home > Manage Jenkins > Tools > Add Allure Commandline > 輸入 Name > 點選 Install automatically > Save
修改測試的 Job ,在最後的 Post-Build Actions 點選 Allure Report。它會預設在本 Job 的 Workspace 讀取名為 allure-results
的資料夾,利用該測試結果資料生成測試報告。
最後執行 pytest
要加上參數 --alluredir=allure-results
使生成的測試結果存放到 allure-results 資料夾。若參數已可加在專案中 pytest.ini
的 addopts
中則可忽略此步驟。
重新執行,將會產出 Allure Report 的報告,點擊 Allure Report 連結便可查看內容。
自動化測試流程的最後一步就是發送通知,主要看習慣使用的即時通訊軟件 (I.e. Discord, Slack) 或是 Email 等等,根據需求設定。我這裡以 Discord 作為範例。
先在 Jenkins 安裝 Discord 的套件
Home > Manage Jenkins > Plugins > Available Plugins > 搜尋 Discord Notifier
> 點選 > Install without restart
到 Discord 生成 Webhook URL,是由 Discord 提供的 URL,讓 Jenkins 可以透過這支 API 發送訊息到 Discord。(基本上其他通訊軟件做法也是相似)
選取要發送通知的伺服器 > 伺服器設定 > 整合 > 建立 Webhook > 複製 Webhook 的網址
修改 Job 的內容,在 Post-Build Action 會多了 Discord Notifier 的選項,輸入剛複製的 Webhook URL 便可,Advanced 的內容可根據需求加入。
重新執行,就會發送通知到 Discord 了
可以設定 Jenkins Job 什麼時候自動執行,可以是時間的設定,也可以是透過被觸發的方式。
一樣進來 Job 的 Configure
,在 Build Tiggers
勾選 Build periodically
,然後就可以設定 Schedule,可以點選 ?
參看輸入的規則。
這裡要輸入 5 個值 MINUTE HOUR DOM MONTH DOW
MINUTE
代表分鐘,可以是 (0-59),但系統會建議使用 H
以代表在該小時內的任意時間執行一次
HOUR
代表小時,可以是 (0-23) 或是填 *
表示不指定
DOM
代表每月的幾號,可以是 (1-31) 或是填 *
表示不指定
MONTH
代表月份,可以是 (1-12) 或是填 *
表示不指定
DOW
代表每周幾,可以是 (1-12) 或是填 *
表示不指定
I.e. 每天早上 9 點
執行: H 9 * * *
I.e. 平日早上 10 點半
執行: 30 10 * * 1-5
I.e. 星期一, 三, 五早上 10 點
執行: H 10 * * 1,3,5
I.e. 每月 1 號 10 點
執行: H 10 1 * *
可以自行在 Schedule 試用喔,輸入以後,會在輸入格下顯示所設定的時間來確認是否輸入正確。
勾選 Trigger builds remotely,自行設定 Token。
另外,還需要為 Jenkins User 建一個 API token 才得到權限使用這支 API
在 Manage Jenkins > Users > 點選賦予權限的 User > 設定,在 API Token 點選 Add new Token > 輸入名字 > 點 Generate > 產出 API Token。
API Token 內容需自行保存,因為系統不會顯示第 2 次
然後就可以透過提供的 URL 來觸發執行:
http://<jenkins_user>:<api_token>@<jenkins-server>/job/<job>/build?token=<job_token>
# 可透過 curl 指令在 Terminal 執行測試:
curl -X POST http://admin:<token>@localhost:8080/job/Automation%20Test/build?token=AutomationTEST
Job 有被觸發執行就代表成功了。所以可以透過打 API 的方式觸發 Jenkins Job 執行,這樣我們就可以被其他流程結束後自動觸發,例如 Developer 在 Git Service 上 Merge Code 並 Deploy 完成後,就可以打這支 API 來觸發,使自動化測試執行,讓整個流程自動化。
就是這樣,完成各種的設定就把整個 Automation Test 流程的基礎建設都串起來了。
接下來就開始再進行較深入探討測試專案的架構設計吧。