一文搞定微服務測試本質
最近幾年微服務架構越來越火爆,逐漸被企業所采用。隨著軟件架構的變化,對應的軟件測試策略需要作何調整呢?在這里我來先介紹一下微服務的相關概念以及微服務的主流框架SpringCloud,讓大家對微服務有一個整體的認識,然后我再對如何進行微服務測試進行概要講解。相信大家認真閱讀本文后,對服微務一定會有從0到1的突破!
微服務概念
微服務英文名稱Microservice,微服務架構模式就是將整個Web應用組織為一系列小的Web服務。這些小的Web服務可以獨立地編譯及部署,并通過各自暴露的API接口相互通訊。它們彼此相互協作,作為一個整體為用戶提供功能,卻可以獨立地進行擴展。
要點
- 微服務的基本思想在于考慮圍繞著業務領域組件來創建應用;
- 微服務主要框架包括:Dubbo、Spring Cloud、 Istio ;
- 對于互聯網談到微服務架構一定會談到Devops即開發測試和部署運維的一體化;
- 微服務簡化了開發,它將創建復雜系統的任務切分為數十乃至上百個小服務,這些小服務易于被小型的軟件工程師團隊所理解和修改。但是微服務并未真正地消除復雜性,而是將復雜性遷移到對大量服務的連接、管理和監控上;
- 微服務與SOA,微服務是SOA發展出來的產物,它是一種比較現代化的細粒度的SOA實現方式;
傳統服務與微服務的區別

大家可以看到,傳統服務是所有的功能都部署在一臺機器上(上圖左),通過增加服務器數量來擴容!而微服務是以業務為單位進行部署,不同的業務部署在不同的服務器上,業務使用頻繁的還可以使用更多的資源進行部署(上圖右側,橘黃色部署了5個單元,而玫紅色只部署了一個單元),這樣就可以更合理的利用資源了!
傳統設計與微服務在數據庫方面設計的區別

大家可以看到傳統服務的所有功能對應一個DB (上圖左),而微服務可以根據不同的業務設計不同的DB (上圖右,可以一個業務對應一個獨立的DB)
微服務架構設計核心
1:我們把整個系統根據業務拆分成幾個子系統。
2:每個子系統可以部署多個應用,多個應用之間使用負載均衡。
3:需要一個服務注冊中心,所有的服務都在注冊中心注冊,負載均衡也是通過在注冊中心注冊的服務來使用一定策略來實現。
4:所有的客戶端都通過同一個網關地址訪問后臺的服務,通過路由配置,網關來判斷一個URL請求由哪個服務處理。請求轉發到服務上的時候也使用負載均衡。
5:服務之間有時候也需要相互訪問。例如有一個用戶模塊,其他服務在處理一些業務的時候,要獲取用戶服務的用戶數據。
6:需要一個斷路器,及時處理服務調用時的超時和錯誤,防止由于其中一個服務的問題而導致整體系統的癱瘓。
7:還需要一個監控功能,監控每個服務調用花費的時間等
SpringCloud
Spring Cloud是基于SpringBoot的一整套實現微服務的框架。他提供了微服務開發所需的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分布式會話和集群狀態管理等組件。
官網:https://springcloud.cc/
特點:
- 分布式/版本化配置
- 服務注冊和發現
- 路由
- service - to - service調用
- 負載均衡
- 斷路器
- 分布式消息傳遞
SpringCloud包括的主要組件如下圖:

一個Spring Cloud 工程的pom配置文件如下,大家可以簡單的理解為在SpringCloud
工程的pom.xml中,你需要什么功能,把它直接引入工程就可以了

在這里由于我們主要介紹微服務概念,所以就不過多解釋springcloud相關的開發內容了。
微服務測試
- 前端UI
與傳統測試沒有區別,因為你只做功能那么你感受不到架構的變化!
- 服務端
微服務通常使用通過HTTP的REST來暴露,因此微服務的測試等價于接口測試。對微服務提供的接口進行功能、性能、安全測試,具體測試方法如下:
1.通過構建請求調用各個微服務接口,可以通過編碼或者工具模擬的方式完成。
編碼:python(unittest+requests);Java(junit4+httpclient)
工具模擬:jMeter、soupUI、postman等
2.請求的驗證:除了驗證接口的返回值外,還要關注負載均衡(請求是否分發到多點應用)
3.監控:通過工具 SpringCloud Sleuth、 Turbine、Prometheus進行監控
4.日志:通過ELK( ElasticStack )來集中化管理日志
- 重點:
微服務架構下,既需要保障各服務內部每個模塊的完整性,又需要關注模塊間、服務間的交互。
- 難點:
1.關聯性:微服務通常情況下會與多個微服務進行交互。當某服務發生變化時,會直接影響到依賴的其他服務。
2.可靠性:為了盡可能降低微服務間通信對網絡情況的高度依賴,降低因網絡不穩定引起的故障率,設計微服務架構時會設計隔離機制。
3.數據一致性:微服務是基于分布式系統設計的,這就需要考慮分布式系統數據一致性的問題。