南京正厚軟件技術(shù)培訓(xùn)學(xué)校

7x24小時(shí)咨詢熱線

400-660-3310

當(dāng)前位置 : 好學(xué)校 南京正厚軟件技術(shù)培訓(xùn)學(xué)校 學(xué)習(xí)資訊 資訊詳情

什么是接口Mock測(cè)試?

2021-11-11

前言:

我們?cè)谧鼋涌跍y(cè)試的時(shí)候有時(shí)候會(huì)遇到,接口還沒(méi)有開(kāi)發(fā)完成,領(lǐng)導(dǎo)就讓先介入測(cè)試,然后縮短項(xiàng)目時(shí)間,有的人肯定會(huì)懵,接口還沒(méi)開(kāi)發(fā)好,怎么介入測(cè)試,其實(shí)就引入新的詞語(yǔ)mock了。

一、Mock測(cè)試介紹

1、什么是Mock測(cè)試?

Mock 測(cè)試就是在測(cè)試過(guò)程中,對(duì)于某些不容易構(gòu)造或者不容易獲取的比較復(fù)雜的對(duì)象(如 JDBC 中的ResultSet 對(duì)象),用一個(gè)虛擬的對(duì)象(Mock 對(duì)象)來(lái)創(chuàng)建以便測(cè)試的測(cè)試方法。比如:測(cè)試天氣這個(gè)接口,近期上海都沒(méi)有雪,那么我怎么去模擬雪這個(gè)場(chǎng)景?需要等到真正下雪的哪天才可以嗎?這個(gè)時(shí)候就可以通過(guò)mock來(lái)幫助我們完成雪的場(chǎng)景了。

2、為什么要進(jìn)行Mock測(cè)試?

Mock是為了解決不同的單元之間由于耦合而難于開(kāi)發(fā)、測(cè)試的問(wèn)題。所以,Mock既能出現(xiàn)在單元測(cè)試中,也會(huì)出現(xiàn)在集成測(cè)試、系統(tǒng)測(cè)試過(guò)程中。Mock zui大的功能是幫你把單元測(cè)試的耦合分解開(kāi),如果你的代碼對(duì)另一個(gè)類或者接口有依賴,它能夠幫你模擬這些依賴,并幫你驗(yàn)證所調(diào)用的依賴的行為。比如一段代碼有這樣的依賴:當(dāng)我們需要測(cè)試A類的時(shí)候,如果沒(méi)有 Mock,則我們需要把整個(gè)依賴樹都構(gòu)建出來(lái),而使用 Mock 的話就可以將結(jié)構(gòu)分解開(kāi),像下面這樣:

使用 Mock 的話就可以將結(jié)構(gòu)分解開(kāi)

當(dāng)我們需要測(cè)試A類的時(shí)候,如果沒(méi)有 Mock,則我們需要把整個(gè)依賴樹都構(gòu)建出來(lái),而使用 Mock 的話就可以將結(jié)構(gòu)分解開(kāi),像下面這樣:

測(cè)試A類

3、Mock對(duì)象適用場(chǎng)景

(1)需要將當(dāng)前被測(cè)單元和其依賴模塊獨(dú)立開(kāi)來(lái),構(gòu)造一個(gè)獨(dú)立的測(cè)試環(huán)境,不關(guān)注被測(cè)單元的依賴對(duì)象,只關(guān)注被測(cè)單元的功能邏輯。比如:被測(cè)代碼中需要依賴第三方接口返回值進(jìn)行邏輯處理,可能因?yàn)榫W(wǎng)絡(luò)或者其他環(huán)境因素,調(diào)用第三方經(jīng)常會(huì)中斷或者失敗,無(wú)法對(duì)被測(cè)單元進(jìn)行測(cè)試,這個(gè)時(shí)候就可以使用mock技術(shù)來(lái)將被測(cè)單元和依賴模塊獨(dú)立開(kāi)來(lái),使得測(cè)試可以進(jìn)行下去。

(2)被測(cè)單元依賴的模塊尚未開(kāi)發(fā)完成,而被測(cè)單元需要依賴模塊的返回值進(jìn)行后續(xù)處理。

1)前后端項(xiàng)目中,后端接口開(kāi)發(fā)完成之前,接口聯(lián)調(diào);

2)依賴的上游項(xiàng)目的接口尚未開(kāi)發(fā)完成,需要接口聯(lián)調(diào)測(cè)試;比如:service層的代碼中,包含對(duì)Dao層的調(diào)用,但是,DAO層代碼尚未實(shí)現(xiàn)

(3)被測(cè)單元依賴的對(duì)象較難模擬或者構(gòu)造比較復(fù)雜。比如:支付寶支付的異常條件有很多,但是模擬這種異常條件很復(fù)雜或者無(wú)法模擬,比如:查詢聚劃算的訂單結(jié)果,無(wú)法在測(cè)試環(huán)境進(jìn)行模擬。

4、Mock測(cè)試的優(yōu)勢(shì)

(1) 團(tuán)隊(duì)可以并行工作

