0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用WireMock搭建一個(gè)HTTP模擬器

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-09 10:38 ? 次閱讀

我們開發(fā)過程中,前端和后端的開發(fā)大多是同時(shí)進(jìn)行的,而前端開發(fā)需要訪問某個(gè)接口返回?cái)?shù)據(jù)的時(shí),我們可以使用WireMock模擬指定API返回指定測試數(shù)據(jù),這可以極大的方便我們的開發(fā)工作。今天就介紹如何使用WireMock搭建一個(gè)HTTP模擬器,并介紹一些基本案例。

1. 前言

WireMock 是一個(gè)Http 模擬服務(wù),其核心也是一個(gè)web服務(wù),WireMock主要是為特定請求提供固定的返回值。

WireMock可以作為單獨(dú)進(jìn)程啟動(dòng),模擬一個(gè)WEB服務(wù)器,提供一些API訪問,并返回特定的返回值。也可以作為第三方庫在項(xiàng)目中使用。

下面我們先介紹以下WireMock模擬WEB服務(wù)器的使用吧。

2. WireMock搭建

  1. 第一步,先下載WireMock的Jar包, 本教程使用下載地址如下 :https://repo1.maven.org/maven2/com/github/tomakehurst/wiremock-jre8-standalone/2.33.2/wiremock-jre8-standalone-2.33.2.jar

  2. 到指定目錄啟動(dòng)Jar,同時(shí)也可以加一些啟動(dòng)參數(shù)。下面的命令表示用9998端口啟動(dòng)這個(gè)模擬服務(wù)器。

    java -jar wiremock-jre8-standalone-2.33.2.jar -port 9998
    

    啟動(dòng)界面如下:

    圖片

3. WireMock使用

WireMock啟動(dòng)時(shí)候,文件夾里面會(huì)有 _files 和 mappings 兩個(gè)文件夾, _files文件夾中可以放一些返回?cái)?shù)據(jù)文件。mappings文件夾中存放映射關(guān)系,使用json格式的文件。

圖片

如下圖,新建json文件,啟動(dòng)WireMock時(shí)回加載這些文件,更新之后只需要重啟WireMock即可。

圖片

3.1 簡單API映射

json文件如下,

{
 "mappings": [
  {
   "request": {
    "method": "GET",
    "url": "/api/hello"
   },
   "response": {
    "body": "Hello world!",
    "headers": {
     "Content-Type": "text/plain"
    },
    "status": 200
   }
  }
 ]
}

啟動(dòng)后正常訪問:

圖片

如果配置的地址訪問不到也會(huì)返回錯(cuò)誤,如下:

圖片

3.2 返回response中添加header

{
    "request": {
        "method": "GET",
        "url": "/whatever"
    },
    "response": {
        "status": 200,
        "headers": {
            "Content-Type": "text/plain",
            "Set-Cookie": ["session_id=91837492837", "split_test_group=B"],
            "Cache-Control": "no-cache"
        }
    }
}

3.3 返回?cái)?shù)組

"response": {
        "status": 200,
        "jsonBody": {
          "arbitrary_json": [1, 2, 3]
        }
    }

3.4 返回指定文件數(shù)據(jù) 寫在_file文件夾里面

{
    "request": {
        "method": "GET",
        "url": "/bodyfile"
    },
    "response": {
        "status": 200,
        "bodyFileName": "/myfile.xml"
    }
}

_file文件夾下面新建的文件:

圖片

訪問接口則可以直接返回文件中的數(shù)據(jù):

圖片

3.5 URL 映射

WireMock也支持映射正則表達(dá)式:

{
  "request": {
    "urlPattern": "/your/([a-z]*)?and=query"
    ...
  },
  ...
}

3.6 指定請求頭

{
  "request": {
    ...
    "headers": {
      "Content-Type": {
        "equalTo": "application/json",
        "caseInsensitive": true
      }
    }
    ...
  },
  ...
}

3.7 可變狀態(tài)請求

requiredScenarioState/newScenarioState 可以記錄當(dāng)前API映射所處的狀態(tài)以及新的狀態(tài),可以通過改變其狀態(tài),從而可以使同一個(gè)API返回不同的結(jié)果, 如下面的請求則可以改變狀態(tài),返回不同的結(jié)果.

