利用python+flask搭建mock接口服务

2023-10-29

1、测试需求来源:

测试环境进行某后端服务的测试,某些功能依赖其他系统的输出数据,由于线下测试环境网络隔离等原因,无法实时获取依赖系统的数据,基于此种情况,需要通过搭建一套接口服务模拟出依赖系统的输出数据,以供被测系统调用。
因此选择python和falsk框架快速搭建一套mock api 服务,模拟依赖系统的输出数据,快速构造测试场景。

2、开发环境准备

  • Python开发环境;
  • Flask安装:pip install flask python;
  • 引用flask模块:import flask

3、使用flask mock api的好处:

  • 自己模拟一个接口,暂时代替第三方接口测试
  • 辅助测试,用来代替没有开发好的接口
  • 将被测单元与依赖模块独立出来

4、测试脚本开发总结:

import flask #python的轻量级的开发框架
server = flask.Flask(__name__)  #__name__当前文件名
datas={}
@server.route('/get_data',methods=['get','post']) #将下面函数变成一个接口
def get_data():
	return 'flask.jsonify(datas)' #return只能返回字符串
	server.run(host=“”,port = 8080,debug = True)  
	# 启动服务,加debug自动帮忙重启

5、测试场景:

  1. 使用GET请求获取数据列表,脚本如下:
	#!/usr/bin/python
	#-*- coding: UTF-8 -*-
	 
	import json
	from flask import request,Flask,jsonify
	
	app = Flask(__name__)
	data=[
		{'key1':'V1','key2':'V2','id':'1'},
		{'key1':'Va1','key2':'Va2','id':'2'},,
		{'key1':'Val1','key2':'Val2','id':'3'}]
	not_exist = {"msg": "task does not exist"}
	values = ['V1', 'Va1', "Val1"]
	exist = {"msg": "value is exist"}
	 
	@app.route("/dataAPI/data/<string:value>",methods=['get','post'])
	def get_data(value):
		if len(value)>0 and value in values:
			for d in values:
				if value==d['value']:
					return make_response(jsonify(d),200)
		else:
			return make_response(jsonify(not_exist),404)
	if __name__=='__main__':
		app.run(host='127.0.0.1',port=8080,debug=True)
  1. 使用PUT方法更新资源
	@app.route("/dataAPI/data/<string:value>",methods=['PUT'])
	def update_data(value):
		if len(value)>0 and value in values:
			for d in values:
				if value==d['value']:
					id==d['id']
					data[id - 1] = request.json
					return make_response(jsonify(data[id-1]),204)
		else:
			return abort(404)
  1. 使用DELETE方法删除资源

	@app.route("/dataAPI/data/<string:value>",methods=['DELETE'])
	def delete_data(value):
		if len(value)>0 and value in values:
			return make_response(jsonify(data),204)
		else:
		return abort(404)