有了Mock,前后端人員只需要定義好接口文檔就可以開(kāi)始并行工作,互不影響,只在zui后的聯(lián)調(diào)階段往來(lái)密切;后端與后端之間如果有接口耦合,也同樣能被Mock解決;測(cè)試過(guò)程中如果遇到依賴接口沒(méi)有準(zhǔn)備好,同樣可以借助Mock;不會(huì)出現(xiàn)一個(gè)團(tuán)隊(duì)等待另一個(gè)團(tuán)隊(duì)的情況。這樣的話,開(kāi)發(fā)自測(cè)階段就可以及早開(kāi)展,從而發(fā)現(xiàn)缺陷的時(shí)機(jī)也提前了,有利于整個(gè)產(chǎn)品質(zhì)量以及進(jìn)度的**。

(2)開(kāi)啟TDD模式,即測(cè)試驅(qū)動(dòng)開(kāi)發(fā)

單元測(cè)試是TDD實(shí)現(xiàn)的基石,而TDD經(jīng)常會(huì)碰到協(xié)同模塊尚未開(kāi)發(fā)完成的情況,但是有了mock,這些一切都不是問(wèn)題。當(dāng)接口定義好后,測(cè)試人員就可以創(chuàng)建一個(gè)Mock,把接口添加到自動(dòng)化測(cè)試環(huán)境,提前創(chuàng)建測(cè)試。

(3)可以模擬那些無(wú)法訪問(wèn)的資源

比如說(shuō),你需要調(diào)用一個(gè)“墻”外的資源來(lái)方便自己調(diào)試,就可以自己Mock一個(gè)。

(4)隔離系統(tǒng)

假如我們需要調(diào)用一個(gè)post請(qǐng)求,為了獲得某個(gè)響應(yīng),來(lái)看當(dāng)前系統(tǒng)是否能正確處理返回的“響應(yīng)”,但是這個(gè)post請(qǐng)求會(huì)造成數(shù)據(jù)庫(kù)中數(shù)據(jù)的污染,那么就可以充分利用Mock,構(gòu)造一個(gè)虛擬的post請(qǐng)求,我們給他指定返回就好了。

(5)可以用來(lái)演示

假如我們需要?jiǎng)?chuàng)建一個(gè)演示程序,并且做了簡(jiǎn)單的UI,那么在完全沒(méi)有開(kāi)發(fā)后端服務(wù)的情況下,也可以進(jìn)行演示。說(shuō)到演示了,假如你已經(jīng)做好了一個(gè)系統(tǒng),并且需要給客戶進(jìn)行演示,但是里面有些真實(shí)數(shù)據(jù)并不想讓用戶看到,那么同樣,你可以用Mock接口把這些敏感信息接口全部替換。

(6)測(cè)試覆蓋度

假如有一個(gè)接口,有100個(gè)不同類型的返回,我們需要測(cè)試它在不同返回下,系統(tǒng)是否能夠正常響應(yīng),但是有些返回在正常情況下基本不會(huì)發(fā)生,比如,我們需要測(cè)試在當(dāng)接口發(fā)生500錯(cuò)誤的時(shí)候,app是否崩潰,別告訴我你一定要給服務(wù)端代碼做些手腳讓他返回500 。而使用mock,這一切就都好辦了,想要什么返回就模擬什么返回,不用再擔(dān)心我的測(cè)試覆蓋度了!

5、Mock測(cè)試存在的問(wèn)題

使用Mock測(cè)試有時(shí)可以提高團(tuán)隊(duì)的開(kāi)發(fā)效率,但當(dāng)B、C都開(kāi)發(fā)完成代碼后,這時(shí)應(yīng)該把E2E測(cè)試代碼從使用Mock測(cè)試改為調(diào)用真實(shí)的模塊,以避免出現(xiàn)模塊之間集成部分漏測(cè)的問(wèn)題。這里說(shuō)mock存在的問(wèn)題,主要是讓開(kāi)發(fā)和測(cè)試不要過(guò)分的依賴/相信mock接口。

使用mock時(shí),切記的幾點(diǎn):

1)測(cè)試人員不應(yīng)該被覆蓋率高的E2E自動(dòng)化測(cè)試所迷惑,覆蓋率高不代表沒(méi)有問(wèn)題。尤其在接手新項(xiàng)目中,需要查看E2E測(cè)試中有沒(méi)有使用Mock測(cè)試,進(jìn)一步去判斷這些地方使用Mock測(cè)試是否合理,這些Mock測(cè)試是否應(yīng)該換成真實(shí)模塊間的調(diào)用和集成。

2)當(dāng)把mock接口換成實(shí)際接口后,測(cè)試/開(kāi)發(fā)也必須把之前的測(cè)試重新做一遍。

ps: 當(dāng)你使用mock接口來(lái)提高效率,請(qǐng)注意:你的工作量其實(shí)是比直接只用實(shí)際接口多了 一倍的。如果測(cè)試時(shí),偷懶,替換成實(shí)際接口后,只是簡(jiǎn)單測(cè)試,那么當(dāng)實(shí)際接口和mock預(yù)期接口有差異時(shí),故障便和你相遇了。

