当前位置: 首页 > article >正文

学习使用Flask模拟接口进行测试

  • 前言

学习使用一个新工具,首先找一段代码学习一下,基本掌握用法,然后再考虑每一部分是做什么的

  • Flask的初始化

app = Flask(__name__):初始化,创建一个该类的实例,第一个参数是应用模块或者包的名称

  • @app.route()的用法

@app.route('/detect', methods=['POST']):通过使用route()装饰器的方法定义一个路由地址,/detect是接口的uri,使用 route() 装饰器告诉 Flask 什么样的URL能触发我们的函数,这个函数的名字也在生成 URL 时被特定的函数采用,这个函数返回我们想要显示在用户浏览器中的信息;methods=['POST']表示只接受POST方法访问,methods=['GET']表示只接受GET方法访问,methods=['POST', 'GET']表示两种方法都接受。

  • app.run的用法

app.run(host='0.0.0.0', port=1000,debug=True):用 run() 函数来让应用运行在本地服务器上。其中host为要监听的主机名, 默认为127.0.0.1(localhost),设置为“0.0.0.0”以使服务器在外部可用,port是设置的端口号,port不填的话默认5000,debug默认为false,如果设置为true,则提供调试信息;若是在docker中使用,记得docker要把对应的端口映射到主机;

  • python和flask中返回JSON数据的方法如下:

字典转化为JSON的数据格式:return json.dumps(result_dict,ensure_ascii=False) #result_dict为字典数据,使用json转换的在前端显示的数据为JSON字符串;

使用flask的jsonify转换后,在前台显示的为JSON对象:return jsonify(result_dict)

  • 快速启动一个flask接口

使用这个环境

//略,这里涉及到工作环境了

在这个目录下:(使用python3)

/home/work/miniconda3/envs/bfc38/bin

实操:

这里涉及工作环境,略,基本上就是找到python3的目录之后,一定要调用对应的目录(比如这里是/home/work/miniconda3/envs/bfc38/bin)

就用 /home/work/miniconda3/envs/bfc38/bin/python3 test.py 来调用你想调用的py文件即可

 

from flask import Flask

app = Flask(__name__)

@app.route('/')

def index():

return 'hello flask!'

if __name__ == '__main__':

app.run(host='0.0.0.0', port=8877, debug=True)

复制地址拿到浏览器里跑一下,出现hello flask说明跑通了

运行过程中修改文件(并保存的话)出现语法错误,会导致脚本终止

注:debug=True的用法:

在 Flask 中,`debug` 参数用于启动调试模式。当 `debug` 设置为 `True` 时,Flask 会在发生错误时提供详细的调试信息,同时还会监视文件的变化,使得您在修改代码后不必重新启动服务器。

在生产环境中,建议将 `debug` 设置为 `False`,因为调试模式可能会泄漏敏感信息,并且不适用于处理大量请求的情况。在生产环境中,最好使用一个成熟的服务器,如Gunicorn或uWSGI,并将 Flask 的调试模式关闭。

在开发阶段,启用调试模式可以更容易地发现和解决问题,因为它提供了有关代码执行过程中发生的错误的详细信息。但请务必在生产部署之前禁用调试模式以提高安全性。

  • 详解flask接口测试

首先需要引入request包

from flask import request

  • 如何关闭一个flask脚本

ps -af | grep python

找到对应进程的PID,然后使用kill PID杀掉对应的进程即可

注:这里的第二列就是PID,通过查看该进程对应的文件确定哪个是目标进程

(后续应该要系统学习一下linux的相关用法,倒不是不会用,就是不太熟)

1、需要对请求头进行测试

使用request.header获取请求头中的数据,比如请求头里面有一个test参数,那就是

args = request.header -- 这一步相当于取得了全部的请求头

之后,使用args.get("test")取得test这个key里面的值

test里面可以替换成任意请求头,其实就是一个字典(or map),用get取得key对应的value就可以了,下面的其他情况同理