{
 "mappings": [
  {
   "scenarioName": "To do list",
   "requiredScenarioState": "Started",
   "request": {
    "method": "GET",
    "url": "/todo/items"
   },
   "response": {
    "status": 200,
    "body": "< items >< item >Buy milk< /item >< /items >"
   }
  },
  {
   "scenarioName": "To do list",
   "requiredScenarioState": "Started",
   "newScenarioState": "Cancel newspaper item added",
   "request": {
    "method": "POST",
    "url": "/todo/items",
    "bodyPatterns": [
     {
      "contains": "Cancel newspaper subscription"
     }
    ]
   },
   "response": {
    "status": 201
   }
  },
  {
   "scenarioName": "To do list",
   "requiredScenarioState": "Cancel newspaper item added",
   "request": {
    "method": "GET",
    "url": "/todo/items"
   },
   "response": {
    "status": 200,
    "body": "< items >< item >Buy milk< /item >< item >Cancel newspaper subscription< /item >< /items >"
   }
  }
 ]
}
  • 第一次訪問時(shí),Started狀態(tài):
    圖片
  • 訪問第二個(gè)接口,改變其狀態(tài)如下
  • 再次訪問API,返回新的數(shù)據(jù)
    圖片

3.8 API 故障模擬

設(shè)置延時(shí)返回,如下可以設(shè)置定時(shí)延遲2秒。

{
  "request": {
   "method": "GET",
   "url": "/delayed"
  },
  "response": {
   "status": 200,
   "fixedDelayMilliseconds": 2000
  }
 }

如下是延遲2秒的返回結(jié)果。

圖片

同時(shí)也可以設(shè)置隨機(jī)的延遲時(shí)間:

{
    "request": {
        "method": "GET",
        "url": "/random/delayed"
    },
    "response": {
        "status": 200,
        "delayDistribution": {
            "type": "lognormal",
            "median": 50,
            "sigma": 0.4
    }
    }
}

總結(jié)

