接口自动化测试新玩法!Python构建mock服务让你的测试更加高效!

news/2024/11/28 15:56:56/

目录

引言

Flask mock接口开发示例


引言

      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文件,编辑如下代码

# -*- coding: utf-8 -*-import flask,jsonimport timeserver = 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,编辑代码如下:

@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资源服务并重定向响应体,代码如下:

# -*- coding: utf-8 -*-import flask,jsonfrom flask import url_for,redirectserver = flask.Flask(__name__)   # 创建一个服务,把当前这个python文件当做一个服务@server.route('/data')def data():                       #  返回datadata = {'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,jsonserver = 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 respelse: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中发送请求,查看响应信息,如下图,变成的我们自定义设置的响应头和状态码

这样我们就完全自定义了响应的头和状态码


最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

在我的QQ技术交流群里(技术交流和资源共享,广告勿扰)

 


http://www.ppmy.cn/news/329147.html

相关文章

达梦数据库的下载与安装(Linux)

一、创建用户组 1、创建一个用户组和用户 添加分组 groupadd dinstall添加用户 useradd -g dinstall dmdba设置用户名和密码 echo "dameng123" | passwd --stdin dmdba查看操作系统中id为 dmdba 的用户的用户ID&#xff08;uid&#xff09;、组ID&#xff08;gi…

OpenCV 图像与视频的基础操作

文章目录 引言创建和显示窗口如何通过 OpenCV 加载图片问题加载图片存在的问题如何通过 openCV 保存图片&#xff08;保存图片&#xff09;如何通过 OpenCV 保存图片如何利用 OpenCV 从摄像头采集视频&#xff08;读取视频文件&#xff09;如何从多媒体文件中读取视频帧&#x…

2023夏-PAT甲级题解

目录 总结&#xff1a; A-1 Trap Input Specification: Output Specification: Sample Input: Sample Output: 题意&#xff1a; 思路&#xff1a; AC代码&#xff1a; A-2 Queue Using Two Stacks Input Specification: Output Specification: Sample Input: Sa…

计算机硬件保留内存,为硬件保留的内存:8G

您好&#xff0c; 请问您是Windows 8.1多少位操作系统呢&#xff1f; 首先明确一点&#xff0c;并不是说系统内存越大越好&#xff0c;增加到一定程序&#xff0c;系统是无法识别&#xff0c;造成了一种资源浪费现象。 在内存寻址方面32位系统的最大内存寻址空间是2的32次方 42…

2023春期末考试选择题R2-8计算最小生成树总权重详解

题目如图&#xff1a; 分析和计算&#xff1a; 题目给出一个图的邻接矩阵表示&#xff0c;要求求最小生成树的总开销。 根据Kruskal算法&#xff0c;根据邻接矩阵顶点连接情况&#xff0c;收集开销最小的边&#xff0c;直到所有顶点被收集&#xff0c;且无环路&#xff0c;即…

win7win10 64位系统,8G内存,3.48G可用解决办法。

出现的问题&#xff1a; 1、重装系统之后&#xff0c;开机显示可用内存为3.48GB。【8G的内存可用内存应该有7个多G的样子】 2、系统&#xff1a;win7 64位系统 & win10 64位系统 【都显示3个多G】 3、硬件&#xff1a;2根4G DDR4内存条&#xff0c;分别插到两个卡槽里…

计算机系统的并发数,8G内存的普通电脑可正常达到的并发数量

仅做记录: 普通的Web系统,关于并发量与用户数的关系计算如下: 1.单台服务器最高并发数2000,这是业内的大牛通过各种架构/优化/技术实现的. 我们水平没那么高, 但200并发 绝对是没问题的. 2.单个请求的处理时间, 理论上的极值为70ms(这是内网Web服务器访问数据库服务器的网络时…

服务器换cpu要重装系统吗,更换cpu需要重装系统吗_换cpu是否需要重装系统

最近好多用户在问&#xff0c;电脑更换cpu需不需要重装系统&#xff0c;这个问题对于电脑新手来说是个很大的难题&#xff0c;这个情况大部分情况下不需要重装&#xff0c;但是也是有少数需要重装&#xff0c;接下来小编就给大家介绍换cpu是否需要重装系统。 具体操作方法如下&…