【测开能力提升-fastapi框架】介绍简单使用

0. 前期说明

立了很多flag(开了很多专题),但坚持下来的没几个。也干了很多测试工作(起初是硬件(Acoustic方向)测试 - 业务功能测试 - 接口测试 - 平台功能测试 - 数据库测试 - py自动化测试 - 性能测试 - 嵌入式测试 - 到最后的python测试开发),最终还是失业了,从今天重新开始再立flag,之前工作总结继续,然后从系统学习一个框架开始!!!作为新手测试,部分内容是根据我个人经验和喜好总结的,如有问题请随时指正,谢谢!!

1. fastapi框架

1.1 介绍

主要使用fastapi进行测试任务以及测试平台开发,因为喜欢fastapi的简洁、异步和丰富的校验库。再加上测试岗对于代码风格要求比较低(能运行就行),所以对于框架的选择方面自由度比较大(之前做一个测试工具,因为用代码实在获取不到数据包,就直接autogui基于原有开发工具干),总之很自由。

1.1.1 优点

  1. 支持原生的异步编程
  2. 自动生成文档
  3. 类型声明和数据校验
  4. 内置身份认证
  5. 性能强,主要是快

1.1.2 两个基础库

python 3.6之上的版本(我使用的是python 3.11)

pip install fastapi
pip install uvicorn

1.1.3 初步使用

运行方式我选择直接写入代码里,搭建的最简单的fastapi代码如下

假设新建文件名为main.py

from fastapi import Fastapi
import uvicorn# 初始化Fastapi
app = Fastapi()# 添加路由
@app.get('/')
async def get_index():return {'message': 'hello world!!'}# 运行Fastapi服务
if __name__ == '__main__':uvicorn.run('main:app', port=5050, reload=True)

使用fastapi自带的swagger可以看到该接口
地址:地址后面加/docs打开swagger页面 示例:http://127.0.0.1:5050/docs#/
在这里插入图片描述
在这里插入图片描述

1.1.4 添加注释

from fastapi import Fastapi
import uvicorn# 初始化Fastapi
app = Fastapi()# 添加路由
@app.get('/')
async def get_index():"""hello接口"""return {'message': 'hello world!!'}# 运行Fastapi服务
if __name__ == '__main__':uvicorn.run('main:app', port=5050, reload=True)

在这里插入图片描述

注释:
对于测试开发来说,个人还是比较喜欢和推荐fastapi的,就光他这个自带的类swagger页面 (这个页面感觉除了访问路径之外和swagger很像,所以我就当成swagger使用了),仅需在函数中添加注释就会显示在swagger对应的描述内,如果是flask框架就得使用flask-Swagger扩展以及配置许多内容,所以fastapi对于测试还是及其方便的

1.2 POST请求

from fastapi import FastAPI
import uvicornapp = FastAPI()@app.get('/')
async def get_index():"""hello接口"""return {'message':'Hello World'}# 仅支持post请求
@app.post('/login')
async def login():return {'message': 'login successfully'}# 支持多种请求方式
@app.api_route("/resister", methods=['GET', 'POST'])
async def resister():return {'message': 'resister successfully'}if __name__ == '__main__':uvicorn.run('main:app', port=5050, reload=True)

在这里插入图片描述

注释:
swagger会把多种请求方式分开列举,我习惯性的在每个函数前加个异步,省事了,需不需要加异步可以根据具体情况分析

1.3 获取URL参数

1.3.1 路径参数方式

from fastapi import FastAPI
import uvicornapp = FastAPI()@app.get('/user/{id}')
async def user(id):"""user接口"""return {'message':id}if __name__ == '__main__':uvicorn.run('main:app', port=5050, reload=True)

在这里插入图片描述
注释:
花括号包裹变量名(flask是尖括号),函数传参需要和变量名保持一致(暂不做校验)

1.3.2 查询参数方式

from fastapi import FastAPI
import uvicornapp = FastAPI()@app.get('/user')
async def user(id):"""user接口"""return {'message':id}if __name__ == '__main__':uvicorn.run('main:app', port=5050, reload=True)

在这里插入图片描述
注释:
swagger中变量参数名称从路径参数(path)变成了查询参数(query)

1.4 获取请求头和请求体参数

1.4.1 请求头传递参数
from fastapi import FastAPI, Header
import uvicornapp = FastAPI()@app.get('/user')
async def user(id, token=Header(None)):"""user接口"""return {'message': id, 'token': token}if __name__ == '__main__':uvicorn.run('main:app', port=5050, reload=True)

在这里插入图片描述
注释:
请求头获取在测试中也经常使用,如请求头中带有token信息,如果未传参也可设置成None,返回null,请求头传递名称一定要与关键字名称保持一致

