Pact中文參考指南

Pact是什么

Pact是一個用于實現(xiàn)消費者驅(qū)動的契約測試的框架。關(guān)于什么是消費者驅(qū)動的契約測試,可以參見這篇文章喘漏,不再贅述。這里只說明契約測試對于構(gòu)建復(fù)雜軟件系統(tǒng)的重要作用华烟。

系統(tǒng)工程里有這樣一個規(guī)律翩迈,線性系統(tǒng)(即復(fù)雜性隨規(guī)模線性增長的系統(tǒng))的可靠性等于組成它的各個組件的可靠性之乘積。這容易理解盔夜,因為整個系統(tǒng)正常工作的條件是必須每個組件都同時正常工作负饲。


線性系統(tǒng)的可靠性

也就是說,如果一個系統(tǒng)由三個可靠性各為90%的組件組成喂链,那么整個系統(tǒng)的可靠性實際只有90%×90%×90%=72.9%返十,低于任一組件的可靠性。如果一個系統(tǒng)由100個組件組成衩藤,每個組件即使能達到99%的可靠性吧慢,那么整個系統(tǒng)的可靠性也會降到36.6%左右。

然而赏表,一個復(fù)雜軟件系統(tǒng)的情形可能更糟检诗,因為軟件系統(tǒng)實際上是非線性系統(tǒng)匈仗。組成軟件系統(tǒng)的各個組件之間有依賴與連接關(guān)系,除了要讓每個組件正常工作之外逢慌,還需要保證各個組件之間的調(diào)用正常悠轩。如果將每個組件視為一個微服務(wù)的話,每個微服務(wù)上暴露出的接口不止一個攻泼,組件兩兩之間的連接關(guān)系又不止一條火架。如此算來,在微服務(wù)規(guī)模不斷增長的情況下忙菠,系統(tǒng)的復(fù)雜度已不止線性增長何鸡,因此整個系統(tǒng)的可靠性將會比各組件可靠性的乘積還要更低。

因此牛欢,在構(gòu)建由微服務(wù)組成的復(fù)雜軟件系統(tǒng)時骡男,除了保證每個微服務(wù)組件的正確性之外,還必須通過測試驗證微服務(wù)之間連接的正確性傍睹。

Pact框架解決的就是如何測試微服務(wù)之間連接正確性的問題隔盛。

傳統(tǒng)方式下,一般通過集成測試來驗證服務(wù)之間調(diào)用是否正常拾稳,這需要將被測的各個組件均部署到環(huán)境中吮炕,然后再展開測試,且不說這種方式下測試運行得如何之慢访得,只是把各個服務(wù)都部署到同一環(huán)境之中這件工作龙亲,對于許多經(jīng)常搭環(huán)境的開發(fā)者來說,就已經(jīng)非常繁瑣而痛苦了悍抑。而且由于多個服務(wù)共享同一環(huán)境俱笛,測試也比較脆弱,很容易掛传趾。

Pact是一個思路精巧、設(shè)計優(yōu)雅的測試框架泥技。它通過將一個笨重的集成測試化為兩個可以獨立運行的單元測試和接口測試來解決這一問題浆兰。兩步即可完成:

  • Step 1: 服務(wù)消費者端編寫單元測試,測試對服務(wù)提供者接口的客戶端請求類珊豹。一運行測試簸呈,Pact框架便幫助自動生成json形式的pact文件(契約文件)。pact文件中含有交互的路徑店茶、方法蜕便、請求參數(shù)、請求頭與期望響應(yīng)等信息贩幻。

  • Step 2: 單獨啟動服務(wù)提供者(此時并不需要啟動服務(wù)消費者)轿腺,利用Pact框架提供的驗證命令進行契約驗證两嘴,基于上一步中生成的pact文件,對服務(wù)提供者的接口發(fā)送請求并驗證實際響應(yīng)是否與期望響應(yīng)相符族壳。

這種方式至少有明顯的幾個好處:

  • 服務(wù)測試解耦憔辫。兩個測試之間唯一的耦合點是pact文件(自動生成),自然實現(xiàn)了服務(wù)消費者端與提供者端的測試解耦仿荆,再也不需要等待“聯(lián)調(diào)”就能各自展開開發(fā)贰您。

  • 消費者驅(qū)動。由于契約文件是由服務(wù)消費者的單元測試驅(qū)動而成的拢操,服務(wù)提供者只要能夠正確通過契約驗證锦亦,就能保證滿足服務(wù)消費者端的需求。這一思想其實與敏捷實踐中的測試驅(qū)動開發(fā)(TDD)有異曲同工之處令境。

  • 測試前移杠园。越早發(fā)現(xiàn)問題,解決問題的成本就越小展父。由于Pact測試已經(jīng)足夠輕量化返劲,開發(fā)者甚至在本地開發(fā)階段就可以進行相關(guān)的測試,而不需要等到集成階段才暴露問題栖茉。

