mock服务
# 为什么mock?
在工作之中我们或多或少都需要使用兄弟团队或是其他公司提供的接口服务。这个时候,协调资源是一件很困难的事情
# mock的好处
1.方便测试异常条件
2.实现系统隔离,对上游系统解耦
3.增加自动化测试脚本的稳定性
4.实现测试驱动开发
# 怎么实现mock?
这里我们将如何使用flask来实现一个mock server。flask本身是一个用来编写网络服务的框架,我们的mock server本质上也是一个服务。有的时候,我们也叫它“挡板”服务。在这整理一下需求点:
1.可以 返回我们预期的结果
2.可以 代替真正的服务为我们返回结果
3.可以 切换不同类型的假数据
app = Flask(__name__)
# 让中文正常显示,否则res被编码
app.config['JSON_AS_ASCII'] = False
#要给这个mock分配一个url地址(设置路由)
@app.route('/login', methods=['POST'])
def login():
url = 'login'
# 获取参数
# 1.get请求 data = request.values.to_dict()
# 2.post请求 data = request.get_json()
data = request.get_json()
name = data['name']
password = data['password']
# 对请求参数进行判断,根据请求参数的不同进入不同的接口,返回不同的数据
if name == '被锁定':
return jsonify({'code':402,'name':'被锁定','res':'用户被锁定'})
elif name == '服务器异常':
return jsonify({'code': 403, 'name': '服务器异常', 'res': '服务器异常,请联系管理员'})
elif name == '请求解析异常':
return jsonify({'code': 405, 'name': '请求解析异常', 'res': '请求解析异常'})
elif name == '黑名单':
return jsonify({'code': 445, 'name': '黑名单', 'res': '您已经进入我司黑名单,请联系客服专员'})
else:
# 需要去调用正常的接口
resp = passThrough(url,data)
return resp
# 提问:
# 访问真实服务的“服务器异常”,会怎么用?
# mock挡板的作用是,挡住一些不好实现的接口逻辑(来验证这些业务里的其他接口)
# 挡掉接口以后,还需要走真实业务
# 1.mock了这个接口的异常情况,“正常”情况我们还需要调用真实的接口服务
# 2.在业务链中,mock服务可能需要调用下一个步骤的接口
# 接口级别的mock <func> 动态传递参数,动态路由,默认是字符串
# <int:func> 可以手动设置参数的数据类型
# 默认的请求方式是get,如果要用post你需要通过methods=['POST']去设置
# methods=['POST','GET']
@app.route('/time', methods=['POST'])
def request_time():
resp = Through_time()
return resp
@app.route('/<func>', methods=['POST'])
def regist(func):
print(f'{func}接口被动态路由接收(未在mock功能中)')
data = request.get_json()
resp = passThroughRe(func,data)
return resp
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
46
47
48
49
50
51
52
53
54
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
46
47
48
49
50
51
52
53
54
4.可以 切换真/假数据
import requests
from flask import json, make_response
ip = 'http://127.0.0.1:5000/'
def passThrough(url,data):#参数透传
url = ip + url
result = requests.post(url, json=data)
# 把请求原来接口的返回值放在构造的响应里面,在加一个Content-Type
resp = make_response(result.json())
return resp
def passThroughRe(url,data):#接口透传
url = ip + url
result = requests.post(url, json=data)
# 把请求原来接口的返回值放在构造的响应里面,在加一个Content-Type
resp = make_response(result.json())
# resp = make_response(result.text)
return resp
def Through_time():
url = 'http://127.0.0.1:5000/time'
result = requests.post(url)
# 把请求原来接口的返回值放在构造的响应里面,在加一个Content-Type
# resp = make_response(result.json())
resp = make_response(result.text)
return resp
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
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
上次更新: 2023/09/05, 02:16:11