WireMock可以快速搭建Web服務(wù),可以模擬開發(fā)測試需要的各種請求,使用十分方便。對(duì)于維護(hù)測試環(huán)境穩(wěn)定以及提高開發(fā)效率方面都有不錯(cuò)的效果。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1501

    瀏覽量

    62034
  • HTTP
    +關(guān)注

    關(guān)注

    0

    文章

    505

    瀏覽量

    31242
  • Web服務(wù)器
    +關(guān)注

    關(guān)注

    0

    文章

    138

    瀏覽量

    24406
  • 模擬器
    +關(guān)注

    關(guān)注

    2

    文章

    875

    瀏覽量

    43224
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    LCD模擬器

    本帖最后由 sky512 于 2012-7-13 11:37 編輯 本模擬器可以模擬點(diǎn)陣LCD的基本顯示效果,通過調(diào)用相應(yīng)函數(shù)可以靈活地改變點(diǎn)陣數(shù)、顏色等屬性。可以方便項(xiàng)目開發(fā)的前期模擬測試。下載地址:
    發(fā)表于 07-08 20:41

    電腦pc端上安卓模擬器下載與使用教程

    安卓作為全球用戶最多的智能手機(jī)系統(tǒng),有很多好玩兒的應(yīng)用。如果你還沒有安卓手機(jī),又想買部試試,可是價(jià)格都不便宜,買來不適合自己怎么辦?那么可以先在電腦上安裝個(gè)安卓模擬器,因?yàn)樗梢栽?/div>
    發(fā)表于 09-10 11:56

    模擬器:904和模擬器:861錯(cuò)誤

    鏈接設(shè)計(jì)。我在論壇中看到我們需要使用任務(wù)管理或進(jìn)程查看來終止模擬器可執(zhí)行文件(_isim_beh.exe)。但是從哪里可以找到任務(wù)管理或進(jìn)程查看
    發(fā)表于 04-03 08:47

    LVGL模擬器該怎樣去搭建

    LVGL模擬器搭建我用的是vs搭建模擬器,實(shí)際上很簡單,去下載最新的vs然后我是選擇了接下來,下載安裝。再下載官方的模擬器。就可以進(jìn)行仿真
    發(fā)表于 01-18 09:31

    種多普勒模擬器的設(shè)計(jì)與實(shí)現(xiàn)The Design and I

    本文介紹了種成功應(yīng)用于某自主外測系統(tǒng)的多普勒模擬器的設(shè)計(jì)與實(shí)現(xiàn)。該模擬器易于使用,控制靈活。在系統(tǒng)聯(lián)調(diào)期間,該模擬器可進(jìn)行極小步進(jìn)、快速掃頻,取得了滿意
    發(fā)表于 05-25 15:14 ?33次下載

    個(gè)經(jīng)濟(jì)的負(fù)責(zé)模擬器電路圖

    個(gè)經(jīng)濟(jì)的負(fù)責(zé)模擬器電路圖
    發(fā)表于 07-01 13:23 ?653次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>經(jīng)濟(jì)的負(fù)責(zé)<b class='flag-5'>模擬器</b>電路圖

    種新型的基于LabView設(shè)計(jì)的脈壓模擬器

    種新型的基于LabView設(shè)計(jì)的脈壓模擬器  摘   要: 提出了種新型的基于LabView設(shè)計(jì)的脈壓模擬器,介紹了其設(shè)計(jì)思想、系統(tǒng)的軟硬件構(gòu)成及應(yīng)
    發(fā)表于 12-01 10:25 ?945次閱讀
    <b class='flag-5'>一</b>種新型的基于LabView設(shè)計(jì)的脈壓<b class='flag-5'>模擬器</b>

    仿真模擬器的不同_仿真模擬器的區(qū)別簡單分析

    仿真模擬器經(jīng)常被混淆,兩者有些許相似,但是是兩個(gè)不同的概念,本文為大家?guī)矸抡?b class='flag-5'>器和模擬器的區(qū)別簡單分析。
    發(fā)表于 01-05 14:27 ?8610次閱讀

    種新的微結(jié)構(gòu)模擬器設(shè)計(jì)

    處理體系結(jié)構(gòu)模擬器可以對(duì)處理的結(jié)構(gòu)采用軟件方式進(jìn)行模擬,輔助處理的研究工作。通過對(duì)多種結(jié)構(gòu)和微結(jié)構(gòu)參數(shù)進(jìn)行配置,可以對(duì)處理
    發(fā)表于 03-12 16:13 ?0次下載
    <b class='flag-5'>一</b>種新的微結(jié)構(gòu)<b class='flag-5'>模擬器</b>設(shè)計(jì)

    如何使用vi模擬器

    Atmel 小貼士 vi模擬器的使用
    的頭像 發(fā)表于 07-11 00:17 ?4312次閱讀

    ADSIM模擬器

    ADSIM模擬器
    發(fā)表于 03-23 13:50 ?15次下載
    ADSIM<b class='flag-5'>模擬器</b>

    個(gè)真正的Arduino UNO電子寵物模擬器

    電子發(fā)燒友網(wǎng)站提供《個(gè)真正的Arduino UNO電子寵物模擬器.zip》資料免費(fèi)下載
    發(fā)表于 10-21 10:16 ?1次下載
    <b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>真正的Arduino UNO電子寵物<b class='flag-5'>模擬器</b>

    電路仿真模擬器怎么用

    電路仿真模擬器是電子工程師和學(xué)生必備的類軟件工具。通過使用電路仿真模擬器,用戶可以在計(jì)算機(jī)上模擬和分析各種電路設(shè)計(jì),從而避免在實(shí)際搭建電路
    的頭像 發(fā)表于 05-04 10:53 ?2367次閱讀

    華納云:使用 WireMock 在開發(fā)和測試中模擬 API 服務(wù)

    WireMock 發(fā)揮作用的地方。 WireMock個(gè)開源工具,可以幫助開發(fā)人員創(chuàng)建模擬真實(shí) API 行為的
    的頭像 發(fā)表于 10-25 16:46 ?354次閱讀

    如何使用光伏模擬器

    光伏模擬器種用于模擬太陽能光伏電池工作原理和性能的軟硬件設(shè)備。它能夠提供光伏電池在不同光照、溫度和環(huán)境條件下的電流、電壓、功率等參數(shù),用于測試和評(píng)估光伏電池的性能,并幫助開發(fā)、優(yōu)化和驗(yàn)證光伏系統(tǒng)
    的頭像 發(fā)表于 10-30 17:12 ?231次閱讀
    如何使用光伏<b class='flag-5'>模擬器</b>