契約測試

業(yè)界認(rèn)為應(yīng)該讓契約測試來替代集成測試。認(rèn)為你寫的2-5%的集成測試和單元測試有重復(fù),或者和其它地方的集成測試存在重復(fù)畅形,而且當(dāng)集成測試失敗時(shí),你也不知道發(fā)生了什么诉探,不能及時(shí)準(zhǔn)確定位問題日熬。

一、什么是契約測試

微服務(wù)要求有低耦合肾胯、高內(nèi)聚的邊界竖席,通常我們使用 DDD 的限界上下文作為微服務(wù)邊界;而契約測試則是針對(duì)這個(gè)邊界的測試敬肚。契約測試是驗(yàn)證服務(wù)的Provider是否按照期望的方式與服務(wù)的Consumer進(jìn)行交互毕荐,簡單的說是Consumer與Provider兩者之間的集成。而Contract即合同艳馒、契約憎亚,就是Provider與Consumer的交互方式。

契約測試通常是基于Consumer驅(qū)動(dòng)的(Consumer Driven Contracts弄慰,基于Consumer驅(qū)動(dòng)的契約測試工具有PACT)第美。基于Consumer驅(qū)動(dòng)的契約測試分兩個(gè)階段:1)Consumer生成契約陆爽,開發(fā)者在Consumer端寫測試時(shí)Mock掉Provider什往,運(yùn)行測試生成契約文件;2)Provider驗(yàn)證契約墓陈,開發(fā)者拿契約文件直接在Provider端運(yùn)行測試進(jìn)行驗(yàn)證恶守。

二、契約測試的特點(diǎn)

1)開發(fā)人員編寫贡必,采用Mock機(jī)制兔港,開發(fā)本地就可以運(yùn)行,沒有真實(shí)調(diào)用仔拟,運(yùn)行快衫樊,毫秒級(jí)修復(fù)反饋周期短;2)Provider與Consumer兩兩之間的驗(yàn)證利花,容易定位問題科侈,而且與底層測試或其它契約之間沒有重復(fù);3)不需要部署真實(shí)的集成環(huán)境炒事,穩(wěn)定且成功率高臀栈;4)溝通成本低。(比如一個(gè)Consumer端的加入導(dǎo)致服務(wù)端API修改挠乳,服務(wù)端開發(fā)人員不必跑去找所有其它Consumer端開發(fā)人員溝通確認(rèn)是否會(huì)被影響权薯,直接運(yùn)行契約測試就能知道結(jié)果姑躲。

三、擴(kuò)展

1)還有一個(gè)概念叫做design by contract盟蚣,它規(guī)定軟件設(shè)計(jì)人員應(yīng)為軟件組件定義正式黍析、精確和可驗(yàn)證的接口規(guī)范,該規(guī)范應(yīng)使用前提條件屎开、后置條件和不變式來擴(kuò)展抽象數(shù)據(jù)類型的普通定義阐枣。

2)霍爾邏輯中,霍爾三元組對(duì)理解程序更友好奄抽;P和Q是斷言蔼两,C是命令?。P叫做前置條件如孝,Q叫做后置條件宪哩。霍爾三元組簡單理解為:只要P在C執(zhí)行前的狀態(tài)下成立第晰,則在執(zhí)行之后Q也成立锁孟。

{P} C {Q}

3)聯(lián)想到solid原則的里氏替換原則,子類不應(yīng)該破壞父類定下來的契約茁瘦。當(dāng)你發(fā)現(xiàn)一個(gè)子類沒有辦法完全替換其父類且并不改變原有的assertion的時(shí)候, 你就不該讓它們有繼承關(guān)系.?

四品抽、集成測試

端到端集成測試(簡稱集成測試)是指系統(tǒng)集成后的自動(dòng)化測試,是系統(tǒng)或模塊真實(shí)組裝后運(yùn)行的測試甜熔。很多團(tuán)隊(duì)用UI端到端來測系統(tǒng)集成后的行為圆恤,這類工具很多,比如有Selenium webdriver等腔稀。端到端的集成測試反饋與修復(fù)的周期比較長盆昙、運(yùn)行速度慢,測試運(yùn)行不穩(wěn)定焊虏,有時(shí)隨機(jī)失敗淡喜,維護(hù)成本也很高。它不像單元測試诵闭,單元測試測具體一個(gè)方法或API炼团,定位準(zhǔn)確,采用Mock機(jī)制疏尿,運(yùn)行速度非澄林ィ快(毫秒級(jí)),又是開發(fā)人員在本地執(zhí)行褥琐,反饋修復(fù)及時(shí)锌俱,成本較低。

