軟件測(cè)試之契約測(cè)試
1. 為什么需要契約測(cè)試?
1.1?微服務(wù)
? ? 微服務(wù)本質(zhì)上是一種架構(gòu)模式,是面向服務(wù)架構(gòu)SOA的一種變種。與SOA的區(qū)別在于:SOA,要求綁定具體的技術(shù),微服務(wù)鼓勵(lì)用恰當(dāng)?shù)募夹g(shù)來(lái)實(shí)現(xiàn)。

? ?微服務(wù)提倡將單一應(yīng)用程序劃分成一組小的服務(wù),每個(gè)服務(wù)運(yùn)行在其獨(dú)立的進(jìn)程中,服務(wù)間采用輕量級(jí)的通信機(jī)制互相溝通(通常是基于HTTP協(xié)議的RESTful API)。每個(gè)服務(wù)都圍繞著具體業(yè)務(wù)進(jìn)行構(gòu)建,并且能夠被獨(dú)立的部署到生產(chǎn)環(huán)境、類生產(chǎn)環(huán)境等。
微服務(wù)架構(gòu)案例:


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?微服務(wù)不一定提供界面; 微服務(wù)還可以劃分為更小的模塊
微服務(wù)三要素:


契約是一種定義在服務(wù)提供者和調(diào)用者之間的交付方式,對(duì)于基于restful API的微服務(wù),它的契約指API的請(qǐng)求和響應(yīng)的規(guī)則。
1)請(qǐng)求,包括請(qǐng)求URL及參數(shù),請(qǐng)求頭,請(qǐng)求內(nèi)容等;
2)響應(yīng),包括狀態(tài)碼,響應(yīng)頭,響應(yīng)內(nèi)容等;
3)元數(shù)據(jù),指消費(fèi)者與提供者間一次交互過(guò)程的描述。例如消費(fèi)者/提供者的名稱、上下文及場(chǎng)景描述等。
案例:

1.2 微服務(wù)帶來(lái)的問(wèn)題
問(wèn)題案例1:

問(wèn)題案例2:

問(wèn)題案例3:

參見(jiàn)上述3個(gè)問(wèn)題案例,當(dāng)一個(gè)服務(wù)被多個(gè)使用者同時(shí)使用時(shí),如何保證服務(wù)的修改不會(huì)對(duì)其他所有使用者造成影響?多個(gè)服務(wù)場(chǎng)景,各個(gè)服務(wù)由獨(dú)立的團(tuán)隊(duì)開(kāi)發(fā),團(tuán)隊(duì)之間業(yè)務(wù)交流困難。微服務(wù)的提供方很可能會(huì)被多個(gè)服務(wù)調(diào)用,調(diào)用鏈路復(fù)雜,造成責(zé)任鏈混亂。服務(wù)等到API集成測(cè)試時(shí)才開(kāi)始驗(yàn)證,問(wèn)題反饋周期太長(zhǎng)。

1.3?微服務(wù)測(cè)試
微服務(wù)測(cè)試的挑戰(zhàn)

1、微服務(wù)測(cè)試原則
? ? ?? 自動(dòng)化 層次化 可視化
2、微服務(wù)測(cè)試方法

?

1.4 契約測(cè)試
? ? ?如1.1 &1.2所述,微服務(wù)架構(gòu)模式下,接口通常由服務(wù)提供方約定和提供,接口被多個(gè)消費(fèi)者調(diào)用更是常態(tài),提供方接口的變更如何快速、高效、無(wú)遺漏的通知給消費(fèi)者?當(dāng)服務(wù)同時(shí)被多個(gè)消費(fèi)者調(diào)用時(shí),如何保證對(duì)服務(wù)的修改的信息可以同步給他們消費(fèi)者?等等問(wèn)題,契約測(cè)試可以解決。
契約測(cè)試是驗(yàn)證服務(wù)的提供方是否按照期望的方式與服務(wù)的消費(fèi)者進(jìn)行交互(服務(wù)與服務(wù)間的API測(cè)試),通過(guò)解耦服務(wù)依賴關(guān)系和單元測(cè)試來(lái)加快測(cè)試的運(yùn)行效率,是隨著微服務(wù)架構(gòu)的興起而發(fā)展起來(lái)的測(cè)試活動(dòng)。

1.5 契約測(cè)試的目的
? ? ? ?為了測(cè)試服務(wù)之間連接或者說(shuō)接口調(diào)用的正確性,為了驗(yàn)證服務(wù)提供者的功能是不是真正能夠滿足消費(fèi)者的需求。(發(fā)現(xiàn)契約破壞而進(jìn)行的測(cè)試)它其實(shí)體現(xiàn)了測(cè)試前移的思想,把本來(lái)要通過(guò)集成測(cè)試才能驗(yàn)證的工作用更輕量的方式提前快速進(jìn)行驗(yàn)證。
1.6 契約測(cè)試的價(jià)值

2. 契約測(cè)試測(cè)什么?

3. 如何進(jìn)行契約測(cè)試?
3.1 測(cè)試流程

3.2 測(cè)試場(chǎng)景

3.3 測(cè)試方法
1)從Provider出發(fā):記錄Provider的行為,然后驗(yàn)證Consumer是否按照Provider期望的方式工作。該方法用的比較少。

來(lái)自 ThoughtWorks
2)從Consumer出發(fā):記錄Consumer的行為,然后驗(yàn)證Provider是否按照Consumer期望的方式工作。該方法用的比較的多,也是大家常提到的CDCT(Consumer-Driven Contract Test)測(cè)試。其核心思想是:從消費(fèi)者業(yè)務(wù)實(shí)現(xiàn)的角度出發(fā),由消費(fèi)者端定義需要的數(shù)據(jù)格式以及交互細(xì)節(jié),生成一份契約文件。然后生產(chǎn)者根據(jù)契約文件來(lái)實(shí)現(xiàn)自己的邏輯,并在持續(xù)集成環(huán)境中持續(xù)驗(yàn)證該實(shí)現(xiàn)結(jié)果是否正確。

來(lái)自 ThoughtWorks
3.4?測(cè)試工具
PACT:??輕量級(jí)、支持多種語(yǔ)言應(yīng)用、支持與?Maven/?Gradle?等集成
SCC:?支持基于?JVM?的應(yīng)用、支持與?Spring?其它組件集成

3.5?測(cè)試步驟

3.6?案例
1.?http://www.51testing.com/html/64/n-3726864-2.html
2.?https://www.cnblogs.com/heishao/p/10669623.html
3.?https://www.jianshu.com/p/ca82cde5b125
4.?https://www.cnblogs.com/jinjiangongzuoshi/p/7815243.html
5. https://www.bilibili.com/video/BV147411w7su?p=3