建議:mock接口只能主流程聯(lián)調(diào)/ 異常返回測(cè)試,不要過(guò)分依賴mock接口進(jìn)行測(cè)試。

3)測(cè)試完畢,上線前,請(qǐng)一定確保為了mock而做的相關(guān)代碼/配置文件的修改,已經(jīng)完全恢復(fù)了。

二、Mock測(cè)試方式

1、Mock Server-Moco

這是一個(gè)jar包,只要執(zhí)行該jar包,指定配置文件,就可開(kāi)啟一個(gè)http服務(wù)器提供服務(wù),并且修改配置文件后也無(wú)需重啟服務(wù),支持動(dòng)態(tài)加載。

2、fiddler

fiddler大家都很熟了,在windows環(huán)境可以隨便自定義返回內(nèi)容,但一個(gè)很大的缺點(diǎn)是,它不跨平臺(tái),而我們平時(shí)的很多場(chǎng)景下,是需要在Linux下進(jìn)行mock的。

在選擇mock工具時(shí),可參考以下幾個(gè)方面:

1)數(shù)據(jù)要好管理,別讓我管理一堆文件;

2)mock接口zui好可以設(shè)置成和真實(shí)接口完全一致,這樣就只需要切換hosts就可以切換mock接口和真實(shí)接口,不需要修改代碼;

3)跨平臺(tái),mock接口在windows和Linux下都需要可用。至于跨域、動(dòng)態(tài)加載什么的,這是必須條件。

三、Mock測(cè)試示

1、使用Fiddler進(jìn)行Mock測(cè)試

這種調(diào)試方式適用于rest接口調(diào)試,web界面調(diào)試等。測(cè)試工程師在做測(cè)試時(shí),也需要服務(wù)器返回一些特殊的數(shù)據(jù)來(lái)做測(cè)試,使用 Fiddler AutoResponder功能來(lái)偽造測(cè)試數(shù)據(jù)(創(chuàng)建虛擬對(duì)象),能大大減少測(cè)試工程師的工作量。

使用Fiddler進(jìn)行Mock測(cè)試

1.1 Fiddler AutoResponder工作原理

使用Fiddler可以替換自動(dòng)返回的一個(gè)【偽造】的HTTP響應(yīng),這與使用斷點(diǎn)修改HTTP響應(yīng)類似,只不過(guò)AutoResponder是自動(dòng)的,操作更加方便。即瀏覽器發(fā)出的HTTP請(qǐng)求并沒(méi)有到達(dá)服務(wù)器,而是被Fiddler直接返回了一個(gè)【偽造】的HTTP響應(yīng)。

1.2 使用Fiddler進(jìn)行Mock測(cè)試

(1)接口抓包-----找到要mock的接口

比如我們要測(cè)試百度首頁(yè)的接口

使用Fiddler進(jìn)行抓包:

使用Fiddler進(jìn)行抓包測(cè)試

2)創(chuàng)建接口Mock對(duì)象

進(jìn)入Fiddler AutoResponder頁(yè)面,選中剛才抓到的包,點(diǎn)擊“Add Rule”新建接口Mock對(duì)象:

創(chuàng)建接口Mock對(duì)象
“Add Rule”新建接口Mock對(duì)象

點(diǎn)擊“Test”可以設(shè)置接口匹配規(guī)則和接口地址:

點(diǎn)擊“Test”可以設(shè)置接口匹配規(guī)則和接口地址
點(diǎn)擊“Test”可以設(shè)置接口匹配規(guī)則和接口地址2

3)設(shè)置接口返回內(nèi)容

創(chuàng)建一個(gè)json文件,如:

創(chuàng)建一個(gè)json文件

點(diǎn)擊“Find a filename”:

點(diǎn)擊“Find a filename”

選擇剛才創(chuàng)建好的文件:

選擇剛才創(chuàng)建好的文件

4)激活規(guī)則

選中“Enable rules”,激活規(guī)則。選中“Unmatched requests passthrough",放行不匹配的HTTP請(qǐng)求。

激活規(guī)則

5)save,刷新頁(yè)面

單擊“Save”按鈕。只需修改本地保存的json文件,然后刷新瀏覽器(或直接訪問(wèn)接口),就可以看到效果了。

save,刷新頁(yè)面
刷新頁(yè)面
收藏
分享到:

相關(guān)課程

相關(guān)資訊

南京正厚軟件技術(shù)培訓(xùn)學(xué)校

南京正厚軟件技術(shù)培訓(xùn)學(xué)校

認(rèn)證等級(jí)

信譽(yù)良好,可安心報(bào)讀

南京正厚軟件技術(shù)培訓(xùn)學(xué)校

已獲好學(xué)校V2信譽(yù)等級(jí)認(rèn)證

信譽(yù)值

  • (60-80)基礎(chǔ)信譽(yù)積累,可放心報(bào)讀
  • (81-90)良好信譽(yù)積累,可持續(xù)信賴
  • (91-100)充分信譽(yù)積累,推薦報(bào)讀

與好學(xué)校簽訂讀書保障協(xié)議:

  • 100%
  • 65
  • 12363
在線咨詢
;