擋板起因
- 當(dāng)今是多服務(wù)多協(xié)作的時(shí)代,任何系統(tǒng)不再是孤島嘱朽,而是相互依賴。
- 由于存在多系統(tǒng)間環(huán)境穩(wěn)定難怔接、數(shù)據(jù)準(zhǔn)備難搪泳、并行開發(fā)難問題,造成多系統(tǒng)間聯(lián)調(diào)測(cè)試需要大量的溝通成本扼脐、排查成本岸军,為了解決這個(gè)讓人頭疼的問題,引出了擋板的概念瓦侮。
- 其實(shí)擋板測(cè)試主要是為了模擬外圍的系統(tǒng)艰赞、服務(wù)、接口而開發(fā)的mock肚吏。
- 如電商系統(tǒng)調(diào)用第三方支付進(jìn)行訂單的付款方妖、充值等場(chǎng)景,在雙方遵循接口協(xié)議的同時(shí)罚攀,不管開發(fā)聯(lián)調(diào)党觅、功能測(cè)試還是性能測(cè)試都能夠讓技術(shù)人員專注自己的功能實(shí)現(xiàn)。
- 一句話為了減少外圍系統(tǒng)的影響斋泄,在接口協(xié)議的框架下專注自己的功能杯瞻,減少扯犢子。
解決問題
- 擋板解決不穩(wěn)定的問題:Mock服務(wù)非常簡(jiǎn)單是己,業(yè)務(wù)邏輯簡(jiǎn)單甚至沒有又兵,所以它足夠穩(wěn)定。
- 快速構(gòu)造復(fù)雜數(shù)據(jù):通過自定義返回結(jié)果卒废,可以構(gòu)造非常復(fù)雜的數(shù)據(jù)沛厨,不需要第三方給我們準(zhǔn)備數(shù)據(jù),即可以做業(yè)務(wù)驗(yàn)證摔认。
- 快速構(gòu)造異常場(chǎng)景:對(duì)于一些異常的情況逆皮,比如網(wǎng)絡(luò)延遲高、重試機(jī)制参袱、特殊異常返回都可以用擋板來構(gòu)造电谣。
- 契約測(cè)試秽梅、驅(qū)動(dòng)測(cè)試開發(fā)、性能測(cè)試剿牺、演示測(cè)試統(tǒng)統(tǒng)適用企垦。
框架說明
-
先復(fù)習(xí)下我們一般的系統(tǒng)架構(gòu),如下面的電商系統(tǒng)晒来,會(huì)調(diào)用外圍的系統(tǒng)支付钞诡、短信、實(shí)名認(rèn)證湃崩、郵件通知等荧降,對(duì)外通訊協(xié)議有tcp、https攒读、http朵诫、smtp。
這里主要說明了調(diào)用外圍系統(tǒng)的情景薄扁,其實(shí)內(nèi)部之間的系統(tǒng)調(diào)用比這復(fù)雜剪返。 -
我們?cè)谝霌醢宓募軜?gòu)后,擋板對(duì)于核心系統(tǒng)訪問應(yīng)該是透明的泌辫,是美麗的謊言随夸,具體架構(gòu)如下:
-
我們?cè)偕钊肓私庀聯(lián)醢宓募軜?gòu),從功能的角度分為動(dòng)態(tài)數(shù)據(jù)震放、靜態(tài)數(shù)據(jù)提供宾毒。
-
擋板前置
提供接口的服務(wù),用什么協(xié)議殿遂、用什么端口诈铛。
-
靜態(tài)數(shù)據(jù)
靜態(tài)的數(shù)據(jù)就是在寫測(cè)試代碼之前根據(jù)需要準(zhǔn)備好,利用json數(shù)據(jù)格式(1.2)或其他文件的數(shù)據(jù)(1.1)存儲(chǔ)墨礁,他的數(shù)據(jù)基本上是無需改動(dòng)的幢竹。
-
動(dòng)態(tài)數(shù)據(jù)
動(dòng)態(tài)的數(shù)據(jù)就是在測(cè)試代碼運(yùn)行的時(shí)候才生成或根據(jù)業(yè)務(wù)去查詢數(shù)據(jù)。
數(shù)據(jù)無上下文關(guān)系只是一些動(dòng)態(tài)的數(shù)據(jù)輸出恩静,利用動(dòng)態(tài)的函數(shù)生成數(shù)據(jù)(2.1)焕毫,動(dòng)態(tài)的函數(shù)生成可以使用mockjs,它里面提供常用的數(shù)據(jù)生成驶乾,后面詳細(xì)介紹邑飒。
數(shù)據(jù)存在上下文關(guān)系,當(dāng)前接口需要前面接口數(shù)據(jù)级乐,利用數(shù)據(jù)庫(kù)或NOSQL提供數(shù)據(jù)(2.2)疙咸。
-
定時(shí)回調(diào)
利用定時(shí)任務(wù)能夠根據(jù)業(yè)務(wù)需求定時(shí)的把數(shù)據(jù)推到核心系統(tǒng),是整個(gè)業(yè)務(wù)調(diào)用鏈路閉合风科。他的數(shù)據(jù)來自于靜態(tài)或動(dòng)態(tài)的數(shù)據(jù)。
技術(shù)選型
根據(jù)上面的架構(gòu)要求,在繁多的開源框架中绽榛,選擇了<label style="color:red">mountebank+mockjs</label>,其他的框架很多在這里不做評(píng)論,軟件沒有好壞之分枫振,適合很重要!
mountebank本身相當(dāng)強(qiáng)大,引用官方的話說mountebank可以提供跨平臺(tái)、多協(xié)議的測(cè)試mock亲桦,就像我們所說的樁代碼一樣提供測(cè)試驅(qū)動(dòng),
是當(dāng)前開源當(dāng)中最強(qiáng)大的浊仆,完全可以治愈你的痛。
一句話mountebank簡(jiǎn)單便捷的實(shí)現(xiàn)擋板服務(wù)豫领。
mountebank 簡(jiǎn)寫 mb抡柿,注意后面直接稱呼了。
mockjs本身也是可以提供mock的功能等恐,我主要是看中了他強(qiáng)大的豐富的數(shù)據(jù)類型洲劣,生成動(dòng)態(tài)的數(shù)據(jù)那是相當(dāng)方便。
先嘗嘗鮮:
Mock.mock({
"number|1-100": 100
})
這個(gè)函數(shù)就很容易的得到1到100的隨機(jī)數(shù)课蔬,相當(dāng)方便吧囱稽。
環(huán)境安裝
由于mountebank是基于nodejs,所以首先要安裝下nodejs二跋,版本要求是v6或以上(他的強(qiáng)大之處在這里就不多說了战惊,做前端的朋友心里有數(shù))。
官方下載https://nodejs.org/en/download/
或者
yum install -y nodejs
那就mb和其他的組件一起安裝了
#安裝mountebank
npm install -g mountebank
#http請(qǐng)求提交試用
npm install superagent --save
#日志打印
npm install log4js
#獲取UUID試用
npm install uuid --save
#獲取時(shí)間
npm install moment
#mysql連接用
npm install mysql -S
#定時(shí)任務(wù)
npm install cron
#mock常用函數(shù)組件
npm install mockjs
系統(tǒng)測(cè)試?yán)髦畵醢鍖?shí)戰(zhàn)(二)
系統(tǒng)測(cè)試?yán)髦畵醢鍖?shí)戰(zhàn)(三)
系統(tǒng)測(cè)試?yán)髦畵醢鍖?shí)戰(zhàn)(四)
系統(tǒng)測(cè)試?yán)髦畵醢鍖?shí)戰(zhàn)(五)
系統(tǒng)測(cè)試?yán)髦畵醢鍖?shí)戰(zhàn)(六)
系統(tǒng)測(cè)試?yán)髦畵醢鍖?shí)戰(zhàn)終結(jié)(七)