引言
mock 即模拟,就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法,其最大的优势就是降级前后端耦合度,使前端工程师可以不依赖后端返回数据,先开发前端样式以及逻辑处理 简单来说: mock是用了解决依赖问题的,将复杂的/不稳定的/还未建立的依赖对象用一个简单的假对象来代替。
mock server 即mock接口服务器,可以通过配置快速mock出新的接口
mock server的使用范围:
- 前后端分离项目
- 所测接口依赖第三方系统(还未具备)
- 所测接口依赖复杂或依赖的接口不稳定,并不作为主要验证对象
- 同时在接口还未开发好时,提供mock接口(假接口)会比只有接口文档更直观,并能有效减少沟通成本和一些文档理解
在进行接口测试时,往往被测系统需要对接第三方系统,然而没有现成的第三方系统环境,此时我们就需要使用mock来解决这种依赖关系,而python就提供了一个可以方便构建mock api接口服务的模块:flask。flask 是一个简单且十分强大的python web 框架。它被称为微框架,“微”并不是意味着把整个web应用放入到一个python文件,微框架中的“微”是指flask旨在保持代码简洁且易于扩展,flask框架的主要特征是核心构成比较简单,但具有很强的扩展性和兼容性,程序员可以使用python语言快速实现一个网站或 web服务。因此flask能很方便构建一个web服务,给外部也可以叫做客户端提供web服务,针对flask框架这种特点我们可以很容易构建api接口,供客户端访问。
flask mock接口开发示例
首先安装需要的flask模块,如果你的环境已经安装了pip则键入:pip install flask即可安装完成
或者直接在pycharm中检索安装:
1.1 构建get请求方法的接口
在pycharm中新建py文件,编辑如下代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# -*- coding: utf-8 -*-
import flask,json
import time
server = flask.flask(__name__) # 创建一个服务,把当前这个python文件当做一个服务
@server .route( '/viid/system/time' , methods = [ 'get' ]) # @server.route()可以将普通函数转变为服务、接口的路径、请求方式,如果不写methods则默认get方法
def time():
'''查询字符串:无,消息体:无,返回结果:systemtime'''
response_data = {
"systemtimeobject" : {
"viidserverid" : "123" ,
"timemode" : "1" ,
"localtime" : time.strftime( '%y%m%d%h%m%s' , time.localtime(time.time())),
}
}
return json.dumps(response_data, ensure_ascii = false)
if __name__ = = '__main__' :
server.run(debug = true, port = 5000 , host = '10.82.25.11' ) # 指定访问端口、host
|
然后运行该py文件,则该文件运行在本地就是一个web服务,用浏览器或者postman尝试访问该服务的url即可
浏览器访问:
postman发请求访问:
浏览器或者postman请求完成后,在pycharm的输出栏会输出如下:
其它的请求如post、put、delete等方法,在methods参数中指明即可,不过post、put、delete等方法不能由浏览器直接访问,因为浏览器默认访问时是get方法,可以用postman按指定的方法发请求
1.2 获取带json格式请求体的接口
有时客户端发送的请求是带json格式的,这时需要获取请求的json,编辑代码如下:
1
2
3
4
5
6
7
8
9
10
|
@server .route( '/data' ,methods = [ 'post' ])
def post_json():
if flask.request.is_json:
print (flask.request.json)
name = flask.request.json.get( 'name' ) # 获取json请求体的第一个参数的值
age = flask.request.json.get( 'age' ) # 获取json请求体的第二个参数的值
data = { 'name' :name, 'age' :age}
return json.dumps(data,ensure_ascii = false)
else :
return json.dumps({ 'msg' : '请传json格式参数' },ensure_ascii = false)
|
使用postman作为客户端发送带json请求体的请求,如下图:
1.3 获取get请求中发送的参数
flask提供的方法是:
1
|
value = flask.request.args.get( 'name' ) # 获取get请求参数name的值
|
1.4 构建动态url以及响应体的重定向
很多时候,客户端请求的url是变化的,也就是带有动态参数的,flask也是可以轻松的构建提供动态参数的url资源服务并重定向响应体,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# -*- coding: utf-8 -*-
import flask,json
from flask import url_for,redirect
server = flask.flask(__name__) # 创建一个服务,把当前这个python文件当做一个服务
@server .route( '/data' )
def data(): # 返回data
data = {
'videosliceinfoobject' : {
'videoid' : 'esse elit' ,
'audiocodeformat' : 'commodo'
}
}
return json.dumps(data, ensure_ascii = false)
@server .route( '/data/<id>/info' , methods = [ 'post' ])
def data_redirect( id ):
return redirect(url_for( 'data' , guest = id ))
if __name__ = = '__main__' :
server.run(debug = true, port = 5000 , host = '10.82.25.11' ) # 指定访问端口、host
|
后面无论postman或者客户端发送的url中的id参数是啥,都可以响应
1.5 重新构建响应头和响应状态码
有时在与第三方系统对接时,需要返回携带响应头消息和指定的响应状态码,在flask中也是可以构建自定义的响应消息的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# -*- coding: utf-8 -*-
import flask,json
server = flask.flask(__name__) # 创建一个服务,把当前这个python文件当做一个服务
@server .route( '/data' ,methods = [ 'post' ])
def post_json():
if flask.request.is_json:
print (flask.request.json)
name = flask.request.json.get( 'name' ) # 获取json请求体的第一个参数的值
age = flask.request.json.get( 'age' ) # 获取json请求体的第二个参数的值
data = { 'name' :name, 'age' :age}
# 构建响应头域和状态码
resp = flask.make_response(json.dumps(data, ensure_ascii = false))
resp.status = "666"
resp.headers[
"python" ] = "python flask"
return resp
else :
return json.dumps({ 'msg' : '请传json格式参数' },ensure_ascii = false)
if __name__ = = '__main__' :
server.run(debug = true, port = 5000 , host = '10.82.25.11' ) # 指定访问端口、host
|
运行该py文件,在postman中发送请求,查看响应信息,如下图,变成的我们自定义设置的响应头和状态码
这样我们就完全自定义了响应的头和状态码
以上就是python如何构建mock接口服务的详细内容,更多关于python 构建mock接口服务的资料请关注服务器之家其它相关文章!
原文链接:https://www.cnblogs.com/tdp0108/p/14239526.html