契約測試:解決微服務(wù)測試的問題

契約測試:解決微服務(wù)測試的問題

FROM https://blog.csdn.net/crisschan/article/details/88310201

為什么是契約測試

契約測試(ContractTest)第一次看到我是在Martin Fowler的文章里。(原文在這里感興趣的可以去看看https://martinfowler.com/bliki/ContractTest.html

在他的這篇文章了,首先說了一下TestDouble的劣勢椎扬,其中TestDouble(對這個定義感興趣可以見https://martinfowler.com/bliki/TestDouble.html

其實我們也很少提及。為了解釋契約測試遂跟,我們在本文吧TestDouble替換成MOCK,這也行并不正確,但是可以快速讓我們理解。

MOCK服務(wù)相信很多人都知道主要是用了幫助解決外部依賴而存在的纤控。在兩個團隊分別負責(zé)Service1和Service2的開發(fā),其中Service1調(diào)用Service2碉纺。在測試過程中很容易由于Service1和Service2之間網(wǎng)絡(luò)速度、服務(wù)不穩(wěn)定等問題導(dǎo)致的無法測試Service1刻撒,那么這個時候我們很多人第一個想到的是Service2用MOCK服務(wù)替代掉骨田。這也確實是一個行之有效的方法。

但是現(xiàn)在開發(fā)周期声怔、迭代周期和迭代頻率都在變短态贤、變快,如果Service1在開發(fā)或者測試的使用應(yīng)用了Service2的MOCK服務(wù)醋火,同時Service2也被自己的Own團隊進行了升級迭代悠汽,但是Service1調(diào)用的MOCK服務(wù)沒有升級,這就導(dǎo)致了集成測試的時候才能發(fā)現(xiàn)兩邊不一致的問題芥驳,這將大大影響項目或者迭代周期的進度柿冲。

在微服務(wù)大行其道的今天,各種服務(wù)接口(provider)又被各種服務(wù)調(diào)用(comsumer)兆旬,生產(chǎn)者消費者模式就促生了契約測試(更應(yīng)該叫消費者驅(qū)動的契約測試假抄,Cunsumer-Driven Contracts,簡稱CDC)丽猬,CDC就是從消費者的角度定義測試宿饱,通過給API提供方提供契約的形式,來完成功能的實現(xiàn)脚祟。當(dāng)今比較主流的CDC測試框架有PACT(https://github.com/pact-foundation/pact-specification

cdc核心原則(轉(zhuǎn)自:https://www.cnblogs.com/jinjiangongzuoshi/p/7815243.html):

cdc是以消費者提出接口契約谬以,交由服務(wù)提供方實現(xiàn),并以測試用例對契約進行產(chǎn)生約束由桌,所以服務(wù)提供方在滿足測試用例的情況下可以自行更改接口或架構(gòu)實現(xiàn)而不影響消費者为黎。

cdc是一種針對外部服務(wù)的接口進行的測試邮丰,它能夠驗證服務(wù)是否滿足消費方期待的契約。 它的本質(zhì)是從利益相關(guān)者的目標(biāo)和動機出發(fā)碍舍,最大限度地滿足需求方的業(yè)務(wù)價值實現(xiàn)柠座。

Pact的契約測試流程

如上圖,使用Pact完成契約測試后片橡,首先我們還是按照原來的測試用例對Consumer進行測試妈经,在需要Consumer和Provider發(fā)生交互的時候,Provider被替換成和Pact交互捧书。在測試過程中吹泡,Pact會記錄下全部的Provider的調(diào)用請求(保存在一個Json文件中),這就是消費者的契約经瓷。如果在執(zhí)行Provider的測試的時候爆哑,就不需要從新完成Provider的測試用例,只需將Pact記錄下來的消費者契約作為測試的輸入舆吮,完成和Provider的交互揭朝,來驗證Provider是否滿足了消費者契約。

這也說明了契約測試既不是單元測試也不是集成測試色冀,是出于單元測試和集成測試之間的一層測試行為潭袱。

Pact官方給出的幾個場景:

(轉(zhuǎn)自: https://insights.thoughtworks.cn/about-contract-test/

適用場景:

團隊能把控開發(fā)過程中的Consumer和Provider端
適合Consumer驅(qū)動開發(fā)的場景
對于每個獨立的Consumer端,Provider端都能管理好需求锋恬。

不適用的場景:

公共API或者是OAuth授權(quán)服務(wù)
Provider端和Consumer端沒有良好的溝通渠道
針對性能的測試
Provider端的功能性測試(Pact只測試內(nèi)容和請求格式)
對于不同輸入有相同的輸出屯换,并未達到驗證的目的
當(dāng)前測試輸入需要依賴之前測試返回的結(jié)果

參考

https://www.cnblogs.com/jinjiangongzuoshi/p/7815243.html
http://aleung.github.io/blog/2017/06/21/pact/
https://insights.thoughtworks.cn/about-contract-test/

關(guān)注我,關(guān)注測試
FROM:https://blog.csdn.net/crisschan

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末与学,一起剝皮案震驚了整個濱河市彤悔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌索守,老刑警劉巖晕窑,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蕾盯,居然都是意外死亡幕屹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門级遭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來望拖,“玉大人,你說我怎么就攤上這事挫鸽∷得簦” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵丢郊,是天一觀的道長盔沫。 經(jīng)常有香客問我医咨,道長,這世上最難降的妖魔是什么架诞? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任拟淮,我火速辦了婚禮,結(jié)果婚禮上谴忧,老公的妹妹穿的比我還像新娘很泊。我一直安慰自己,他們只是感情好沾谓,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布委造。 她就那樣靜靜地躺著,像睡著了一般均驶。 火紅的嫁衣襯著肌膚如雪昏兆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天妇穴,我揣著相機與錄音爬虱,去河邊找鬼。 笑死腾它,一個胖子當(dāng)著我的面吹牛饮潦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播携狭,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼回俐!你這毒婦竟也來了逛腿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤仅颇,失蹤者是張志新(化名)和其女友劉穎单默,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忘瓦,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡搁廓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了耕皮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片境蜕。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖凌停,靈堂內(nèi)的尸體忽然破棺而出粱年,到底是詐尸還是另有隱情,我是刑警寧澤罚拟,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布台诗,位于F島的核電站完箩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拉队。R本人自食惡果不足惜弊知,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望粱快。 院中可真熱鬧秩彤,春花似錦、人聲如沸皆尔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慷蠕。三九已至珊拼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間流炕,已是汗流浹背澎现。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留每辟,地道東北人剑辫。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像渠欺,于是被迫代替她去往敵國和親妹蔽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 如今挠将,契約測試已經(jīng)逐漸成為測試圈中一個炙手可熱的話題胳岂,特別是在微服務(wù)大行其道的行業(yè)背景下,越來越多的團隊開始關(guān)注服...
    ariman閱讀 12,534評論 28 33
  • 正如大家所知,最初QA都是手動執(zhí)行測試用例内贮,開發(fā)人員每修改一個版本产园,QA就要手動測試一遍,隨著功能的不斷增加夜郁,手動...
    ThoughtWorks閱讀 2,832評論 1 18
  • 背景 在當(dāng)前微服務(wù)和前后端分離大行其道的行業(yè)背景下什燕,越來越多的團隊采用了前后端分離和微服務(wù)的架構(gòu)風(fēng)格。該服務(wù)架構(gòu)下...
    博客已遷移I米陽閱讀 24,383評論 2 18
  • 什么是契約 如果從契約產(chǎn)生的階段來說竞端,現(xiàn)有資料表明最早要追溯到西周時期的《周恭王三年裘衛(wèi)典田契》秋冰,將契約文字刻寫在...
    ThoughtWorks閱讀 2,952評論 1 12
  • 是的既然如此,它的意義在哪里呢婶熬?我就是帶著這樣的疑問進了現(xiàn)在的項目組 - API剑勾, Application Pro...
    冥冥_ddb0閱讀 551評論 1 1