Mock 技术原理

2020-07-25  本文已影响0人  自如_

1. 什么是mock?

2. moco介绍

实现mock的技术很多,这些技术中,可以分为两类,mock数据和mock服务:

Moco 是类似一个 Mock 的工具框架,一个简单搭建模拟服务器的程序库/工具,下载就是一个JAR包。
有如下特点:

3. 下载moco

链接:https://pan.baidu.com/s/1DzHKtkduENSwF3W4YURoKA
提取码:g8k78

4. 配置json文件

我们需要先编辑一个json文件,用来模拟不同的请求,返回不同的响应。新建一个文件,格式改为json,然后打开这个文件进行编辑,内容如下:

 [{
  "description":"demo",
  "request":{
   "uri":"/demo1"
   },
  "response":{
   "text":"Hello,demo1"
  }
 }]

其中

5. 启动moco

moco项目是采用java开发的,所以启动moco前,需要安装jdk。未安装请先安装

把我们下载下来的moco的jar包和刚刚编辑好的json文件放到同一个文件夹路径下,如图:

image.png

然后在该路径下打开cmd命令行,如图:

image.png

方法:在该路径下,输入cmd,按回车,弹出命令行。

输入命令

java -jar moco-runner-1.1.0-standalone.jar http -p 9090 -c test.json

其中

执行命名后,如图:

image.png

此时我们mock的服务以及启动成功了,相当于在我们本地的9090端口上启动的,所以我们可以通过浏览器访问一下http://localhost:9090/demo 来看看返回的结果,注意,这里/demo就是我们在json文件中定义的uri。

image.png

如图,我们访问后得到了json文件中编辑的返回值。以上我们就完成了用moco来帮助我们生成mock。

6. 配置不同的请求

Demo1:约定URI
 [{
  "description":"demo1=约定URI",
  "request":{
   "uri":"/demo1"
   },
  "response":{
   "text":"Hello,demo1"
  }
demo2:约定请求参数
 [{
  "description":"demo2=约定请求参数",
  "request":{
   "queries":{
    "key1":"abc",
    "key2":"123"
     }
   },
  "response":{
   "text":"Hello,demo2"
  }
 }]
demo3:约定请求方法
 [{
  "description":"demo3=约定请求方法",
  "request":{
   "method":"DELETE"
   },
  "response":{
   "text":"Hello,demo3"
  }
 }]
demo4:约定请求头
 [{
  "description":"demo4=约定请求头",
  "request":{
   "headers":{
    "Content-Type":"application/xml"
    }
   },
  "response":{
   "text":"Hello,demo4"
  }
 }]

demo5:约定请求体参数-form

 [{
  "description":"demo5=约定请求体参数-form",
  "request":{
   "forms":{
    "key1":"abc"
    }
   },
  "response":{
   "text":"Hello,demo5"
  }
 }]

demo6:约定请求体参数-json

 [{
  "description":"demo6=约定请求体参数-json",
  "request":{
   "headers":{
    "Content-Type":"application/json"
    }, 
   "json":{
     "key1":"value1",
     "key2":"value2"
    }
   },
  "response":{
   "text":"Hello,demo6"
  }
 }]x`

demo7 uri-startsWith匹配(以什么字段开头)

[{
  "description":"demo7=uri-startsWith匹配", 
  "request":{ "uri":{
   "startsWith":"/sq" 
 }
}, 
  "response":{
  "text":"Hello,demo7" 
}
}]

demo8 uri-endWith匹配(以什么字段结尾)

[
{
    "description":"demo8=uri-endsWith匹配",
    "request":{
        "uri":{
        "endsWith":"sq" 
        } 
        }, 
    "response":{
    "text":"Hello,demo8"
    }
}]

demo9 uri-contain包含

[{
    "description":"demo9=uri-contain匹配",
    "request":{
        "uri":{
            "contain":"fcl"
        }
    },
    "response":{    
        "text":"Hello,demo9"  
    }
}]

Demo10:返回状态码

[{
    "description":"demo10=响应状态码",
    "request":{
        "uri":"demo10"
    },
    "response":{
        "status":200 }
}]

Demo11:返回响应头

[{
    "description":"demo11=响应头",
    "request":{
        "uri":"demo11"
    },
    "response":{
        "headers":{
            "Content-Type":"application/json"
        }
    }
}]

Demo12:重定向

[{
    "description":"demo12=重定向",
    "request":{
        "uri":"demo12"
    },
    "redirectTo":"http://www.baidu.com"
}]

Demo13:返回JSON格式的数据

[{
    "description":"demo13=返回json格式的数据",
    "request":{
        "uri":"/demo13" },
    "response":{
        "json":{
            "key1":"value1","key2":"value2"}
    } 
}]

7. 附:json脚本关键字

8. moco总结

上一篇 下一篇

猜你喜欢

热点阅读