Pact的前世今生

Pact是一個開源框架篮绿,最早是由澳洲最大的房地產(chǎn)信息提供商REA Group的開發(fā)者及咨詢師們共同創(chuàng)造。REA Group的開發(fā)團隊很早便在項目中使用了微服務(wù)架構(gòu)吕漂,并在團隊中對于敏捷和測試的重要性早已形成共識亲配,因此設(shè)計出這樣的優(yōu)秀框架并應(yīng)用于日常工作中也是十分自然。

Pact工具于2013年開始開源惶凝,發(fā)展到今天已然形成了一個小的生態(tài)圈吼虎,包括各種語言(Ruby/Java/.NET/JavaScript/Go/Scala/Groovy...)下的Pact實現(xiàn),契約文件共享工具Pact Broker等苍鲜。Pact的用戶已經(jīng)遍及包括RedHat思灰、IBM、Accenture等在內(nèi)的若干知名公司混滔,Pact已經(jīng)是事實上的契約測試方面的業(yè)界標準洒疚。

Pact中文參考指南

雖然在國外的許多互聯(lián)網(wǎng)開發(fā)團隊中,Pact已經(jīng)得到了廣泛應(yīng)用坯屿,但是由于英語水平的限制和交流的問題油湖,國內(nèi)許多團隊對Pact還知之甚少,對于具體使用時應(yīng)該遵循怎樣的原則和實踐更是缺乏足夠的了解领跛。

因此我們得到Pact作者們的允許乏德,基于Pact的官方文檔,翻譯出了這份《Pact中文參考指南》吠昭,幫助國內(nèi)開發(fā)者們了解和使用這一優(yōu)秀框架喊括。歡迎大家參考和提出修正意見胧瓜。

我們是誰,為什么要做這個

我們是一個虛擬的團隊:Cloud Native User Group瘾晃,主要關(guān)注云原生應(yīng)用贷痪、DevOps、持續(xù)交付等方面的技術(shù)與實踐蹦误,以及探討如何幫助傳統(tǒng)業(yè)務(wù)在云計算時代下實現(xiàn)云原生轉(zhuǎn)型劫拢。

我們致力于為國內(nèi)開發(fā)者團隊引入業(yè)界最新的軟件工程模式、技術(shù)與工具强胰,幫助消除因語言而造成的鴻溝舱沧。我們相信技術(shù)的溝通是無國界的,希望巴比倫塔在今天不再僅是傳說偶洋。

怎樣訪問《Pact中文參考指南》

更多關(guān)于Pact測試相關(guān)的介紹熟吏,請關(guān)注我在8月19日DevOpsDays上海站的演講:《輕量化微服務(wù)測試實踐》

Enjoy! :)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末玄窝,一起剝皮案震驚了整個濱河市牵寺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恩脂,老刑警劉巖帽氓,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異俩块,居然都是意外死亡黎休,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門玉凯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來势腮,“玉大人,你說我怎么就攤上這事漫仆∩诱” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵盲厌,是天一觀的道長玄渗。 經(jīng)常有香客問我,道長狸眼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任浴滴,我火速辦了婚禮拓萌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘升略。我一直安慰自己微王,他們只是感情好屡限,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炕倘,像睡著了一般钧大。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上罩旋,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天啊央,我揣著相機與錄音,去河邊找鬼涨醋。 笑死瓜饥,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的浴骂。 我是一名探鬼主播乓土,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼溯警!你這毒婦竟也來了趣苏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤梯轻,失蹤者是張志新(化名)和其女友劉穎食磕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體檩淋,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡芬为,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蟀悦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片媚朦。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖日戈,靈堂內(nèi)的尸體忽然破棺而出询张,到底是詐尸還是另有隱情,我是刑警寧澤浙炼,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布份氧,位于F島的核電站,受9級特大地震影響弯屈,放射性物質(zhì)發(fā)生泄漏蜗帜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一资厉、第九天 我趴在偏房一處隱蔽的房頂上張望厅缺。 院中可真熱鬧,春花似錦、人聲如沸湘捎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窥妇。三九已至舷胜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間活翩,已是汗流浹背烹骨。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纱新,地道東北人展氓。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像脸爱,于是被迫代替她去往敵國和親遇汞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

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