集成測試的特點(diǎn):1)真實(shí)安裝后測試敌呈,測試更接近真實(shí)使用情況贸宏;2)可見性強(qiáng)贩汉,容易理解;(比如:看一遍運(yùn)行關(guān)鍵業(yè)務(wù)的集成測試锚赤,業(yè)務(wù)人員或客戶會(huì)覺得很放心。也可以替代驗(yàn)收測試)褐鸥;3)模塊真實(shí)調(diào)用线脚,測試運(yùn)行慢,秒級(jí)別或分鐘級(jí)別叫榕,反饋與修復(fù)的周期慢浑侥,成本高;4)問題定位難晰绎,多個(gè)子模塊組合安裝后的測試寓落,很難定位是哪個(gè)模塊出的問題;5)真實(shí)的安裝或環(huán)境搭建荞下,不穩(wěn)定伶选,容易導(dǎo)致測試隨機(jī)失敗尖昏;6)溝通成本高仰税,需要不同模塊團(tuán)隊(duì)間的協(xié)調(diào)工作;7)與底層測試或集成測試會(huì)有重復(fù)抽诉,集成測試中有的路徑已經(jīng)被單元測試覆蓋陨簇。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市迹淌,隨后出現(xiàn)的幾起案子河绽,更是在濱河造成了極大的恐慌,老刑警劉巖唉窃,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耙饰,死亡現(xiàn)場離奇詭異,居然都是意外死亡句携,警方通過查閱死者的電腦和手機(jī)榔幸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矮嫉,“玉大人削咆,你說我怎么就攤上這事〈浪瘢” “怎么了拨齐?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長昨寞。 經(jīng)常有香客問我瞻惋,道長厦滤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任歼狼,我火速辦了婚禮掏导,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘羽峰。我一直安慰自己趟咆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布梅屉。 她就那樣靜靜地躺著值纱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坯汤。 梳的紋絲不亂的頭發(fā)上虐唠,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音惰聂,去河邊找鬼疆偿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛搓幌,可吹牛的內(nèi)容都是我干的翁脆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼鼻种,長吁一口氣:“原來是場噩夢啊……” “哼反番!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叉钥,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤罢缸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后投队,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枫疆,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年敷鸦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了息楔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扒披,死狀恐怖值依,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碟案,我是刑警寧澤愿险,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站价说,受9級(jí)特大地震影響辆亏,放射性物質(zhì)發(fā)生泄漏风秤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一扮叨、第九天 我趴在偏房一處隱蔽的房頂上張望缤弦。 院中可真熱鬧,春花似錦彻磁、人聲如沸甸鸟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至薪贫,卻和暖如春恍箭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瞧省。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國打工扯夭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鞍匾。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓交洗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親橡淑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子构拳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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

  • 正如大家所知置森,最初QA都是手動(dòng)執(zhí)行測試用例,開發(fā)人員每修改一個(gè)版本符糊,QA就要手動(dòng)測試一遍凫海,隨著功能的不斷增加,手動(dòng)...
    ThoughtWorks閱讀 2,820評(píng)論 1 18
  • 如今男娄,契約測試已經(jīng)逐漸成為測試圈中一個(gè)炙手可熱的話題行贪,特別是在微服務(wù)大行其道的行業(yè)背景下,越來越多的團(tuán)隊(duì)開始關(guān)注服...
    ariman閱讀 12,480評(píng)論 28 33
  • 背景 在當(dāng)前微服務(wù)和前后端分離大行其道的行業(yè)背景下模闲,越來越多的團(tuán)隊(duì)采用了前后端分離和微服務(wù)的架構(gòu)風(fēng)格建瘫。該服務(wù)架構(gòu)下...
    博客已遷移I米陽閱讀 24,357評(píng)論 2 18
  • 什么是契約 如果從契約產(chǎn)生的階段來說,現(xiàn)有資料表明最早要追溯到西周時(shí)期的《周恭王三年裘衛(wèi)典田契》尸折,將契約文字刻寫在...
    ThoughtWorks閱讀 2,925評(píng)論 1 12
  • 2018年7月11日 星期三/晴/28-35° 讀經(jīng)第31周第7天 總第224天 讀經(jīng)人員:睿哲暖混、爸爸 讀經(jīng)內(nèi)容:...
    燕燕_967e閱讀 188評(píng)論 0 0