前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mock服务moco系列(三)- 重定向、正则表达式、延迟、模板、事件、分模块设计

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

作者头像
wangmcn
发布2022-07-25 17:33:56
9430
发布2022-07-25 17:33:56
举报
文章被收录于专栏:AllTests软件测试

Mock服务moco系列(三)

重定向、正则表达式、延迟、模板、事件、分模块设计

1、重定向

moco可以帮我们模拟重定向,将请求重定向到不同的url,可以模拟一些请求拦截、请求验证失败等情况。

一、重定向到百度

1、创建09Redirect.json配置文件。

redirectTo:将请求重定向到指定的url上。

内容如下:

代码语言:javascript
复制
[
    {
        "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上。

内容如下:

代码语言:javascript
复制
[
    {
        "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

内容如下:

代码语言:javascript
复制
[
    {
        "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正则表达式实现的。

3、延迟

有时,我们需要一个延迟来模拟缓慢的服务器端操作。

1、创建12Latency.json配置文件。

latency:延迟。例如设置延迟5秒:

代码语言:javascript
复制
"latency":{
"duration": 5,
"unit": "second"
}

内容如下:

代码语言:javascript
复制
[
    {
        "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获取请求信息。

方法:

代码语言:javascript
复制
"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']}"

内容如下:

代码语言:javascript
复制
[
    {
        "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配置文件。

内容如下:

代码语言:javascript
复制
[
    {
        "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配置文件。

内容如下:

代码语言:javascript
复制
[
    {
        "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设置等待此异步请求的等待时间。

内容如下:

代码语言:javascript
复制
[
    {
        "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内容如下:

代码语言:javascript
复制
[
    { "context":"/a", "include":"A.json" },
    { "context":"/b", "include":"B.json" }
]

A.json内容如下:

代码语言:javascript
复制
[
    {
        "description":"模块A",
        "request":{
            "uri":"/demoa"
        },
        "response":{
            "text":"A Module"
        }
    }
]

B.json内容如下:

代码语言:javascript
复制
[
    {
        "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

访问结果显示:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AllTests软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 5.1、完整事件
  • 5.2、异步事件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档