今天,我们打算花几分钟时间创建一个自己用来测试的 MockUp 服务器。
因为我是前端开发,所以这里使用 Node.js 创建一个简单的迷你工程来完成!
目标
用 curl 访问 mockserver 可以获得自己想要的结果
>>> node client1.js
>>> curl http://localhost:1080/api/demo
{"name":"value"}
>>> curl -X POST 'http://localhost:1080/api/demo2?test=true' -d someBody
{"name":"value"}
我喜欢上代码
直接创建一个起步目录
npm init
用 Java 安装 mockserver(最简单)
http://www.mock-server.com/where/downloads.html
总结起来就是:
>>> wget http://search.maven.org/remotecontent?filepath=org/mock-server/mockserver-netty/3.10.1/mockserver-netty-3.10.1-jar-with-dependencies.jar -O mockserver-netty-3.10.1-jar-with-dependencies.jar
>>> java -jar mockserver-netty-3.10.1-jar-with-dependencies.jar -serverPort 1080 -proxyPort 1090
用 Node.js 安装 mockserver
安装必要的 Grunt 工具和部件
npm install -g grunt-cli
npm install grunt --save-dev
npm install mockserver-grunt --save-dev
参考官方文档进行配置
然后创建一个文件 Gruntfile.js
用来调度本地的 MockServer 服务
module.exports = function(grunt) {
grunt.initConfig({
start_mockserver: {
start: {
options: {
serverPort: 1080,
proxyPort: 1090
}
}
},
stop_mockserver: {
stop: {
}
}
});
grunt.loadNpmTasks('mockserver-grunt');
grunt.registerTask('default', ['start_mockserver']);
grunt.registerTask('stop', ['stop_mockserver']);
grunt.registerTask('start', ['start_mockserver']);
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
现在,通过执行下边命令即可启动一个 Mock Server 了
grunt start
创建 MockServer Client
那么,接下来创建一个客户端文件 client1.js
用来注册自己需要如何 MockUp 一个 API 接口。
首先安装依赖:
npm install mockserver-client
然后创建文件 client1.js
:
var mockServer = require('mockserver-client'),
mockServerClient = mockServer.mockServerClient,
proxyClient = mockServer.proxyClient;
var remote = mockServerClient('localhost', 1080),
remoteProxy = proxyClient('localhost', 1090);
remote.reset();
remote.mockSimpleResponse('/api/demo', { name: 'value'}, 203);
remote.mockAnyResponse({
'httpRequest': {
'method': 'POST',
'path': '/api/demo2',
'queryStringParameters': [
{
'name': 'test',
'values': [ 'true' ]
}
],
'body': {
'type': "STRING",
'value': 'someBody'
}
},
'httpResponse': {
'statusCode': 200,
'body': JSON.stringify({name: 'value'}),
'delay': {
'timeUnit': 'MILLISECONDS',
'value': 250
}
},
'times': {
'remainingTimes': 1,
'unlimited': false
}
});
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
好了,搞定!
使用一下试试
$ npm install
$ node client1.js
想某些请求被现网服务器调用?
也许想同时使用现网服务器的登陆功能?
>>> curl -X POST http://localhost:1080/user/login -d account=demo_user -d password=demo_password
{"status":"LOGIN_SUCCESS","token":"abcdefgxxxxxxxx"}
配置一个新的请求,放到 client1.js
中:
remote.mockAnyResponse({
httpRequest: {
method: 'POST',
path: '/user/login'
},
httpForward: {
host: '192.168.1.101',
port: 8080,
schema: "HTTP"
},
times: {
remainingTimes: 1,
unlimited: false
}
});
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
然后再重新注册一下 mock 消息试试:
>>> node client1.js
>>>
支持跨域
如果需要跨域的话,需要在 Reponse 消息中配置:
{
'httpResponse': {
'headers': [
{name: 'Access-Control-Allow-Origin', values: ['*']},
{name: 'Access-Control-Allow-Methods', values: ['POST', 'GET', 'OPTIONS']}
]
}
}
搞定!