工作中需要做桩、挡板、Mock,怎么办?使用Moco让这些变得简单。
本人介绍Moco常用的JSON配置方法。
请求
- 发送文本
{
"request" :
{
"text" : "foo"
},
"response" :
{
"text" : "bar"
}
}
- 发送文件
{
"request" :
{
"file" : "foo.request"
},
"response" :
{
"text" : "bar"
}
}
- 请求的资源路径 URI(url地址第四个部分)
{
"request" :
{
"uri" : "/foo"
},
"response" :
{
"text" : "bar"
}
}
- 查询参数 Query Parameter
{
"request" :
{
"uri" : "/foo",
"queries" :
{
"param" : "blah"
}
},
"response" :
{
"text" : "bar"
}
}
- 请求方法 HTTP Method
{
"request" :
{
"method" : "get",
"uri" : "/foo"
},
"response" :
{
"text" : "bar"
}
}
- HTTP版本 HTTP Version
{
"request":
{
"version": "HTTP/1.0"
},
"response":
{
"text": "version"
}
}
- 请求头 Header
{
"request" :
{
"method" : "post",
"headers" :
{
"content-type" : "application/json"
}
},
"response" :
{
"text" : "bar"
}
}
- Cookies
{
"request" :
{
"uri" : "/cookie",
"cookies" :
{
"login" : "true"
}
},
"response" :
{
"text" : "success"
}
}
- Form表单 application/x-www-form-urlencoded
{
"request" :
{
"method" : "post",
"forms" :
{
"name" : "foo"
}
},
"response" :
{
"text" : "bar"
}
}
- XML
内容形式发送XML(xml的空格需忽略)
{
"request":
{
"uri": "/xml",
"text":
{
"xml": "1 "
}
},
"response":
{
"text": "foo"
}
}
文件的方式发送XML
{
"request":
{
"uri": "/xml",
"file":
{
"xml": "your_file.xml"
}
},
"response":
{
"text": "foo"
}
}
- XPath
如果请求的body是html或者xml,可以使用Xpath匹配正文
{
"request" :
{
"method" : "post",
"xpaths" :
{
"/request/parameters/id/text()" : "1"
}
},
"response" :
{
"text" : "bar"
}
}
- JSON
内容形式发送JSON
{
"request": {
"uri": "/json",
"json": {
"foo": "bar"
}
},
"response": {
"text": "foo"
}
}
文件形式发送JSON
{
"request":
{
"uri": "/json",
"file":
{
"json": "your_file.json"
}
},
"response":
{
"text": "foo"
}
}
- JSONPath
请求的内容是JSON或者HTML,可以使用JSONPath匹配正文
{
"request":
{
"uri": "/jsonpath",
"json_paths":
{
"$.book[*].price": "1"
}
},
"response":
{
"text": "response_for_json_path_request"
}
}
- 操作
- 匹配 Match
使用正则匹配
{
"request":
{
"uri":
{
"match": "/\\w*/foo"
}
},
"response":
{
"text": "bar"
}
}
- 以xx开头 Starts With
{
"request":
{
"uri":
{
"startsWith": "/foo"
}
},
"response":
{
"text": "bar"
}
}
- 以xx结尾 Ends With
{
"request":
{
"uri":
{
"endsWith": "foo"
}
},
"response":
{
"text": "bar"
}
}
- 包含 Contain
{
"request":
{
"uri":
{
"contain": "foo"
}
},
"response":
{
"text": "bar"
}
}
- 存在/不存在 Exist
必须要发送头foo,内容任意
{
"request":
{
"headers": {
"foo": {
"exist" : "true"
}
}
},
"response":
{
"text": "bar"
}
}
不存在头foo
{
"request":
{
"headers": {
"foo": {
"exist" : "false"
}
}
},
"response":
{
"text": "bar"
}
}
响应
- 响应文本
{
"request" :
{
"text" : "foo"
},
"response" :
{
"text" : "bar"
}
}
- 响应文件
{
"request" :
{
"text" : "foo"
},
"response" :
{
"file" : "bar.response"
}
}
- 指定文件编码
[
{
"response":
{
"file":
{
"name": "gbk.response",
"charset": "GBK"
}
}
}
]
文件编码也可以在 path resource设置
[
{
"response":
{
"path_resource":
{
"name": "gbk.response",
"charset": "GBK"
}
}
}
]
- 状态码 Status Code
{
"request" :
{
"text" : "foo"
},
"response" :
{
"status" : 200
}
}
- HTTP版本 Version
{
"request":
{
"uri": "/version10"
},
"response":
{
"version": "HTTP/1.0"
}
}
- 响应头
{
"request" :
{
"text" : "foo"
},
"response" :
{
"headers" :
{
"content-type" : "application/json"
}
}
}
-
代理 Proxy
单个url Single URL
{
"request" :
{
"text" : "foo"
},
"response" :
{
"proxy" : "https://www.baidu.com"
}
}
故障转移 Failover
如果远程服务器不可达到,服务器使用本地配置恢复
{
"request" :
{
"text" : "foo"
},
"response" :
{
"proxy" :
{
"url" : "http://localhost:12306/unknown",
"failover" : "failover.json"
}
}
}
详细的Proxy大家参考官网:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md#description-as-comment
-
重定向 Redirect
{
"request" :
{
"uri" : "/redirect"
},
"redirectTo" : "http://www.github.com"
}
- Cookie
{
"request" :
{
"uri" : "/cookie"
},
"response" :
{
"cookies" :
{
"login" : "true"
}
}
}
Cookie path
{
"request" :
{
"uri" : "/cookie"
},
"response" :
{
"cookies" :
{
"login" : {
"value" : "true",
"path" : "/"
}
}
}
}
Cookie domain
{
"request" :
{
"uri" : "/cookie"
},
"response" :
{
"cookies" :
{
"login" : {
"value" : "true",
"domain" : "github.com"
}
}
}
}
Cookie Secure
{
"request" :
{
"uri" : "/cookie"
},
"response" :
{
"cookies" :
{
"login" : {
"value" : "true",
"secure" : "true"
}
}
}
}
Cookie HTTP Only
{
"request" :
{
"uri" : "/cookie"
},
"response" :
{
"cookies" :
{
"login" : {
"value" : "true",
"httpOnly" : "true"
}
}
}
}
Cookie Max Age
{
"request" :
{
"uri" : "/cookie"
},
"response" :
{
"cookies" :
{
"login" : {
"value" : "true",
"maxAge": {
"duration": 1,
"unit": "hour"
}
}
}
}
}
- 附件
{
"request": {
"uri": "/file_attachment"
},
"response": {
"attachment": {
"filename": "foo.txt",
"file": "foo.response"
}
}
}
- 延迟 Latency
{
"request" :
{
"text" : "foo"
},
"response" :
{
"latency":
{
"duration": 1,
"unit": "second"
}
}
}
- 响应序列 Sequence(不会循环)
{
"request" : {
"uri" : "/seq"
},
"response": {
"seq": [
{
"text" : "foo"
},
{
"text" : "bar"
},
{
"text" : "blah"
}
]
}
}
{
"request" : {
"uri" : "/seq"
},
"response": {
"seq": [
{
"status" : "302"
},
{
"status" : "302"
},
{
"status" : "200"
}
]
}
}
- 循环响应
{
"request" : {
"uri" : "/cycle"
},
"response": {
"cycle": [
{
"text" : "foo"
},
{
"text" : "bar"
},
{
"text" : "blah"
}
]
}
}
{
"request" : {
"uri" : "/cycle"
},
"response": {
"cycle": [
{
"status" : "302"
},
{
"status" : "302"
},
{
"status" : "200"
}
]
}
}
- JSON响应 JSON Response
{
"request":
{
"uri": "/json"
},
"response":
{
"json":
{
"foo" : "bar"
}
}
}