2、需要对请求体进行测试
  • 默认的表单(application/x-www-form-urlencoded)使用request.form ;

  • 如果是json(application/json): request.json取出所有的键值对

具体哪种需要看请求头中的Conternt-Type 当然也有可能是其他的,下面补充一下常见的http请求数据类型(Content-Type)

Content-type 定义了 http 请求的数据类型。

如果设置在请求头中,则定义的是请求体的数据类型;

如果设置在响应头中,则定义的是响应体的数据类型;

请求头--Request-Headers:一般我们在 post 请求中会向服务器发送一些参数,那我们就可以通过这个参数设置 post 的参数格式

application/json:JSON 数据格式;

application/x-www-form-urlencoded:表单默认的提数据格式;

multipart/form-data:一般用于文件上传;

响应头--Response-Headers:响应头里的 Content-Type 参数会告诉我们响应数据的格式,一般我们可以在请求头里面设置我们想要的数据格式(Accept);

以下是常见的Content-Type:

text开头

text/html: HTML格式

text/plain:纯文本格式

text/xml: XML格式

图片格式

image/gif :gif 图片格式

image/jpeg :jpg 图片格式

image/png:png 图片格式

application开头

application/xhtml+xml:XHTML 格式

application/xml:XML 数据格式

application/atom+xml:Atom XML 聚合格式

application/json:JSON 数据格式

application/pdf:pdf 格式

application/msword:Word 文档格式

application/octet-stream:二进制流数据(如常见的文件下载)

application/x-www-form-urlencoded:表单发送默认格式

媒体文件

audio/x-wav:wav文件

audio/x-ms-wma:w文件

audio/mp3:mp3文件

video/x-ms-wmv:wmv文件

video/mpeg4:mp4文件

video/avi:avi文件

3、需要对url中附带的请求参数进行测试

请求参数是指

http://127.0.0.1:5000/query?id=1 里面的 「?id=1」这部分

需要用request.arg提取这部分参数,之后的处理和第一条一样

示例

 

@app.route('/query') # http://127.0.0.1:5000/query?id=1&name=zhangsan

def query():

args = request.args # args 请求的参数

args_dict = args.to_dict() # 获取请求参数 字典格式

name = args.get('name')

print(args) # [('id', '1'), ('name', 'zhangsan')]

print(args_dict) # {'id': '1', 'name': 'zhangsan'}

print(name) # zhangsan

return '查询参数== 姓名:%s' % name

4、获取固定参数
 

@app.route('/fixed/<int:id>/<name>')

def fixed(id, name):

print(id)

print(name)

return '固定参数'

5、补充

可供参考

Flask基础:请求数据获取与响应_flask获取前端数据-CSDN博客

Flask中获取参数(路径,查询,请求体,请求头)-CSDN博客

基于Flask进行接口开发及测试_chrome测试 flask接口-CSDN博客


http://www.kler.cn/a/227144.html

相关文章:

  • H5 自适应超人背景引导页源码
  • FollowYourPose 安装踩坑
  • 【C++】C++入门— 类与对象初步介绍
  • 数据库-计算机三级学习记录-4DBAS功能概要设计
  • 浙政钉(专有钉钉)
  • 重写Sylar基于协程的服务器(4、协程调度模块的设计)
  • moment.js 常用方法使用
  • 【数据分享】1929-2023年全球站点的逐月降雪深度数据(Shp\Excel\免费获取)
  • 从源代码看Chrome 版本号
  • 蓝桥杯嵌入式第七届真题(完成) STM32G431
  • elasticsearch 索引模版
  • Kotlin快速入门系列8
  • 世界就是一个草台班子
  • 字节序问题
  • 大路灯护眼灯哪个牌子好学生用?适合学生使用的大路灯推荐
  • 网络安全之SSL证书加密
  • 【Redis】--RedissonClient的Lock锁详解
  • 宠物空气净化器是养猫家庭必备?除毛好的猫用空气净化器推荐
  • em/px/rem/vh/vw的区别
  • 天地伟业接入视频汇聚/云存储平台EasyCVR详细步骤