Mock服务moco系列(三)重定向、正则表达式、延迟、模板、事件、分模块设计

Mock服务moco系列(三)
重定向、正则表达式、延迟、模板、事件、分模块设计
 
 
目录
  • 1、重定向
  • 2、正则表达式
  • 3、延迟
  • 4、模板
  • 5、事件
  • 5.1、完整事件
  • 5.2、异步事件
  • 6、分模块设计
 
 
1、重定向
 
 
moco可以帮我们模拟重定向,将请求重定向到不同的url,可以模拟一些请求拦截、请求验证失败等情况。
 
一、重定向到百度
1、创建09Redirect.json配置文件。
redirectTo:将请求重定向到指定的url上。
内容如下:
[
    {
        "description":"重定向到百度",
        "request":{
            "uri":"/redirect"
        },
        "redirectTo":"https://www.baidu.com/"
    }
]
 
2、输入启动moco服务命令。
java -jar moco-runner-0.12.0-standalone.jar http -p 8083 -c 09Redirect.json
 
3、浏览器访问moco服务地址。
访问地址:http://localhost:8083/redirect
访问结果显示:访问http://localhost:8083/redirect跳转到https://www.baidu.com/页面。

 

 

 
二、重定向到自定义网页
1、创建10Redirect2.json配置文件。
该配置文件有2个接口(重定向请求、被重定向到的请求)。
redirectTo:将请求重定向到指定的url上。
内容如下:
[
    {
        "description":"重定向到自定义网页",
        "request":{
            "uri":"/redirect/topath"
        },
        "redirectTo":"/redirect/new"
    },
    {
        "description":"被重定向到的请求",
        "request":{
            "uri":"/redirect/new"
        },
        "response":{
            "headers":{
                "Content-Type":"text/html;charset=gbk"
            },
            "text":"重定向成功"
        }
    }
]
 
2、输入启动moco服务命令。
java -jar moco-runner-0.12.0-standalone.jar http -p 8083 -c 10Redirect2.json
 
3、浏览器访问moco服务地址。
访问地址:http://localhost:8083/redirect/topath
访问结果显示:
访问http://localhost:8083/redirect/topath跳转到http://localhost:8083/redirect/new页面。

 

 

 
 
2、正则表达式
 
 
1、创建11Match.json配置文件。
match:正则表达式。
\\w 匹配字母、数字、下划线的字符。
* 表示任意多个字符。
\\w* 表示任意多个\\w
内容如下:
[
    {
        "description":"正则表达式",
        "request":{
            "uri":{
                "match": "/\\w*/demo"
            }
        },
        "response":{
            "text": "Moco Match"
        }
    }
]
 
2、输入启动moco服务命令。
java -jar moco-runner-0.12.0-standalone.jar http -p 8083 -c 11Match.json
 
3、浏览器访问moco服务地址。
由于请求地址使用正则表达式,以下地址都可以访问:
http://localhost:8083/123/demo
http://localhost:8083/abc/demo
http://localhost:8083/123abc/demo
访问结果显示:

 

 

 
moco是由Java正则表达式实现的,可以在这里查看更多的细节。
https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
 
 
3、延迟
 
 
有时,我们需要一个延迟来模拟缓慢的服务器端操作。
1、创建12Latency.json配置文件。
latency:延迟。例如设置延迟5秒:
"latency":{
"duration": 5,
"unit": "second"
}
 
内容如下:
[
    {
        "description":"延迟",
        "request":{
            "uri":"/demo",
            "method":"get"
        },
        "response":{
            "latency":{
            "duration": 5,
            "unit": "second"
        },
            "text":"Moco Latency"
        }
    }
]
 
2、输入启动moco服务命令。
java -jar moco-runner-0.12.0-standalone.jar http -p 8083 -c 12Latency.json
 
3、浏览器访问moco服务地址。
访问地址:http://localhost:8083/demo
访问结果显示:延迟5秒后,返回响应内容。

 

 

 
 
4、模板
 
 
有时,我们需要基于某些内容定制我们的响应,例如响应应该具有与请求相同的头。可以通过模板来实现:可以在模板中使用req获取请求信息。
方法:
"template": "${req.version}"
"template": "${req.method}"
"template": "${req.content}"
"template": "${req.headers['foo']}"
"template": "${req.queries['foo']}"
"template": "${req.forms['foo']}"
"template": "${req.cookies['foo']}"
"template": "${req.json.foo}"
 
