一、什么是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的服务,监听指定的端口
六、环境准备
- jdk1.8https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
- mocohttps://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/
七、环境搭建
- 安装jdk,配置环境变量
- 把moco-runner-1.5.0-standalone.jar 和配置文件如moco.json放同一目录
八、Moco配置文件
moco配置文件格式必须是json格式。配置文件是个数组,也就是说,可以在一个文件中配置多个接口的请求和响应
配置文件常用字段
九、启动
- # 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"
- }
-
- }
-
-
- ]
- 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"
- }
-
- }
-
-
- ]
- 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"
- }
-
- }
-
-
- ]
- 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"
- }
-
- }
-
-
- ]
- 重定向
- [
- {
- "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-8java -Dfile.encoding=utf-8 -jar moco-runner-1.5.0-standalone.jar http -p 8088 -c moco.json