一、mock概述
二、实现mock的几种手段
1、让开发在代码中进行固定返回指定数据
2、使用工具模拟返回数据 如:Fiddler
3、使用Python编写一个API接口 如:Flask
4、使用开源的MockServer:mocp
三、开源的MockServer工具:mocp
3.1 mocp是什么?
3.2 下载jar包
github地址:https://github.com/dreamhead/moco
下翻找到Download
下载完成是jar包
3.3 使用步骤
Moco文档:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md
1、配置好java环境,也就是jdk
2、执行命令:java -jar moco-runner-<version>-standalone.jar http -p 12306 -c foo.json
或:java -jar moco-runner-1.0.0-standalone.jar 协议类型 -p 端口号 -c 配置文件
启动效果
3.4 接口配置&GET请求(无参数)
创建一个foo1.json文件,然后增加以下request&response内容
[
{
"description": "注释字段:这是一个get请求",
"request": {
"uri":"/foo1/get"
},
"response": {
"text":"这是第一个demo",
"headers":{
"Content-Type":"text/html;charset=gbk"
}
}
}
]
注意:
moco模拟请求返回中文乱码问题,添加响应头编码格式为gbk或utf-8,就可以解决返回结果中文乱码
访问:
3.5 接口配置&GET请求(有参数)
同样需要先创建一个json文件,当让多种请求方式可以使用同一个文件
{
"description": "这是一个带参数的post请求",
"request": {
"uri": "/postWithParam",
"method": "post",
"forms": {
"name": "Tom",
"sex": "man"
}
},
"response": {
"code":200
"text": "请求成功!",
"headers":{
"Content-Type":"text/html;charset=utf-8"
}
}
}
访问:127.0.0.1:9090/foo1/get?name=Tom&id=1
3.5 接口配置&POST请求
[
{
"description": "这是一个带参数的Get请求的Demo",
"request": {
"uri": "/foo1/post",
"method": "post",
"forms": {
"name": "Tom",
"id": "1"
}
},
"response": {
"text": "我张三会来了",
"headers":{
"Content-Type":"text/html;charset=utf-8"
}
}
}
]
使用postman请求
3.7 返回值为Json格式的请求
[
{
"description": "这是一个带参数的Get请求的Demo",
"request": {
"uri": "/foo1/json",
"method": "post",
"forms": {
"type": "1"
}
},
"response": {
"json": {
"code": "200",
"msg": "susses",
"data": {
"id":"1111111",
"phone":"苹果手机"
}
},
"headers":{
"Content-Type":"text/html;charset=utf-8"
}
}
}
]
访问:http://localhost:9090/foo1/json
3.8 Json配置文件请求类型汇总
[
{
"description": "这是一个带参数的get请求",
"request": {
"uri": "/foo1/get",
"method": "get",
"queries": {
"name": "Tom",
"id": "1"
}
},
"response": {
"text": "请求成功",
"headers":{
"Content-Type":"text/html;charset=utf-8"
}
}
},
{
"description": "这是一个post请求",
"request": {
"uri": "/foo1/post",
"method": "post",
"forms": {
"name": "Tom",
"id": "1"
}
},
"response": {
"text": "请求成功",
"headers":{
"Content-Type":"text/html;charset=utf-8"
}
}
},
{
"description": "返回json类型数据",
"request": {
"uri": "/foo1/json",
"method": "post",
"forms": {
"type": "1"
}
},
"response": {
"json": {
"code": "200",
"msg": "susses",
"data": {
"id":"1111111",
"phone":"苹果手机"
}
},
"headers":{
"Content-Type":"text/html;charset=utf-8"
}
}
}
]
四、使用Python的Flask编写接口
4.1 创建一个Flask项目
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'hello world'
if __name__ == '__main__':
app.run(debug=True)
4.2 编写接口
1、没有参数的get请求
@app.route('/get')
def request_get():
return 'ok'
重启服务,访问:http://127.0.0.1:5000/get
2、有参数的get请求
#http://127.0.0.1:5000/get/params
@app.route('/get/params')
def get_params():
id = request.args.get("id")
value = request.args.get("value")
return f"id:{id},value{value}"
3、参数为表单类型的post请求
# http://127.0.0.1:5000/post/form
@app.route('/post/form',methods=['POST']) # methods定义了请求方式
def post_form():
username = request.form.get('username') # 获取表单参数username
password = request.form.get('password') # 获取表单参数password
return f'欢迎{username},密码是:{password}'
4、参数为json类型的post请求
# http://127.0.0.1:5000/post/json
@app.route('/post/json', methods=['POST']) # methods定义了请求方式
def post_json():
#传参形式
# {
# "username": "shamo",
# "password": "123456"
# }
username = request.json['username'] # 获取json参数的username
password = request.json['password'] # 获取json参数的password
# 返回json形式的数据
res_json = {
'status': 0, 'message': 'success',
'username': username,
'password': password}
return res_json
启动服务,使用postman请求http://127.0.0.1:5000/post/json 写上json参数
5、有路径参数的put或者delete请求
# http://127.0.0.1:5000/put/10/change
@app.route('/put/<id>/change', methods=['PUT']) # <id>表示路径参数id
def change_data(id): # id参数名称必须和路径里的<>中的一样
return f'{id}数据修改成功'
#http://127.0.0.1:5000/delete/10
@app.route('/delete/<id>', methods=['DELETE']) # <id>表示路径参数id
def delete_data(id): # id参数名称必须和路径里的<>中的一样
return f'{id}数据删除成功'
访问:http://127.0.0.1:5000/delete/10
6、设置返回异常状态码
@app.route('/return/statuscode',methods=['POST'])
def return_statuscode():
response = make_response() # 造一个响应对象
response.status_code = 500 # 设置响应状态码
return response #返回响应对象
7、全部接口汇总文件
from flask import Flask, request, make_response
app = Flask(__name__)
@app.route('/get')
def request_get():
return 'ok'
# http://127.0.0.1:5000/get/params
@app.route('/get/params')
def get_params():
id = request.args.get("id")
value = request.args.get("value")
return f"id:{id},value{value}"
# http://127.0.0.1:5000/post/form
@app.route('/post/form', methods=['POST']) # methods定义了请求方式
def post_form():
username = request.form.get('username') # 获取表单参数username
password = request.form.get('password') # 获取表单参数password
return f'欢迎{username},密码是:{password}'
# http://127.0.0.1:5000/post/json
@app.route('/post/json', methods=['POST']) # methods定义了请求方式
def post_json():
# 传参形式
# {
# "username": "shamo",
# "password": "123456"
# }
username = request.json['username'] # 获取json参数的username
password = request.json['password'] # 获取json参数的password
# 返回json形式的数据
res_json = {
'status': 0, 'message': 'success',
'username': username,
'password': password}
return res_json
# http://127.0.0.1:5000/put/10/change
@app.route('/put/<id>/change', methods=['PUT']) # <id>表示路径参数id
def change_data(id): # id参数名称必须和路径里的<>中的一样
return f'{id}数据修改成功'
#http://127.0.0.1:5000/delete/10
@app.route('/delete/<id>', methods=['DELETE']) # <id>表示路径参数id
def delete_data(id): # id参数名称必须和路径里的<>中的一样
return f'{id}数据删除成功'
@app.route('/return/statuscode',methods=['POST'])
def return_statuscode():
response = make_response() # 造一个响应对象
response.status_code = 500 # 设置响应状态码
return response #返回响应对象
if __name__ == '__main__':
app.run(debug=True)
五、mock文件获取
网盘链接: