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

news2024/9/23 9:24:10

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 uvicorn

app = 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 uvicorn

app = 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 uvicorn

app = 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 uvicorn

app = 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 uvicorn

app = 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 uvicorn

app = 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 uvicorn

app = 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 uvicorn

app = 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 uvicorn

app = 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.coloradmin.cn/o/1915611.html

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

相关文章

链表---头插法+尾插法

本博客介绍了单链表的实现&#xff0c;以及头插法尾插法的代码实现 1.定义一个结点类 class ListNode{int value;ListNode next;public ListNode(int value) {super();this.value value;}Overridepublic String toString() {return "ListNode{" "value" …

Android 自定义Edittext 和TextView 提示文字和填入内容不同的粗细组件

近期项目中又EditText 以及TextView 这两个组件需要用到提示文字 以及 填入文字要保持不同的粗细程度,所以记录一下 首先 是EditText 组件的自定义 BLEditText 继承的这个组件是一个三方的组件,可以在很大程度上减少drawable的编写,有兴趣的可以去相关的Git去看一下 点击查看,…

excel有条件提取单元格特定文本(筛选纯文字的单元格或含有数字的单元格、单元格提取不同的文本长度)

实际工作背景 需要对导出的银行流水中的数十个村以及对应的村小组进行分组统计&#xff0c;但是初始的表格中村和小组是混在一起的&#xff0c;如下图所示&#xff1a; 目的&#xff1a;将大树村和大树村小组名称分别筛选出来 1.观察发现&#xff0c;大树村小组的单元格第4…

构建与操作顺序栈

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝黑暗的笼罩更会凸显光明的可贵! 顺序栈是数据结构中栈(Stack)的一种具体实现方式,它使用一段地址连续的内存空间(通…

电子电气架构 --- 关于DoIP的一些闲思 下

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

空中交通新动能!2024深圳eVTOL展动力电池展区核心内容抢先看!

空中交通新动能&#xff01;2024深圳eVTOL展动力电池展区核心内容抢先看&#xff01; 关键词&#xff1a;2024深圳eVTOL展 动力电池 高能量密度电池 高性能电池材料 作为2024深圳eVTOL展重要组成部分&#xff0c;2024深圳eVTOL动力电池展将于9月23-25日在深圳坪山燕子湖国际会…

Mac的系统数据怎么删除 cleanmymac会乱删东西吗 cleanmymac有用吗

作为一款专业级的苹果电脑清理软件&#xff0c;CleanMyMac可以精准识别系统垃圾&#xff0c;有效防止Mac系统数据被误删。软件可以深入系统底层&#xff0c;清理无用的系统数据&#xff0c;优化苹果电脑设置&#xff0c;提升Mac系统性能。有关Mac的系统数据可以删吗&#xff0c…

基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库

研究背景 随着互联网和移动设备的普及&#xff0c;音乐流媒体服务成为人们获取音乐的主要方式。这些平台如Spotify、Apple Music和网易云音乐等&#xff0c;提供了海量的音乐资源&#xff0c;使用户能够随时随地聆听各种类型的音乐。然而&#xff0c;如何在海量的音乐资源中快…

笔试算法刷题

猿辅导2021校园招聘笔试&#xff08;算法一&#xff09; 牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推&#xff0c;求职就业一站解决_牛客网 (nowcoder.com) 第一眼看到这个题想到的是蓝桥杯飞机降落&#xff0c;贪心题。但是这样算的是最大不相交区间数量&#xff0…

米家立式学习灯怎么样?书客、米家、孩视宝三款护眼大路灯巅峰PK!

米家立式学习灯怎么样?不知从什么时候开始&#xff0c;青少年成为了近视重灾区&#xff0c;主要促成近视的原因有长时间接触电子产品、学习时的不正确姿势、不良的灯光环境等&#xff0c;除了减少电子产品的使用以及多室外活动之外&#xff0c;剩下的就是室内孩子经常学习的光…

致远CopyFile文件复制漏洞

复现版本 V8.0SP2 漏洞范围 V5&G6_V6.1至V8.0SP2全系列版本、V5&G6&N_V8.1至V8.1SP2全系列版本。 漏洞复现 上传文件 POST /seeyon/ajax.do?methodajaxAction&managerNameportalCssManager&rnd57507 HTTP/1.1 Accept: */* Content-Type: applicatio…

GD32F303之CAN通信

1、CAN时钟 GD32F303主时钟频率最大是120Mhz,然后APB1时钟最大是60Mhz,APB2时钟最大是120Mhz,CAN挂载在APB1总线上面 所以一般CAN的时钟频率是60Mhz,这个频率和后面配置波特率有关 2、GD32F303时钟配置 首先我们知道芯片有几个时钟 HXTAL&#xff1a;高速外部时钟&#xff1…

Python打开Excel文档并读取数据

Python 版本 目前 Python 3 版本为主流版本&#xff0c;这里测试的版本是&#xff1a;Python 3.10.5。 常用库说明 Python 操作 Excel 的常用库有&#xff1a;xlrd、xlwt、xlutils、openpyxl、pandas。这里主要说明下 Excel 文档 .xls 格式和 .xlsx 格式的文档打开和读取。 …

STMF4 硬件IIC(天空星开发板)

前言&#xff1a;笔记参考立创开发文档&#xff0c;连接放在最后 #IIC概念介绍 #IIC介绍 IIC通信协议&#xff0c;一种常见的串行通信协议&#xff0c;英文全程是 Inter-Integrated Circuit 使用这种通信方式的模块&#xff0c;通常有SCL&#xff08;Serial Clock Line&…

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

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];…

昂科烧录器支持ZhiXin智芯半导体的中低端微控制器Z20K118M

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中ZhiXin智芯半导体的中低端微控制器Z20K118M已经被昂科的通用烧录平台AP8000所支持。 Z20K118M基于ARMCortex-M0内核&#xff0c;支持内部64MHz或外部40MHz主频&#xff0c;内部…

多GPU系统中的CUDA设备不可用问题

我们在使用多GPU系统时遇到了CUDA设备不可用的问题&#xff0c;详细情况如下&#xff1a; 问题描述&#xff1a; 我们在一台配备有8块NVIDIA GeForce RTX 3090显卡的服务器上运行CUDA程序时&#xff0c;遇到了如下错误&#xff1a; cudaErrorDevicesUnavailable: CUDA-capabl…

RedHat Linux8 修改root管理员账户密码命令

RedHat Linux8 修改root管理员账户密码命令&#xff1a; sudo passwd root RedHat重置root管理员密码&#xff1a; 1. 查看Linux系统版本信息 cat /etc/redhat-release2. 重置密码 2.1 进入内核编辑界面 重启Linux系统并出现引导界面&#xff0c;按下键盘上的e键进入内…

PostgreSQL 中如何处理数据的并发更新冲突解决?

文章目录 一、并发更新冲突的场景二、PostgreSQL 中的并发控制机制&#xff08;一&#xff09; 封锁机制&#xff08;二&#xff09; 事务隔离级别 三、并发更新冲突的解决方法&#xff08;一&#xff09; 重试机制&#xff08;二&#xff09; 使用乐观并发控制&#xff08;三&…

一句歌词描述夏天

夏天总是带着一种奇特的魔力&#xff0c;既能让人沉醉在阳光和海浪的浪漫中&#xff0c;也能在炎热与燥热中让人心生烦闷。特别是在夏日里情绪低落时&#xff0c;那些可以抚平心情的歌曲显得尤为珍贵。音乐&#xff0c;这个神奇的存在&#xff0c;总能在最需要的时候带来心灵的…