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 相关文章推荐
Python中常见的数据类型小结
Aug 29 Python
Python文件操作之合并文本文件内容示例代码
Sep 19 Python
快速解决PyCharm无法引用matplotlib的问题
May 24 Python
解决nohup执行python程序log文件写入不及时的问题
Jan 14 Python
django-crontab 定时执行任务方法的实现
Sep 06 Python
python调用Matplotlib绘制分布点图
Oct 18 Python
Python获取对象属性的几种方式小结
Mar 12 Python
Django-imagekit的使用详解
Jul 06 Python
python 实现汉诺塔游戏
Nov 28 Python
python BeautifulSoup库的安装与使用
Dec 17 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
Jan 06 Python
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
May 22 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
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
判断JS对象是否拥有某种属性的两种方式
2013/12/02 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
javascript调试之DOM断点调试法使用技巧分享
2014/04/15 Javascript
javascript基本类型详解
2014/11/28 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
javascript中call,apply,bind函数用法示例
2016/12/19 Javascript
关于AngularJS中几种Providers的区别总结
2020/05/17 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
[26:24]完美副总裁、DOTA2负责人蔡玮专访:电竞如人生
2014/09/11 DOTA
[42:25]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第三场
2018/04/06 DOTA
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
对python 通过ssh访问数据库的实例详解
2019/02/19 Python
Python实现桌面翻译工具【新手必学】
2020/02/12 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
HTML5 Video/Audio播放本地文件示例介绍
2013/11/18 HTML / CSS
香港时尚女装购物网站:ZAFUL
2017/07/19 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
学习标兵获奖感言
2014/02/20 职场文书
需求分析说明书
2014/05/09 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
实习指导教师评语
2014/12/30 职场文书
会计稽核岗位职责
2015/04/13 职场文书
植树节新闻稿
2015/07/17 职场文书
生活小常识广播稿
2015/08/19 职场文书
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android