【Mock】moco學習筆記

Moco
Moco解決了開發前端時沒有後端支持,開發接口時依賴沒有到位的尷尬場景。
特點
1.只需要簡單的配置request、response等即可滿足要求,支持http、https、socket。可以說是非常的靈活性。
2.支持在request 中設置 Headers , Cookies , StatusCode等。
3.對GET、POST、PUT、DELETE等請求方式均支持,很適合web開發。
4.無需環境配置,有java環境即可。
5.修改配置後,立刻生效。只需要維護接口,也就是契約即可。
6.對可能用到的數據格式都支持,如json、text、xml、file等。
7.還能與其他工具集成,如Junit、Maven、Gradle等。
安裝、運行
Moco 是一個搭建模擬服務器的工具,其支持 API 和獨立運行兩種方式。
獨立運行方式
Moco的使用非常簡單,從官網上下載一個jar包。然後相同目錄下創建一個json配置文件即可。

  1. library.json
    其中”request”裏面定義了請求的方式採用put,uri是/api/iax/v1/face-engine/library/{id}。“response”裏面定義了mock返回數據是個json對象。
[
    {
        "request" : 
        {
            "method" : "put",
            "uri" : {"match" : "/api/iax/v1/face-engine/library/\\d+"}
        },
        "response" : 
        {
            "json" : 
            {
                "error_code" : 0,
                "error_msg" : ""
            }
        }
    }
]
  1. 運行服務
    java -jar moco-runner-0.12.0-standalone.jar http -p 81 -c library.json
    其中-p表示端口號,-c是讀取的json配置文件,當moco服務啓動之後,根據library.json文件中的定義,當向http://localhost:81/api/v1/face-engine/library路徑發送post請求的時候,會返回json文件中定義的返回數據。

發送請求後,dos界面也會顯示請求和返回的信息。

Moco服務可以同時起多個,因此不同服務的rest請求都可以打mock,只需要將端口定義成不一樣的,一個端口對應一個服務。

當json配置文件內容修改後,已啓動的moco服務會自動重新加載,因此不需要重啓moco。dos命令行裏可以通過Ctr+C的方式停止moco服務。

Json定義
查看官方文檔可解鎖各種json定義,網址見文檔末尾參考網址。

單個json文件中定義多個請求
例如:
[{“request”:{ “uri”: “/hello”}, “response” : { “text”: “Hello World” }},
{“request”:{ “uri”: “/go”}, “response”: { “text” : “go away !!!” }} ]
Json中可包含json文件:

[
    {
        "request" :
        {
            "method" : "post",
            "uri" : "/api/iax/v1/face-engine/library"
        },
        "response" :
        {
            "file" : "response.json"
        }
    }
]
response.json文件:
{
    "error_code" : 0,
    "error_msg" : "",
    "library_id": 22 
}

全局配置
Moco支持在全局的配置文件中引入其他配置文件,這樣就可以分服務定義配置文件,便於管理。 配置好文件,在全局文件中引入即可。
全局配置如下:

[ 
    {
        "include" : "libraryAdd.json"
    }, 
    { 
        "include" : "libraryEdit.json"
    } 
] 

java -jar moco-runner-0.12.0-standalone.jar start -p 81 -g config.json
注意,此時需要通過參數 -g 在加載全局配置文件,使用的不是-c了。同時使用start而不是http。否則配置文件解析會報錯。這種方式可適用於mock一個外部依賴服務提供的多種請求,易於分模塊定義json和引用管理。

API方式
pom.xml裏面添加依賴

<dependency>
    <groupId>com.github.dreamhead</groupId>
    <artifactId>moco-core</artifactId>
    <version>0.12.0</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>fluent-hc</artifactId>
    <version>4.5</version>
</dependency>

官網文檔說明:
JSON Response

If the response is JSON, we don’t need to write JSON text with escape character in code.
@Since 0.10.2
You can give a POJO to Java API, it will be converted JSON text. Hint, this api will setup Content-Type header as well.
server.request(by(uri("/json"))).response(toJson(pojo));
@Since 0.12.0 toJson will be removed from 0.12.0, use json instead.
server.request(by(uri("/json"))).response(json(pojo));
從以上文檔內容可知,可以設置response內容爲一個pojo對象轉成的Json字符串,因此有以下示例:

@Test
public void addTest() throws Exception {

    // 創建一個pojo對象,內容設置爲欲返回的值。
    IALibraryTestRes iaRes = new IALibraryTestRes(0, "", "13");

    // 創建moco http server,設置端口號爲81
    HttpServer server = httpServer(81);
    
    // 定義moco服務請求路徑以及返回的mock內容
    server.post(by(uri("/api/v1/face-engine/library"))).response(json(iaRes));
    
    // 開啓一個線程運行moco服務,並執行單元測試內容
    running(server, () -> {
        ...
    });
}

PS:目前僅從文檔http://ju.outofmemory.cn/entry/96866知道請求路徑可以通過正則表達式匹配,而動態返回值還不知道如何定義可用。

參考網址
① Moco入門:https://blog.csdn.net/hustzw07/article/details/79598945
② Moco官網:https://github.com/dreamhead/moco
③ Moco官方Usage:
https://github.com/dreamhead/moco/blob/master/moco-doc/usage.md
④ Moco官方 HTTP(s) APIs :
https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md#json-response
⑤ Moco官方JUnit Integration:
https://github.com/dreamhead/moco/blob/master/moco-doc/junit.md
⑥ 模擬服務器MockServer之Moco詳細介紹:
https://blog.csdn.net/vite_s/article/details/54583243
⑦ Moco in action:https://blog.csdn.net/houyaowei/article/details/51444783
⑧ 使用moco模擬http(s)請求:https://www.jianshu.com/p/dd17342d497b
⑨ Moco官方命令行解釋:
https://github.com/dreamhead/moco/blob/master/moco-doc/cmd.md

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章