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.jsonjava -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

猜你喜欢

转载自blog.csdn.net/qq_21084687/article/details/82971482