【测开能力提升-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 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)

在这里插入图片描述

相关推荐

  1. fastapi框架

    2024-07-11 00:20:02       39 阅读
  2. python简单web框架介绍

    2024-07-11 00:20:02       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 00:20:02       4 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 00:20:02       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 00:20:02       4 阅读
  4. Python语言-面向对象

    2024-07-11 00:20:02       4 阅读

热门阅读

  1. 深入解析 MySQL 的 SHOW FULL PROCESSLIST

    2024-07-11 00:20:02       8 阅读
  2. 使用conda安装openturns

    2024-07-11 00:20:02       8 阅读
  3. c++的constexpr和constvalue的区别

    2024-07-11 00:20:02       9 阅读
  4. LASA数据集

    2024-07-11 00:20:02       11 阅读
  5. MySQL 条件函数/加密函数/转换函数

    2024-07-11 00:20:02       11 阅读
  6. Unity Addressable魔改

    2024-07-11 00:20:02       9 阅读
  7. Android关闭SLinux

    2024-07-11 00:20:02       11 阅读
  8. 小白学webgl合集-Three.js加载器

    2024-07-11 00:20:02       7 阅读