Testing in CI/CD
Testing in general:
- 最簡單且基本的就是unit tests
- 但是現實我們往往測試得更多!
- 因為我們不會希望改版時造成損壞例如
- 1.Code not working(程式邏輯問題等)
- 2.performance
- 3.Security issues
Deliver application to end users
有許多種類的測試:
- 自動化測試
- 手動測試
- 但是一般情況下,我們會希望有足夠多的自動化測試來取代手動測試部分
撰寫許多自動化測試來驗證應用程式的各種方面:
- Unit Testing:最基本的局部測試應用程式或甚至單一Function
- Functional Testing:驗證軟體的Functionality
- Integration Testing:在程式集合運作過程驗證局部的應用程式功能,例如前後端溝通,或是微服務的中介服務
- 還有其他各式各樣工程師還會有許多種測試
- UI Testing…
- API Testing…
- Regression Testing…
上述這些都可以統稱為 →
Functionality Related Tests
另外還有很重要的一塊是屬於 →
Security Related Tests
Security Related Tests如:
- Validate application’s security(應用程式安全性驗證
- vulnerability scanning (弱點分析)
- penetration testing(滲透測試)
- 其中還有一個就是SAST(Static Application Security Testing)
- ...etc
SAST(Static Application Security Testing):
- 靜態地分析程式碼的弱點
- 例如SQL injection,Cross-site scripting,buffer overflows,…
另外還有另一種Security相關的測試
DAST(Dynamic application security testing)i.e.黑箱:
- 分析運作中的應用程式
- 模擬駭客行為,從外部測試,沒有額外的知識技術需求的測試
接下來就要問 →何時進行測試?
通常在完整的CICD流程中
Functionality Related Tests部分
- Unit Testing會安排在CICD前半流程中
- Integration Testing會安排在CICD後半流程
Security Related Tests部分
- SAST會安排在CICD前半流程中
- DAST會安排在CICD後半流程
而以上這些工作其實會比較屬於測試工程師或QA等角色安排配合進行!
而這邊只是會引用SAST且是由GitLab本身提供的Job
不用去完全理解裡面怎麼進行,但是引用後就能得到測試的結果!
Template for SAST
針對各種任務的Job Templates是基於各種程式語言與技術
其中我們會用到是SAST的.gitlab-ci.yml
來進行"Out-of-the-box Functionality" 測試!
GitLab Job Templates
GitLab Job Templates:
- Templates Job的*.gitlab-ci.yml相比於我們自己的pipeline的Job
- 都是通用的,並且可重複使用於我們的各種程式專案上
- 並且可以透過參數來客製化一些行為
各是GitLab上各式可用的Templates連結(LINK):
往下拉還有各語言的:
其中上面這個連結進去:
找到實際的SAST.gitlab-ci.yml:
而使用上就是將SAST.gitlab-ci.yml合併到我們自己的.gitlab-ci.yml
變成單一個.gitlab-ci.yml來使用!
Include SAST Template
直接在Pipeline的程式內容最後寫上....
然後我們要測試的是nodejs
所以先在SAST.gitlab-ci.yml裡面找到
接下來在我們的Pipeline內的單元測試下面加入:
所以目前Pipeline內容為:
commit後看結果!
進到Pipeline頁面看到
那三個測試就是由Jobs/SAST.gitlab-ci.yml帶進來的!
跑完後可以大致看一下裡面的log:
另一個:
最後一個:
Pipeline跑完後可以看到:
Pipeline Templates
除了上面的Job Template之外
另一個值得注意的是Pipeline Templates!
Pipeline Templates:
- 提供end-to-end的CICD workflow
額外建立一個空白沒有Pipeline的專案:
進到pipeline設定頁面
可能常用的會是:
這邊隨便點一個Maven的會看到:
然後就可以依據這份來改成理想的Pipeline