1.4.2 请求体传递参数

1.4.2.1 Json等格式传递
from fastapi import FastAPI, Body
import uvicornapp = FastAPI()@app.post('/login')
async def login(data=Body(None)):"""login接口"""return {'message': data}if __name__ == '__main__':uvicorn.run('main:app', port=5050, reload=True)

在这里插入图片描述

1.4.2.2 Form表单格式传递
from fastapi import FastAPI, Form
import uvicornapp = FastAPI()@app.post('/login')
async def login(username=Form(None), password=Form(None)):"""login接口"""return {"username": username, "password": password}if __name__ == '__main__':uvicorn.run('main:app', port=5050, reload=True)

在这里插入图片描述

注释:
form表单如果运行失败,可能是由于没有python-multipar依赖包导致的,pip一个即可

1.5 定制返回信息

1.5.1 修改响应状态码

示例:Json响应

from fastapi import FastAPI
from fastapi.responses import JSONResponse
import uvicornapp = FastAPI()@app.get('/user')
async def user():return JSONResponse(content={'message': 'Hello World'}, status_code=202, headers={'Access-Control-Allow-Origin': '*'})if __name__ == '__main__':uvicorn.run('main:app', port=5050, reload=True)

在这里插入图片描述
示例:HTML响应

from fastapi import FastAPI
from fastapi.responses import HTMLResponse
import uvicornapp = FastAPI()@app.get('/user')
async def user():html_content = """<html><body><p style="color:red">Hello World</p></body></html>"""return HTMLResponse(content=html_content, status_code=202, headers={'Access-Control-Allow-Origin': '*'})if __name__ == '__main__':uvicorn.run('main:app', port=5050, reload=True)

在这里插入图片描述

在这里插入图片描述

示例:File响应

from fastapi import FastAPI
from fastapi.responses import FileResponse
import uvicornapp = FastAPI()@app.get('/user')
async def user():pic = 'favicon.ico'return FileResponse(path=pic, filename='jmeter.ico', status_code=202, headers={'Access-Control-Allow-Origin': '*'})if __name__ == '__main__':uvicorn.run('main:app', port=5050, reload=True)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/44454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

股票分析系统设计方案大纲与细节

股票分析系统设计方案大纲与细节 一、引言 随着互联网和金融行业的迅猛发展,股票市场已成为重要的投资渠道。投资者在追求财富增值的过程中,对股票市场的分析和预测需求日益增加。因此,设计并实现一套高效、精准的股票分析系统显得尤为重要。本设计方案旨在提出一个基于大…

3d已经做好的模型怎么改单位?---模大狮模型网

在展览3D模型设计行业中&#xff0c;经常会遇到需要将已完成的模型进行单位转换的需求。这可能涉及从一种度量单位转换为另一种&#xff0c;例如从英制单位转换为公制单位&#xff0c;或者根据特定的展览场地要求进行尺寸调整。本文将探讨如何有效地修改已完成的3D模型的单位&a…

VS Code 扩展如何发布到私有Nexus的正确姿势

VS Code扩展的发布 VS Code 扩展的发布需要使用到vsce&#xff0c;vsce是一个用于打包、发布和管理 VS Code 扩展的命令行工具。可以通过 npm 来全局安装它&#xff1a; npm install -g vsce发布扩展到微软的应用市场 VS Code 的应用市场基于微软自己的 Azure DevOps。要发布…

防御---001

一、实验拓扑二、要求 1&#xff0c;DMZ区内的服务器&#xff0c;办公区仅能在办公时间内(9:00 - 18:00)可以访问&#xff0c;生产区的的设备全天可以访问. 2&#xff0c;生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3,办公区设备10.0.2.10不允许访问DMZ…

Linux的tmp目录占用空间100%问题分析和解决

一、背景 系统运行期间&#xff0c;客户突然反馈上传文档传不上去。研发立马排查日志&#xff0c;发现日志中出现大量的“No space avaliable on disk”&#xff0c;下意识应用服务器磁盘满了&#xff0c;赶快连上服务器查看磁盘空间占用情况&#xff1a; 黑人问号脸&#xff…

利用Hbuilder创建vue3的web项目

大体流程如下 npm install vue-router4 下载完&#xff0c;就创建完了

模版初阶(更新)

文章目录 模版介绍函数模版模版匹配规则类模版结言 模版介绍 函数模版分为两个类型&#xff1a; 函数模版类模版 函数模版 语法格式&#xff1a; t e m p l a t e < t y p n a m e T 1 , t y p n a m e T 2... > template<typname T1,typname T2...> template&…

用这款免费爬虫神器,不用手动撸代码了!