说明
  • jsonify:将我们传入的json形式数据序列化成为json字符串,作为响应的body,并且设置响应的Content-Type为application/json,构造出响应返回至客户端;
  • request可以通过request.json取到接受到数据;
  • abort用于返回通用的错误比如:404,400,500;
  • make_response自定义返回的object,因为一般接口都会返回一个数据和状态码,所以结构为make_response(request.json,201)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用python+flask搭建mock接口服务 的相关文章

  • sklearn DeprecationWarning 数组的真值

    从文档中运行 rasa core 示例 python3 m rasa core run d models dialogue u models nlu default current 并在对话框中的每条消息后获取此错误输出 sklearn D
  • CVXPY 二次规划; ArpackNoConvergence 错误

    我尝试使用 Python 包 CVXPY 来解决第一种形式的凸二次规划问题 https www cvxpy org examples basic quadratic program html https www cvxpy org exam
  • 如何测试使用 XCom 的 Apache Airflow 任务

    我正在尝试找出一种测试 DAG 的方法 其中有几个任务使用 XCom 进行通信 由于控制台命令只允许我从 DAG 运行任务 有没有一种方法可以测试通信而无需通过 UI 运行 DAG Thanks 这是一种对我有用的方法 尽管 Airflow
  • 如何为 Intellij/PyCharm 设置 PYTHONSTARTUP 脚本

    我尝试添加PYTHONSTARTUP环境变量 我还尝试了自定义启动脚本 但更令人惊讶的是 这also没有工作 npa别名无法识别 出于一点绝望 我什至尝试添加到interpreter options 那什么也没做 实际上是什么Interpr
  • 如何移动我的图像? python 3.10.4 pygame

    我会移动我的图像 图像是matiskinfinal png 我尝试将像素添加到 x 或其他我不知道它是什么的东西 因为我真的是 python 的初学者 pygame但是是 x x 变化 但图像没有移动 import os import py
  • 如何使用 HTTP 标头发送非英语 unicode 字符串?

    我是 HTTP 相关问题的新手 我的问题是在 iOS 开发中 我想使用 HTTP 标头发送一个字符串 所以我使用 httpRequest setValue nonEnglishString forHTTPHeaderField custom
  • 从主机名中提取域名

    是否有一种编程方式可以从给定的主机名查找域名 给出 gt www yahoo co jp 返回 gt yahoo co jp 有效但非常慢的方法是 拆分为 并从左侧删除 1 个组 使用 dnspython 加入并查询 SOA 记录 当返回有
  • 类型错误:需要 Future 或协程

    我尝试在 asyncssh 上自动重新连接 ssh 客户端 SshConnectManager 必须留在后台并在需要时进行 ssh 会话 class SshConnectManager object def init self host u
  • 如何在Python中求和

    我想知道如何在 python 中表示总和而不需要像这样的循环here http docs scipy org doc scipy reference tutorial optimize html 我们有 def rosen x The Ro
  • 使用 3d 对象作为 3d 散点图中的标记 - Python

    使用下面的代码 我尝试模拟一个用罐头制成的碗 我希望每个标记都是一个罐头 最好的方法是什么 我真的很感激任何建议 谢谢 import pylab import numpy as np from math import pi sin cos
  • 使用 python 只读取 Excel 中的可见行

    我想只读取 python 中 Excel 工作表中的可见行 输入 Excel表 所以当我过滤时 作为 python 中的输出 在本例中我将仅获得可见数据 1 行 这是我的代码 from openpyxl import load workbo
  • 根据给定列表中的值替换列中的值[重复]

    这个问题在这里已经有答案了 我在数据框中有一列 仅允许定义列表中存在的值 例如 给定列表 l1 1 2 5 6 如果列表中不存在列中的值 我需要将每个值替换为 0 column Expected column 1 1 5 5 2 2 3 0
  • 如何在交互式绘图(Python)中获得鼠标指向的(x,y)位置?

    我使用 ipython 笔记本 带有魔法 matplotlib nbagg 我正在审查matplotlib widget Cursor但仅查看光标widgets Cursor http matplotlib org 1 4 3 exampl
  • 使用 Python 脚本打开特定文件类型?

    如何使 Python 脚本成为特定文件类型 例如 foo 的默认应用程序 例如 当我双击 Finder Explorer 中的文件时 我希望该文件在 Python 脚本中打开 这可以在 Win 和 或 OS X 中实现吗 如果重要的话 该应
  • 如何加速 pandas 字符串函数?

    我正在使用 pandas 矢量化 str split 方法来提取从 上的拆分 返回的第一个元素 我还尝试使用 df apply 与 lambda 和 str split 来产生等效的结果 使用 timeit 时 我发现 df apply 的
  • Qcut Pandas:ValueError:Bin 边缘必须是唯一的

    我使用 Pandas 中的 Qcut 将数据离散化为大小相等的存储桶 我想要有价格桶 这是我的数据框 productId sell prix categ popularity 11997 16758760 0 28 75 50 524137
  • Scrapy的redirect_urls异常.KeyError

    我是 Scrapy 和 Python 的新手 最近推出了我的第一个蜘蛛 有一个功能似乎以前有效 但现在它只适用于我试图废弃的一些网站 代码行是 item url direct response request meta redirect u
  • Python 队列 get()/task_done() 问题

    我的消费者端队列 m queue get queue task done
  • 如何可视化多维数据上的 kmeans 聚类

    我在 mnist 数据集上使用 kmeans 聚类算法 并希望可视化聚类后的图 到目前为止我做了这个 from mnist import MNIST mndata MNIST Datasets X train y train mndata
  • 如何限制scrapy请求对象?

    所以我有一个蜘蛛 我认为它正在泄漏内存 结果当我检查 telnet 控制台 gt gt gt prefs 时 它只是从链接丰富的页面中抓取了太多链接 有时它会超过 100 000 个 现在我已经一遍又一遍地浏览文档和谷歌 但我找不到一种方法

随机推荐