<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          接口Mock測試

          共 3893字,需瀏覽 8分鐘

           ·

          2021-11-23 16:31



          1

          關(guān)于Mock測試



          01

          含義和目的




          1、什么是Mock測試?
          Mock 測試就是在測試過程中,對于某些不容易構(gòu)造(如 HttpServletRequest 必須在Servlet 容器中才能構(gòu)造出來)或者不容易獲取的比較復(fù)雜的對象(如 JDBC 中的ResultSet 對象),用一個虛擬的對象(Mock 對象)來創(chuàng)建以便測試的測試方法。


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

          Mock是為了解決不同的單元之間由于耦合而難于開發(fā)、測試的問題。所以,Mock既能出現(xiàn)在單元測試中,也會出現(xiàn)在集成測試、系統(tǒng)測試過程中。Mock 最大的功能是幫你把單元測試的耦合分解開,如果你的代碼對另一個類或者接口有依賴,它能夠幫你模擬這些依賴,并幫你驗(yàn)證所調(diào)用的依賴的行為。


          比如一段代碼有這樣的依賴:

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


          02

          Mock對象適用場景




          • 需要將當(dāng)前被測單元和其依賴模塊獨(dú)立開來,構(gòu)造一個獨(dú)立的測試環(huán)境,不關(guān)注被測單元的依賴對象,只關(guān)注被測單元的功能邏輯。

          比如被測代碼中需要依賴第三方接口返回值進(jìn)行邏輯處理,可能因?yàn)榫W(wǎng)絡(luò)或者其他環(huán)境因素,調(diào)用第三方經(jīng)常會中斷或者失敗,無法對被測單元進(jìn)行測試,這個時候就可以使用mock技術(shù)來將被測單元和依賴模塊獨(dú)立開來,使得測試可以進(jìn)行下去。


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

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

            依賴的上游項目的接口尚未開發(fā)完成,需要接口聯(lián)調(diào)測試;

          比如service層的代碼中,包含對Dao層的調(diào)用,但是,DAO層代碼尚未實(shí)現(xiàn)


          • 被測單元依賴的對象較難模擬或者構(gòu)造比較復(fù)雜。

          比如支付寶支付的異常條件有很多,但是模擬這種異常條件很復(fù)雜或者無法模擬,比如,查詢聚劃算的訂單結(jié)果,無法在測試環(huán)境進(jìn)行模擬。


          03

          Mock測試的優(yōu)勢




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


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

          3、可以模擬那些無法訪問的資源
          比如說,你需要調(diào)用一個“墻”外的資源來方便自己調(diào)試,就可以自己Mock一個。


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


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


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


          04

          Mock測試存在的問題




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


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

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


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


          ps:當(dāng)你使用mock接口來提高效率,請注意:

          你的工作量其實(shí)是比 直接只用實(shí)際接口 多了 一倍的。如果測試時偷懶,替換成實(shí)際接口后,只是簡單測試,那么 當(dāng)實(shí)際接口和mock預(yù)期接口有差異時,故障便和你相遇了。


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


          • 測試完畢,上線前請一定確保 為了mock而做的相關(guān)代碼/配置文件的修改,已經(jīng)完全恢復(fù)了。
            建議:上線checklist中條條列出,并上線前review



          02

          Mock測試方式



          01

          Mock Server-Moco




          這是一個jar包,只要執(zhí)行該jar包,指定配置文件,就可開啟一個http服務(wù)器提供服務(wù),并且修改配置文件后也無需重啟服務(wù),支持動態(tài)加載。我使用的是moco-runner-0.10.2-standalone.jar,運(yùn)行方式如下:

          ```java -jar moco-runner-0.10.2-standalone.jar start -p 8080 -c XXX.json```
          XXX.json就是我們的mock配置文件,比如:

          [????

          ?? {???????

          ????? "description": "api 1",????????

          ????? "request" :

          ????????? {????????????

          ?? ? ? ? ? ? "method" : "get",????????

          ? ? ? ? ? ?? "uri" : "/foo"????????

          ?????????? },????????

          ????? "response":
          {????????????

          ????? "json": {"foo":"bar"}????????

          ????? }????

          ?? }

          ]

          以上就可以實(shí)現(xiàn)當(dāng)我們訪問127.0.0.0:8080/foo時,返回一個json為{"foo":"bar"}。


          02

          fiddler




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


          還有一些其他mock工具,大多都是通過編寫js代碼或者python、java等代碼來達(dá)到mock目的,此處就不再介紹了。


          在選擇mock工具時,可參考以下幾個方面:

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

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

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



          03

          Mock測試示例



          使用Fiddler進(jìn)行Mock測試,這種調(diào)試方式適用于rest接口調(diào)試,web界面調(diào)試等。

          測試工程師在做測試時,也需要服務(wù)器返回一些特殊的數(shù)據(jù)來做測試,使用 Fiddler AutoResponder功能來偽造測試數(shù)據(jù)(創(chuàng)建虛擬對象),能大大減少測試工程師的工作量。

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


          2、使用Fiddler進(jìn)行Mock測試

          • 接口抓包-----找到要mock的接口
            以掘金首頁為例,找到下面的接口 https://gold-tag-ms.juejin.im/v1/categories


          • 復(fù)制接口數(shù)據(jù)到本地
            在接口上進(jìn)行右鍵點(diǎn)擊,選擇save -> …and Open as Local File -> 默認(rèn)會保存至桌面,示例中的數(shù)據(jù),保存到了桌面的test.json


          • 修改數(shù)據(jù)
            修改保存到本地的json文件,示例中僅修改了頁面的標(biāo)簽數(shù)據(jù)。


          • 替換json文件
            在web session 面板中找到對應(yīng)的請求,然后將其拖到AutoResponder面板中,在RuleEditor中單擊“Find a file...”,選擇本地json文件的路徑。


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


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




          • --------?THE END?--------

            ??


          瀏覽 38
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美大毛片 | SM欧美手机在线观看 | 爆乳小早川怜子护士播放 | 影音先锋女人站 | 亚洲成人aⅤ |