1、创建13Template.json配置文件。
template:模板。
例如:在响应内容里获取请求参数字段值。
"template": "${req.queries['username']}"
内容如下:
[
    {
        "description":"模板",
        "request":{
            "uri":"/demo",
            "method":"get"
        },
        "response":{
            "text": {
                "template": "${req.queries['username']}"
            }
        }
    }
]
 
2、输入启动moco服务命令。
java -jar moco-runner-0.12.0-standalone.jar http -p 8083 -c 13Template.json
 
3、浏览器访问moco服务地址。
访问地址:http://localhost:8083/demo?username=admin
访问结果显示:响应内容获取请求参数username的值(admin)。

 

 

 
 
5、事件
 
 
5.1、完整事件
有时,我们请求一些特定接口的时候,可能需要去请求别的地址,从而才能完成请求。
完整事件将在你的请求被完全处理后触发。
 
一、Get请求
1、创建14Complete.json配置文件。
内容如下:
[
    {
        "description":"完整事件(Get请求)",
        "request":{
            "uri":"/event",
            "method":"get"
        },
        "response": {
            "text": "event"
        },
        "on": {
            "complete": {
                "get" : {
                    "url":"https://www.baidu.com/"
                }
            }
        }
    }
]
 
2、输入启动moco服务命令。
java -jar moco-runner-0.12.0-standalone.jar http -p 8083 -c 14Complete.json
 
3、浏览器访问moco服务地址。
访问地址:http://localhost:8083/event
访问结果显示:

 

 

 
二、Post请求
1、创建15Complete2.json配置文件。
内容如下:
[
    {
        "description":"完整事件(Post请求)",
        "request":{
            "uri":"/event",
            "method":"get"
        },
        "response":{
            "text":"event"
        },
        "on":{
            "complete":{
                "post":{
                    "url":"https://www.baidu.com/",
                    "content": "content"
                }
            }
        }
    }
]
 
2、输入启动moco服务命令。
java -jar moco-runner-0.12.0-standalone.jar http -p 8083 -c 15Complete2.json
 
3、浏览器访问moco服务地址。
访问地址:http://localhost:8083/event
访问结果显示:

 

 

 
5.2、异步事件
前面的请求默认都是同步的,这意味着只有等到服务器处理完后才会返回给客户端。当然你也可以进行异步请求,还可以指定等待此异步请求的等待时间。
 
1、创建16Asynchronous.json配置文件。
"async":"true"开启异步请求。
"latency":5000设置等待此异步请求的等待时间。
内容如下:
[
    {
        "description":"异步事件",
        "request":{
            "uri":"/event",
            "method":"get"
        },
        "response":{
            "text":"event"
        },
        "on":{
            "complete":{
                "async":"true",
                "latency":5000,
                "post":{
                    "url":"https://www.baidu.com/",
                    "content":"content"
                }
            }
        }
    }
]
 
2、输入启动moco服务命令。
java -jar moco-runner-0.12.0-standalone.jar http -p 8083 -c 16Asynchronous.json
 
3、浏览器访问moco服务地址。
访问地址:http://localhost:8083/event
访问结果显示:

 

 

 
 
6、分模块设计
 
 
在实际工作中,每个业务模块都有自己的业务(很多请求),如果把这些不同的业务模块都写在一个配置文件里,显然不是很好管理。这里采用分模块设计思路解决这个问题。
 
1、创建配置文件。
如图所示:
Global.json为全局配置文件(指定A业务模块、B业务模块),moco支持在全局的配置文件中引入其他配置文件,这样就可以按不同业务定义配置文件,便于管理。
A.json为A业务模块配置文件。
B.json为B业务模块配置文件。

 

 

Global.json内容如下:
[
    { "context":"/a", "include":"A.json" },
    { "context":"/b", "include":"B.json" }
]
 
A.json内容如下:
[
    {
        "description":"模块A",
        "request":{
            "uri":"/demoa"
        },
        "response":{
            "text":"A Module"
        }
    }
]
 
B.json内容如下:
[
    {
        "description":"模块B",
        "request":{
            "uri":"/demob"
        },
        "response":{
            "text":"B Module"
        }
    }
]
 
2、输入启动moco服务命令。
java -jar moco-runner-0.12.0-standalone.jar http -p 8083 -g Global.json
注意,此时需要通过参数-g来加载全局配置文件,而不是使用-c。
 
3、浏览器访问moco服务地址。
(1)访问A业务模块
访问地址:http://localhost:8083/a/demoa
访问结果显示:

 

 

 
(2)访问B业务模块
访问地址:http://localhost:8083/b/demob
访问结果显示:

 

 

 
posted @ 2021-05-10 16:19  Liang_cr  阅读(555)  评论(0编辑  收藏  举报