Mock工具之Moco使用

一、什么是Mock

mock英文单词有愚弄、嘲笑、模拟的意思,这里主要是模拟的意思

二、什么是Moco

  • 开源的、基于java开发的一个mock框架
  • 支持http、https、socket等协议

三、Mock的特点

  • 只需要简单的配置request、response等即可满足要求

  • 支持在request 中设置headers、cookies等

  • 支持GET、POST、PUT、DELETE等请求方法

  • 无需环境配置,有Java环境即可

  • 修改配置文件后,立刻生效

  • 对可能用到的数据格式都支持,如json、text、xml、file等。

四、什么场景会用到

  • 模拟第三方接口的返回
  • 后端接口还没有开发完毕,前端想要进行联调
  • 接口测试过程中,可能某些接口依赖有问题,也可以使用mock

五、Moco的原理

  • 根据json配置文件,启动一个http的服务,监听指定的端口

六、环境准备

七、环境搭建

  • 安装jdk,配置环境变量
  • 把moco-runner-1.5.0-standalone.jar 和配置文件如moco.json放同一目录
    image

八、Moco配置文件

moco配置文件格式必须是json格式。配置文件是个数组,也就是说,可以在一个文件中配置多个接口的请求和响应

配置文件常用字段
image

九、启动

# http 指定协议
# -p 指定端口
# -c 指定配置文件
java -jar moco-runner-1.5.0-standalone.jar http -p 8088 -c moco.json

十、示例

  • demo1
[
  {
    "description":"这是一个moco例子",
    "request":{
        "uri":"/demo"
    },
    "response":
    {
        "text":"Hello,Moco",
        "status": "200"
    }
  }
]
  • get请求,不带参数
[
    {
    "description":"这是一个get请求,不带参数",
    "request":{
        "uri":"/goods",
        "method": "get"
    },
    "response":
    {
        "headers": {
            "Content-Type": "text/plain; charset=GBK"
        },
        "text":"这是一个GET请求,不带参数",
        "status": "200"
    }
  }
]
  • get请求,带参数
[
  {
    "description": "这是一个get请求带参数",
    "request": {
      "uri": "/goods",
      "method": "get",
      "queries": {
        "id": "g01"
      }
    },
    "response":
    {
        "headers": {
            "Content-Type": "application/json;charset=utf-8"
        },
        "json":{"name": "百世可乐","price": 3},
        "status": "200"
    }

  }


]

image

  • post请求,带参数,带的是json参数
[
  {
    "description": "这是一个post请求带参数",
    "request": {
      "uri": "/goods",
      "method": "post",
      "json": {
        "id": "g01"
      }
    },
    "response":
    {
        "headers": {
            "Content-Type": "application/json;charset=utf-8"
        },
        "json":{"name": "百世可乐","price": 3},
        "status": "200"
    }

  }


]

image

  • post请求,带headers参数
[
  {
    "description": "post请求,带headers参数",
    "request": {
      "uri": "/goods",
      "method": "post",
	  "cookies":{"ssid":"666666"},
	  "headers":{"authorization": "bearer 123456"},
      "json": {
        "id": "g01"
      }
    },
    "response":
    {
        "headers": {
            "Content-Type": "application/json;charset=utf-8"
        },
        "json":{"name": "百世可乐","price": 3},
        "status": "200"
    }

  }


]

image

  • post请求,带forms参数
[
  {
    "description": "这是一个post请求,带forms参数",
    "request": {
      "uri": "/login",
      "method": "post",
      "forms": {
        "username": "admin",
		"password":"123456"
      }
    },
    "response":
    {
        "headers": {
            "Content-Type": "application/json;charset=utf-8"
        },
        "json":{"msg": "登录成功"},
        "status": "200"
    }

  }


]

image

  • 重定向
[
	{
        "description": "这是一个重定向",
        "request": {
            "uri": "/redirect",
            "method": "get"

        },
        "redirectTo": "http://www.baidu.com"

    }
]

十一、多配置文件模式

为了模拟多个接口,以及方便管理这些接口,moco-runner增加了配置模式,具体如下:

  • 首先,创建多个接口文件,比如:login.json,index.json
  • 然后,在当前文件夹下创建配置文件,config.json,用于管理接口文件login.json,index.json
  • 最后,用参数-g启动服务

接口文件moco.json

[
  {
    "description": "Moco Demo",
    "request": {
      "method": "get",
      "uri": "/demo"
    },
    "response": {
      "text": "Hello Moco"
    }
  },
  {
    "description": "users",
    "request": {
      "method": "get",
      "uri": "/users"
    },
    "response": {
      "headers": {
        "Content-Type": "application/json;charset=utf-8"
      },
      "json": {
        "code": 200,
        "msg": "success",
        "data": [
          {
            "id": 1,
            "username": "张三"
          },
          {
            "id": 2,
            "username": "李四"
          },
          {
            "id": 3,
            "username": "王五"
          }
        ]
      }
    }
  },
  {
    "description": "这是一个get请求,不带参数",
    "request": {
      "uri": "/goods",
      "method": "get"
    },
    "response": {
      "text": "这是一个GET请求,不带参数",
      "status": "200"
    }
  }
]

接口文件index.json

[
  {
    "description": "index",
    "request": {
      "method": "get",
      "uri": "/index"
    },
    "response": {
      "text": "Hello home"
    }
  }
]

配置文件config.json

[
	{"include":"index.json"},
	{"include":"moco.json"}

]

十二、中文乱码问题

加上参数 -Dfile.encoding=utf-8
java -Dfile.encoding=utf-8 -jar moco-runner-1.5.0-standalone.jar http -p 8088 -c moco.json

posted @ 2023-10-09 14:25  弩哥++  阅读(270)  评论(0编辑  收藏  举报