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

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

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

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

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