譯者 | 陳峻
審校 | 重樓
出品 | 51CTO技術(shù)棧(微信號:blog51cto)
如今,軟件開發(fā)對于速度和靈活性的持續(xù)追求,催生了各種超越傳統(tǒng)界限的方法和實(shí)踐。而作為現(xiàn)代DevOps實(shí)踐的基石,持續(xù)測試的出現(xiàn)與發(fā)展,正好滿足了加速軟件交付的需求。下面,我將和您探討持續(xù)測試的最新發(fā)展,并重點(diǎn)關(guān)注它與微服務(wù)及無服務(wù)器架構(gòu)的緊密關(guān)系。
一、持續(xù)測試(Continuous Testing)基礎(chǔ)
持續(xù)測試是一種在軟件開發(fā)生命周期的每個(gè)階段,都需要進(jìn)行測試的做法。從單元測試到集成測試、乃至其他測試,這種方法都能夠協(xié)助盡早地發(fā)現(xiàn)和糾正缺陷,以確保軟件的質(zhì)量。它不只是單純的缺陷檢測,而是包含了一整套的方法集。其中,單元測試可以檢查單個(gè)組件,而集成測試則可以評估不同模塊之間的協(xié)作。因此,此方法不僅能夠最大限度地減少缺陷,還可以確保整體系統(tǒng)的穩(wěn)健性。可見,集成測試的意義在于促進(jìn)不斷改進(jìn)的循環(huán)。也就是說,測試的反饋意見可以為后續(xù)的開發(fā)周期提供可用于改進(jìn)的信息,從而創(chuàng)建一種持續(xù)改進(jìn)的文化。
二、微服務(wù)(Microservices):解碼復(fù)雜性
如今,微服務(wù)架構(gòu)已成為現(xiàn)代應(yīng)用開發(fā)的主導(dǎo)力量。它將單體應(yīng)用分解為更小的、更獨(dú)立的服務(wù),從而為軟件的開發(fā)和部署方式帶來范式上的轉(zhuǎn)變。雖然這種架構(gòu)具有可擴(kuò)展性和靈活性,但是也帶來了管理和測試大量分布式服務(wù)上的挑戰(zhàn)。因此,微服務(wù)的復(fù)雜性就需要我們采取更精細(xì)的測試策略,以實(shí)現(xiàn)其獨(dú)立的功能、以及相互關(guān)聯(lián)的特性。
分解測試策略
分解測試策略是有效進(jìn)行微服務(wù)測試的基礎(chǔ)。這種方法主張孤立地檢查每個(gè)微服務(wù)。它包括對單個(gè)服務(wù)進(jìn)行嚴(yán)格的測試,以確保其功能符合既定的規(guī)范,然后方可進(jìn)行全面的集成測試。這種有條不紊的方法不僅能在早期發(fā)現(xiàn)缺陷,還可以保證服務(wù)之間的無縫通信,以符合微服務(wù)的模塊化特性??梢哉f,該策略保障了在同一個(gè)測試生態(tài)系統(tǒng)中,每個(gè)微服務(wù)都被視為一個(gè)獨(dú)立的單元,為系統(tǒng)的整體可靠性做出貢獻(xiàn)。目前,屬于該類別的測試策略包括但不限于如下示例:
1.微服務(wù)單元測試
單元測試可被用于驗(yàn)證單個(gè)微服務(wù)的正確性。例如:如果您有一個(gè)負(fù)責(zé)用戶身份驗(yàn)證的微服務(wù),那么單元測試就會去檢查身份驗(yàn)證邏輯是否能夠正常工作,是否可以處理不同的輸入,以及是否能夠?qū)τ行c無效的身份驗(yàn)證嘗試做出適當(dāng)?shù)捻憫?yīng)。
2.微服務(wù)組件測試
組件測試可被用于測試一組相關(guān)的微服務(wù)或組件的功能。例如:在某個(gè)電子商務(wù)系統(tǒng)中,您可能擁有用于產(chǎn)品編目、庫存管理、以及訂單處理的不同微服務(wù)。那么組件測試將會涉及到驗(yàn)證這些微服務(wù)是否能夠無縫協(xié)作,以實(shí)現(xiàn)訂單提交、庫存檢查、以及產(chǎn)品目錄更新等流程。
3.合約測試
合約測試可以通過驗(yàn)證每個(gè)微服務(wù)是否遵守指定的接口和通信協(xié)議,以確保微服務(wù)之間的合約能夠得到切實(shí)的遵守。如果微服務(wù)A依賴微服務(wù)B的數(shù)據(jù),那么合約測試將驗(yàn)證微服務(wù)A能否正確地“消費(fèi)”由微服務(wù)B提供的數(shù)據(jù)。
4.微服務(wù)性能測試
微服務(wù)的性能測試包括評估其在各種負(fù)載下的響應(yīng)時(shí)間、可擴(kuò)展性、以及資源利用率。它將有助于在開發(fā)過程的早期,發(fā)現(xiàn)潛在的性能瓶頸。
5.微服務(wù)安全測試
微服務(wù)的安全測試會涉及到漏洞檢查,確保適當(dāng)?shù)纳矸蒡?yàn)證,授權(quán)機(jī)制是否到位,以及驗(yàn)證敏感數(shù)據(jù)是否得到了安全的處理。
6.故障注入測試
故障注入測試用于評估每個(gè)微服務(wù)對于故障的適應(yīng)能力。您可以故意向微服務(wù)注入諸如:網(wǎng)絡(luò)延遲或服務(wù)不可用等故障,以觀察其響應(yīng)情況。此類測試有助于確保微服務(wù)能夠從容地應(yīng)對各種意外故障。
7.隔離測試
隔離測試主要被用于驗(yàn)證微服務(wù)是否能夠獨(dú)立于其他服務(wù)運(yùn)行。隔離測試往往通過在測試微服務(wù)時(shí),模擬或刪除其依賴關(guān)系,以確保微服務(wù)能夠在隔離的狀態(tài)下運(yùn)行,從而避免了在實(shí)際環(huán)境中,造成隱藏的依賴關(guān)系問題。
8.服務(wù)虛擬化
微服務(wù)離不開服務(wù)虛擬化。它允許團(tuán)隊(duì)在受控環(huán)境中,模擬微服務(wù)的行為,從而兼顧了微服務(wù)的隔離與測試難題。服務(wù)虛擬化使得開發(fā)和測試團(tuán)隊(duì)有能力通過創(chuàng)建微服務(wù)的副本,在不依賴整個(gè)系統(tǒng)的情況下進(jìn)行隔離測試。這種方法不僅能夠加快測試的周期,還可以通過復(fù)刻真實(shí)場景,來提高結(jié)果的準(zhǔn)確性。作為一種推動力,它在確保全面測試的同時(shí),避免了對微服務(wù)生態(tài)系統(tǒng)所需的敏捷性產(chǎn)生潛在影響。
9.應(yīng)用接口測試
微服務(wù)在很大程度上也依賴于API來實(shí)現(xiàn)無縫通信。在驗(yàn)證這些關(guān)鍵性接口的可靠性和功能時(shí),強(qiáng)大的API測試顯得至關(guān)重要。API測試的方法主要包括仔細(xì)檢查每個(gè)API端點(diǎn)對于各種輸入、以及邊緣情況的響應(yīng)。此類檢查可以確保微服務(wù)能夠按照預(yù)期進(jìn)行有效的通信和數(shù)據(jù)交換。同時(shí),API測試不僅是對端點(diǎn)的驗(yàn)證,也是對整個(gè)通信框架的驗(yàn)證,它屬于微服務(wù)架構(gòu)的基礎(chǔ)層。
三、無服務(wù)器計(jì)算(Serverless Computing):徹底改變部署
無服務(wù)器計(jì)算通過將基礎(chǔ)設(shè)施的抽象化,讓開發(fā)人員可以只關(guān)注代碼,而無需管理底層服務(wù)器。無服務(wù)器計(jì)算在帶來高度可擴(kuò)展性和成本效益的同時(shí),也帶來了測試方法上的范式轉(zhuǎn)變。而為了確保無服務(wù)器應(yīng)用的可靠性,我們往往需要一些新的測試方法。
1.事件驅(qū)動測試
無服務(wù)器架構(gòu)往往通過事件驅(qū)動,來對觸發(fā)器和刺激做出響應(yīng)。事件驅(qū)動測試通常被用來驗(yàn)證由事件觸發(fā)的功能,是否有能力被完整執(zhí)行。其中一些方法不僅包括了仔細(xì)檢查被測功能對于特定事件的響應(yīng),還包括評估其針對動態(tài)的、不可預(yù)見的觸發(fā)因素的適應(yīng)性。也就是說,事件驅(qū)動測試可以確保無服務(wù)器應(yīng)用對于各種事件,做出準(zhǔn)確可靠的響應(yīng),從而提升了應(yīng)用防范潛在差異性的能力。這種方法對于在以事件為中心的環(huán)境中,保持無服務(wù)器功能的響應(yīng)性和完整性,是至關(guān)重要的。
2.冷啟動挑戰(zhàn)
無服務(wù)器功能在冷啟動期間往往面臨巨大的性能挑戰(zhàn)。持續(xù)的性能測試可以幫助無服務(wù)器功能,發(fā)現(xiàn)并解決從休眠狀態(tài)啟動時(shí)可能產(chǎn)生的延遲問題,進(jìn)而確保其發(fā)揮最佳性能。通過積極主動地應(yīng)對冷啟動挑戰(zhàn),無論無服務(wù)器功能的初始化狀態(tài)如何,開發(fā)團(tuán)隊(duì)都可以自信地實(shí)現(xiàn)無縫的用戶體驗(yàn)。
3.第三方服務(wù)集成
由于無服務(wù)器應(yīng)用通常也依賴與第三方服務(wù)的無縫集成,因此我們需要確保這些集成的兼容性和穩(wěn)健性,成為無服務(wù)器架構(gòu)持續(xù)測試的一個(gè)重要方面。其中,一種典型的方法是:對無服務(wù)器功能與第三方服務(wù)之間的交互進(jìn)行嚴(yán)格測試,驗(yàn)證數(shù)據(jù)交換是否順暢且正確。通過解決潛在的兼容性問題,以及確保集成的魯棒性,開發(fā)團(tuán)隊(duì)可以提升無服務(wù)器應(yīng)用的可靠性和穩(wěn)定性。
四、工具和技術(shù)
目前,業(yè)界有一系列旨在簡化微服務(wù)和無服務(wù)器架構(gòu)中測試流程的工具和技術(shù),可以被直接運(yùn)用到持續(xù)測試之中。這些工具不僅能夠促進(jìn)測試的開展,還可以提高測試生命周期的整體效率和效果。
1.微服務(wù)測試框架
JUnit、TestNG、Spock、Pytest和Behave等工具,都是在微服務(wù)綜合測試中非常實(shí)用的工具。這些框架通常都能夠支持單元測試、集成測試、以及端到端測試。
2.無服務(wù)器測試工具
AWS SAM(Serverless Application Model,無服務(wù)器應(yīng)用模型)、Serverless Framework、AWS Lambda Test、Azure Functions Core Tools和Serverless Offline等框架都是可以幫助您開發(fā)、測試和部署無服務(wù)器應(yīng)用的工具。它們具有如下不同的功能和用途:
- 作為一種工具,AWS SAM可讓您輕松地在AWS上開發(fā)和部署無服務(wù)器應(yīng)用。它提供了基于YAML的語法,以定義無服務(wù)器應(yīng)用,并與AWS CloudFormation相集成,以部署應(yīng)用。此外,AWS SAM還提供了一個(gè)本地開發(fā)環(huán)境,讓您可以在將應(yīng)用部署到AWS之前,對其進(jìn)行測試。
- Serverless Framework是一款支持在多個(gè)云服務(wù)提供商(包括AWS、Azure和Google Cloud Platform(GCP))上進(jìn)行無服務(wù)器部署的工具。它提供了一個(gè)CLI界面,可用于創(chuàng)建、更新和部署無服務(wù)器應(yīng)用。此外,Serverless Framework還提供了一個(gè)插件系統(tǒng),可以讓您使用第三方擴(kuò)展,來豐富其功能。
- AWS Lambda Test是一款可以讓您在本地測試AWS Lambda函數(shù)的工具。它提供了一個(gè)模擬的AWS Lambda環(huán)境,您可以用它來運(yùn)行您的函數(shù)并調(diào)試錯(cuò)誤。此外,AWS Lambda Test還可以為您的Lambda函數(shù)生成測試用例,從而幫助您提高代碼覆蓋率。
- Azure Functions Core Tools是一種可讓您在本地開發(fā)和測試Azure Functions的工具。它提供了用于創(chuàng)建、更新和運(yùn)行Azure Functions的CLI界面。此外,Azure Functions Core Tools還可以為您的Azure Functions生成測試用例,從而幫助您提高代碼覆蓋率。
- 獨(dú)立于云提供商的Serverless Offline是一款可讓您在本地測試無服務(wù)器應(yīng)用的工具。它提供了一個(gè)模擬的云端環(huán)境,您可以用它來運(yùn)行無服務(wù)器應(yīng)用并調(diào)試錯(cuò)誤。此外,Serverless Offline還能夠?yàn)槟臒o服務(wù)器應(yīng)用生成測試用例,并幫助您提高代碼覆蓋率。
下面的表格總結(jié)了上述五種工具的主要區(qū)別:
特點(diǎn) | AWS SAM | Serverless Framework | AWS Lambda Test | Azure Functions Core Tools | Serverless Offline |
云提供商支持 | AWS | AWS、Azure、GCP | AWS | Azure | 多云 |
部署 | 基于 YAML 的語法與 AWS CloudFormation 集成 | CLI 界面 | 不支持 | CLI 界面 | 不支持 |
本地發(fā)展環(huán)境 | 是 | 是 | 是 | 是 | 是 |
插件系統(tǒng) | 沒有 | 是 | 沒有 | 沒有 | 沒有 |
測試用例生成 | 是 | 沒有 | 是 | 是 | 是 |
3.CI/CD 集成
持續(xù)測試與CI/CD管道的無縫集成,形成了一套強(qiáng)大的自動化測試流程。Jenkins、GitLab CI和Travis CI等工具可以協(xié)調(diào)整個(gè)測試工作流程,以確保每個(gè)代碼的變更在部署之前都經(jīng)過了嚴(yán)格的測試??偟恼f來,由持續(xù)測試與CI/CD管道集成所提供的機(jī)制,既能夠保證軟件的質(zhì)量,又可以達(dá)到如今數(shù)字化要求的速度。
五、結(jié)束語
綜上所述,由于持續(xù)測試能夠在整個(gè)開發(fā)過程中持續(xù)檢查軟件的問題和錯(cuò)誤,因此已成為了快速、可靠地交付軟件過程的重要一環(huán)。隨著微服務(wù)和無服務(wù)器架構(gòu)不斷重塑軟件應(yīng)用的格局,持續(xù)測試的作用將變得更加突出。面對各種創(chuàng)新架構(gòu)所帶來的挑戰(zhàn),我們需要善于利用最新的工具和方法,讓開發(fā)團(tuán)隊(duì)跟上快速迭代的需求,交付出高質(zhì)量的軟件。
鏈接:https://dzone.com/articles/continuous-testing-in-the-era-of-microservices-and