很多人学习Python和我说是为了“爬虫”&#xff0c;爬虫的用处确实很丰富&#xff0c;如&#xff1a; 市场研究&#xff0c;了解竞争对手信息&#xff0c;爬虫收集舆论信息、产品动态。 价格分析&#xff0c;通过抓取不同平台商品价格&#xff0c;监测价格波动&#xff0c;…

【Go系列】 Go语言的入门

为什么要学习Go 从今天起&#xff0c;我们将一同启程探索 Go 语言的奥秘。我会用简单明了的方式&#xff0c;逐一讲解 Go 语言的各个知识点&#xff0c;帮助你从基础做起&#xff0c;一步步深化理解。不论你之前是否有过 Go 语言的接触经验&#xff0c;这个系列文章都将助你收获…

比curl更直观的网站性能测试工具httpstat——筑梦之路

GitHub - davecheney/httpstat: Its like curl -v, with colours. wget https://raw.githubusercontent.com/reorx/httpstat/master/httpstat.pymv httpstat.py /usr/bin/httpstat #移动到环境变量路径chmod x /usr/bin/httpstat #添加可执行权限 exec bash #重置当前bash进…

请编写函数,删除字符串中指定位置下的字符,删除成功函数返回被删字符,否则返回空值

char arr_del(char* p, int pos) {if (pos> strlen(p) || pos<0){printf("这是一个无效下标\n");exit(1);}//到这里就是有效下标char ch p[pos];//把要删除的下标存储for (int i pos; p[i] ! \0; i){p[i] p[i 1];}return ch; } int main() {char arr[100];…

芋道源码 yudao-cloud 文档,视频,开发指南如何看全部

进入官网后可以看到相关内容 但是后端手册开始就看不了了 必须加入知识知识星球才行&#xff0c;很烦 闲**鱼搜索用户 水城打坐的藤壶 找到这个链接 这下大家都懂了吧 现在就可以看到看不到的内容了 在线文档的弹窗可技术去除&#xff0c;很简单 直接起飞哈 包括更新sq…

YOLOv10改进 | 图像去雾 | MB-TaylorFormer改善YOLOv10高分辨率和图像去雾检测(ICCV,全网独家首发)

一、本文介绍 本文给大家带来的改进机制是图像去雾MB-TaylorFormer&#xff0c;其发布于2023年的国际计算机视觉会议&#xff08;ICCV&#xff09;上&#xff0c;可以算是一遍比较权威的图像去雾网络&#xff0c; MB-TaylorFormer是一种为图像去雾设计的多分支高效Transformer…

vim编辑器的使用

vim编辑器&#xff1a; u:撤销操作 ctrlr取消u操作 w&#xff1a;向后按单词移动 b&#xff1a;向前按照单词移动 :%s/printf/cout/g 将printf替换为cout vs copy.c 分屏操作 ctrlww跨屏操作 &#xff01;gcc test.c :!./a.out在vim中对代码进行编译执行 Centos下配置…

嵌入式系统中的加解密签名(2)--- mbedtls认识与使用

笔者来介绍一下mbedtls认识与使用 1、mbedtls认识 mbedtls&#xff08;Embedded TLS&#xff09;&#xff0c;是嵌入式里面实现的TLS协议&#xff0c;用C语言实现。相关的TLS协议以及加密等知识可以看笔者上一篇文章----嵌入式系统中的加解密签名。 基本特点如下图所示&#x…

【自监督学习】DINO in ICCV 2021

一、引言 论文&#xff1a; DINO: Emerging Properties in Self-Supervised Vision Transformers 作者&#xff1a; Facebook AI Research 代码&#xff1a; DINO 特点&#xff1a; 对于一张图片&#xff0c;该方法首先进行全局和局部的裁剪与增强并分别送入教师和学生网络&am…

tesla p100显卡显示资源不足,api调用失败

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

SpringMVC源码分析

文章目录 概要启动阶段请求阶段 概要 以下是调试mvc源码过程中用到的demo以及配置文件 webapp/WEB-INF/web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://…

QImage显示图片像素

在Qt中&#xff0c;QImage 类是用来表示和处理图像的。如果你想查看或显示一个图片的像素数据&#xff0c;你可以使用 QImage 提供的方法来访问这些数据。以下是一些基本的方法来获取和显示图片的像素信息&#xff1a; 获取图像的像素格式&#xff1a; 使用 QImage::format() …

阶段三:项目开发---民航功能模块实现:任务24:航空实时监控

任务描述 内 容&#xff1a;地图展示、飞机飞行轨迹、扇区控制。航空实时监控&#xff0c;是飞机每秒发送坐标&#xff0c;经过终端转换实时发送给塔台&#xff0c;为了飞机位置的精准度&#xff0c;传输位置的密度很大&#xff0c;在地图位置显示不明显。本次为了案例展示效…