我們開發過程中,前端和后端的開發大多是同時進行的,而前端開發需要訪問某個接口返回數據的時,我們可以使用WireMock模擬指定API返回指定測試數據,這可以極大的方便我們的開發工作。今天就介紹如何使用WireMock搭建一個HTTP模擬器,并介紹一些基本案例。
1. 前言
WireMock 是一個Http 模擬服務,其核心也是一個web服務,WireMock主要是為特定請求提供固定的返回值。
WireMock可以作為單獨進程啟動,模擬一個WEB服務器,提供一些API訪問,并返回特定的返回值。也可以作為第三方庫在項目中使用。
下面我們先介紹以下WireMock模擬WEB服務器的使用吧。
2. WireMock搭建
第一步,先下載WireMock的Jar包, 本教程使用下載地址如下 :https://repo1.maven.org/maven2/com/github/tomakehurst/wiremock-jre8-standalone/2.33.2/wiremock-jre8-standalone-2.33.2.jar
到指定目錄啟動Jar,同時也可以加一些啟動參數。下面的命令表示用9998端口啟動這個模擬服務器。
java -jar wiremock-jre8-standalone-2.33.2.jar -port 9998
啟動界面如下:
3. WireMock使用
WireMock啟動時候,文件夾里面會有 _files 和 mappings 兩個文件夾, _files文件夾中可以放一些返回數據文件。mappings文件夾中存放映射關系,使用json格式的文件。
如下圖,新建json文件,啟動WireMock時回加載這些文件,更新之后只需要重啟WireMock即可。
3.1 簡單API映射
json文件如下,
{
"mappings": [
{
"request": {
"method": "GET",
"url": "/api/hello"
},
"response": {
"body": "Hello world!",
"headers": {
"Content-Type": "text/plain"
},
"status": 200
}
}
]
}
啟動后正常訪問:
如果配置的地址訪問不到也會返回錯誤,如下:
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 返回數組
"response": {
"status": 200,
"jsonBody": {
"arbitrary_json": [1, 2, 3]
}
}
3.4 返回指定文件數據 寫在_file文件夾里面
{
"request": {
"method": "GET",
"url": "/bodyfile"
},
"response": {
"status": 200,
"bodyFileName": "/myfile.xml"
}
}
_file文件夾下面新建的文件:
訪問接口則可以直接返回文件中的數據:
3.5 URL 映射
WireMock也支持映射正則表達式:
{
"request": {
"urlPattern": "/your/([a-z]*)?and=query"
...
},
...
}
3.6 指定請求頭
{
"request": {
...
"headers": {
"Content-Type": {
"equalTo": "application/json",
"caseInsensitive": true
}
}
...
},
...
}
3.7 可變狀態請求
requiredScenarioState/newScenarioState 可以記錄當前API映射所處的狀態以及新的狀態,可以通過改變其狀態,從而可以使同一個API返回不同的結果, 如下面的請求則可以改變狀態,返回不同的結果.
{
"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 >"
}
}
]
}
- 第一次訪問時,Started狀態:
- 訪問第二個接口,改變其狀態如下
- 再次訪問API,返回新的數據
3.8 API 故障模擬
設置延時返回,如下可以設置定時延遲2秒。
{
"request": {
"method": "GET",
"url": "/delayed"
},
"response": {
"status": 200,
"fixedDelayMilliseconds": 2000
}
}
如下是延遲2秒的返回結果。
同時也可以設置隨機的延遲時間:
{
"request": {
"method": "GET",
"url": "/random/delayed"
},
"response": {
"status": 200,
"delayDistribution": {
"type": "lognormal",
"median": 50,
"sigma": 0.4
}
}
}
總結
WireMock可以快速搭建Web服務,可以模擬開發測試需要的各種請求,使用十分方便。對于維護測試環境穩定以及提高開發效率方面都有不錯的效果。
-
API
+關注
關注
2文章
1485瀏覽量
61817 -
HTTP
+關注
關注
0文章
501瀏覽量
31065 -
Web服務器
+關注
關注
0文章
138瀏覽量
24371 -
模擬器
+關注
關注
2文章
867瀏覽量
43165
發布評論請先 登錄
相關推薦
評論