- 客戶要求進行完整的產品展示,人員和時間都有限,來不及開發後端服務。。。
- 工期比較緊的專案,前端已開發完成,需要除錯,後端介面還未開發完成。。。
- 公司某個專案依賴於第三方服務,但是第三方服務不方便頻繁呼叫。。。
實際的工作當中,從商務到開發再到測試,經常會遇到上述所說的情況,如此的反覆就造成了專案
的進度受限,這被稱為短板效應。此時,Moco框架可以很好的解決這些問題。
一、Moco簡介
Moco是基於Java開發的開源專案,是一個簡單搭建模擬伺服器的框架,可以模擬http、https、
socket等協議。其執行原理是Moco會根據一些配置,啟動一個真正的HTTP服務(會監聽本地的某
個埠)。當發起的請求滿足配置中的條件時,會返回指定的響應資料。
Moco有兩種使用模式:API模式和獨立執行模式,如果是編寫Java應用或者以其它JVM上的語
言編寫的應用,可以採用直接呼叫API的模式;獨立執行模式就是下載moco服務jar包,然後根據實
際需要編寫配置檔案或者進行二次開發。
二、環境配置
1.安裝JDK並配置好環境變數,這個不再細說,大家自行百度。
2.下載服務jar包:Moco下載
下載完成的jar包是這樣的 moco-runner-1.1.0-standalone.jar ,本文采用的是最新版本。
三、執行Moco
我們新建一個資料夾,命名為Moco,把jar包放在這裡,新建test.json檔案,內容如下:
[ { "response": { "text": "Hello world!" } } ]
在Moco資料夾中點選滑鼠右鍵開啟終端,輸入以下命令:
java -jar moco-runner-1.1.0-standalone.jar start -p 8080 -c test.json
<path-to-moco-runner>:jar包存放路徑,我這裡在同一個資料夾,直接輸入jar包名字
<monitor-port>:服務監聽的埠,設定一個未被佔用的埠
<configuration-file>:配置檔案存放路徑
如下圖中所示,表示啟動成功:
此時,在瀏覽器中輸入: http://localhost:8080 可以看到Hello word!,說明我們搭建的模擬
伺服器可以正常使用了。
四、Moco常用配置引數
Moco主要致力於伺服器的配置,目前只有兩種API:Request 和 Response。兩種API都有
各自的屬性,在配置使用的過程中,一定要遵循這些方法。
Request 請求
有14個固定屬性: method, headers, json, factory, uri, text, cookies, xpaths,json_paths,
version, file, queries,path_resource,forms 。
Response 響應
有12個固定屬性: status, attachment, headers, version, factory, file,text, proxy, cookies,
json, latency, path_resource 。
1.普通的GET請求
{
"description": "查詢書籍", "request" : { "method" : "get", "uri" : "/article/book/" }, "response" : { "text" : "響應內容" } }
2.GET方法帶引數
{
"description": "查詢具體書籍", "request": {
"method": "get"
"uri": "/article/book", "queries": { "name": "kaka", "id": "75" } }, "response": { "text": "響應內容" } }
3.POST方法定義請求頭和JSON請求體
[ { "description": "登入", "request": { "uri": "/login", "method": "post", "headers": { "Content-Type": "application/json" }, "json": { "username": "13812345678", "password": "123456" } }, "response": { "text": "login success" } } ]
4.定義響應結果為JSON格式
[ { "description": "登入", "request": { "uri": "/login" }, "response": { "headers": { "Content-Type": "application/json;charset=UTF-8" }, "json": { "code": "00", "msg": "登入成功", "data": { "userId": 5, "token": "jvuRbbA5EKPzJTfZbDAY9SMzq40YBfws" } } } } ]
五、Moco實戰應用
1.單體配置
將所有的介面請求和返回資料寫入到同一個json檔案中,這種配置適用於請求報文和響應結果
內容不大的情況,如下圖所示將整個配置寫入到 config.json 中:
[ { "description": "登入", "request": { "uri": "/login", "method": "post", "headers": { "Content-Type": "application/json" }, "json": { "username": "13312345678", "password": "123456" } }, "response": { "headers": { "Content-Type": "application/json;charset=UTF-8" }, "json": { "retCode": "00", "retMsg": "success", "data": { "userId": 6, "token": "ked6jsdXkjdwm37dy6" } } } } ]
在終端中執行啟動命令: java -jar D:\Moco\moco-runner-1.1.0-standalone.jar start -p 8080 -c config.json
服務啟動後,使用介面測試工具呼叫該配置中的介面。
2.全域性配置
Moco支援在全域性的配置檔案中引入其他配置檔案,我們可以根據實際需要分別定義配置檔案,然後在全域性
檔案中引用。這樣,既便於管理,又輕鬆的解決了介面請求報文或響應資料太大不方便檢視的問題。
a.在Moco資料夾中建立login資料夾,在login資料夾中建立 local_login_req.json 和 local_login_res.json 兩個
檔案;
b.在Moco資料夾中建立 global_settings.json 檔案
在 local_login_req.json 中寫入:
[ { "description": "登入", "request": { "uri": "/login", "method": "post", "headers": { "Content-Type": "application/json" }, "json": { "username": "13300001122", "password": "123456" } }, "response": { "headers": { "Content-Type": "application/json;charset=UTF-8" }, "file": "./login/local_login_res.json" } } ]
在 local_login_res.json 中寫入:
[ { "retCode":"00", "retMsg":"登入成功", "data":{ "userId":2, "token":"ked6jsdXkjdwm37dy6xm" } } ]
在 global_settings.json 中寫入:
[ { "include":"login/local_login_req.json" } ]
準備完成後,在當前目錄的終端中輸入: java -jar moco-runner-1.1.0-standalone.jar start -p 8080 -g global_settings.json
注意:在啟動服務的命令中, -c 是載入單體配置檔案, -g 是載入全域性配置檔案。兩者不可以混淆,否則
配置檔案解析會報錯。
Moco開源連結:https://github.com/dreamhead/moco