python如何构建mock接口服务


Posted in Python onJanuary 28, 2021

引言

      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中检索安装:

python如何构建mock接口服务

1.1 构建GET请求方法的接口

在Pycharm中新建py文件,编辑如下代码

# -*- 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即可

浏览器访问:

python如何构建mock接口服务

postman发请求访问:

python如何构建mock接口服务

浏览器或者postman请求完成后,在Pycharm的输出栏会输出如下:

python如何构建mock接口服务

其它的请求如POST、PUT、DELETE等方法,在methods参数中指明即可,不过POST、PUT、DELETE等方法不能由浏览器直接访问,因为浏览器默认访问时是get方法,可以用postman按指定的方法发请求

1.2 获取带json格式请求体的接口

有时客户端发送的请求是带json格式的,这时需要获取请求的json,编辑代码如下:

@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请求体的请求,如下图:

python如何构建mock接口服务

1.3 获取get请求中发送的参数

flask提供的方法是:

value = flask.request.args.get('name')           # 获取get请求参数name的值

1.4 构建动态URL以及响应体的重定向

很多时候,客户端请求的url是变化的,也就是带有动态参数的,flask也是可以轻松的构建提供动态参数的url资源服务并重定向响应体,代码如下:

# -*- 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中也是可以构建自定义的响应消息的

# -*- 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接口服务的详细内容,更多关于python 构建mock接口服务的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python3制作捧腹网段子页爬虫
Feb 12 Python
使用python和pygame绘制繁花曲线的方法
Feb 24 Python
Tensorflow实现卷积神经网络的详细代码
May 24 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
Python实现删除排序数组中重复项的两种方法示例
Jan 31 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
django中使用事务及接入支付宝支付功能
Sep 15 Python
使用Django搭建一个基金模拟交易系统教程
Nov 18 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
Feb 29 Python
Python基于BeautifulSoup爬取京东商品信息
Jun 01 Python
python实现批量转换图片为黑白
Jun 16 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 #Python
如何用tempfile库创建python进程中的临时文件
Jan 28 #Python
python基于Kivy写一个图形桌面时钟程序
Jan 28 #Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
Jan 28 #Python
详解Python调用系统命令的六种方法
Jan 28 #Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
Jan 28 #Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
Jan 28 #Python
You might like
如何去掉文章里的 html 语法
2006/10/09 PHP
php cache类代码(php数据缓存类)
2010/04/15 PHP
php5.3 废弃函数小结
2010/05/16 PHP
php读取图片内容并输出到浏览器的实现代码
2013/08/08 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
2014/01/27 Javascript
javascript每日必学之循环
2016/02/19 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
关于JavaScript中forEach和each用法浅析
2017/07/27 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
原生实现一个react-redux的代码示例
2018/06/08 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
ES6基础之字符串和函数的拓展详解
2019/08/22 Javascript
vue $set 给数据赋值的实例
2019/11/09 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
[01:06]DOTA2小知识课堂 Ep.01 TP出门不要忘记帮队友灌瓶哦
2019/12/05 DOTA
Python库urllib与urllib2主要区别分析
2014/07/13 Python
python使用PIL模块实现给图片打水印的方法
2015/05/22 Python
Python进阶-函数默认参数(详解)
2017/05/18 Python
python僵尸进程产生的原因
2017/07/21 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
2019/01/15 Python
python实现超市商品销售管理系统
2019/10/25 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
CSS3中box-shadow的用法介绍
2015/07/15 HTML / CSS
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
工商管理专业学生的自我评价
2013/10/01 职场文书
先进集体申报材料
2014/12/25 职场文书
教师教育教学随笔
2015/08/15 职场文书
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
2021/05/24 Python
讲解Python实例练习逆序输出字符串
2022/05/06 Python