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

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

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

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

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