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

打印 上一主题 下一主题

主题 523|帖子 523|积分 1569

0. 前期阐明

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

1.1 介绍

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


  • 支持原生的异步编程
  • 主动天生文档
  • 范例声明和数据校验
  • 内置身份认证
  • 性能强,主要是快
1.1.2 两个基础库

python 3.6之上的版本(我利用的是python 3.11)
  1. pip install fastapi
  2. pip install uvicorn
复制代码
1.1.3 开端利用

运行方式我选择直接写入代码里,搭建的最简单的fastapi代码如下
假设新建文件名为main.py
  1. from fastapi import Fastapi
  2. import uvicorn
  3. # 初始化Fastapi
  4. app = Fastapi()
  5. # 添加路由
  6. @app.get('/')
  7. async def get_index():
  8.         return {'message': 'hello world!!'}
  9. # 运行Fastapi服务
  10. if __name__ == '__main__':
  11.         uvicorn.run('main:app', port=5050, reload=True)
复制代码
利用fastapi自带的swagger可以看到该接口
地址:地址背面加/docs打开swagger页面 示例:http://127.0.0.1:5050/docs#/


1.1.4 添加解释

  1. from fastapi import Fastapi
  2. import uvicorn
  3. # 初始化Fastapi
  4. app = Fastapi()
  5. # 添加路由
  6. @app.get('/')
  7. async def get_index():
  8.         """hello接口"""
  9.         return {'message': 'hello world!!'}
  10. # 运行Fastapi服务
  11. if __name__ == '__main__':
  12.         uvicorn.run('main:app', port=5050, reload=True)
复制代码

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

1.2 POST哀求

  1. from fastapi import FastAPI
  2. import uvicorn
  3. app = FastAPI()
  4. @app.get('/')
  5. async def get_index():
  6.     """hello接口"""
  7.     return {'message':'Hello World'}
  8. # 仅支持post请求
  9. @app.post('/login')
  10. async def login():
  11.     return {'message': 'login successfully'}
  12. # 支持多种请求方式
  13. @app.api_route("/resister", methods=['GET', 'POST'])
  14. async def resister():
  15.     return {'message': 'resister successfully'}
  16. if __name__ == '__main__':
  17.     uvicorn.run('main:app', port=5050, reload=True)
复制代码

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

1.3 获取URL参数

1.3.1 路径参数方式

  1. from fastapi import FastAPI
  2. import uvicorn
  3. app = FastAPI()
  4. @app.get('/user/{id}')
  5. async def user(id):
  6.     """user接口"""
  7.     return {'message':id}
  8. if __name__ == '__main__':
  9.     uvicorn.run('main:app', port=5050, reload=True)
复制代码

解释:
花括号包裹变量名(flask是尖括号),函数传参须要和变量名保持一致(暂不做校验)

1.3.2 查询参数方式

  1. from fastapi import FastAPI
  2. import uvicorn
  3. app = FastAPI()
  4. @app.get('/user')
  5. async def user(id):
  6.     """user接口"""
  7.     return {'message':id}
  8. if __name__ == '__main__':
  9.     uvicorn.run('main:app', port=5050, reload=True)
复制代码

解释:
swagger中变量参数名称从路径参数(path)酿成了查询参数(query)

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

1.4.1 哀求头传递参数

  1. from fastapi import FastAPI, Header
  2. import uvicorn
  3. app = FastAPI()
  4. @app.get('/user')
  5. async def user(id, token=Header(None)):
  6.     """user接口"""
  7.     return {'message': id, 'token': token}
  8. if __name__ == '__main__':
  9.     uvicorn.run('main:app', port=5050, reload=True)
复制代码

解释:
哀求头获取在测试中也经常利用,如哀求头中带有token信息,假如未传参也可设置成None,返回null,哀求头传递名称一定要与关键字名称保持一致

1.4.2 哀求体传递参数

1.4.2.1 Json等格式传递

  1. from fastapi import FastAPI, Body
  2. import uvicorn
  3. app = FastAPI()
  4. @app.post('/login')
  5. async def login(data=Body(None)):
  6.     """login接口"""
  7.     return {'message': data}
  8. if __name__ == '__main__':
  9.     uvicorn.run('main:app', port=5050, reload=True)
复制代码

1.4.2.2 Form表单格式传递

  1. from fastapi import FastAPI, Form
  2. import uvicorn
  3. app = FastAPI()
  4. @app.post('/login')
  5. async def login(username=Form(None), password=Form(None)):
  6.     """login接口"""
  7.     return {"username": username, "password": password}
  8. if __name__ == '__main__':
  9.     uvicorn.run('main:app', port=5050, reload=True)
复制代码

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

1.5 定制返复书息

1.5.1 修改响应状态码

示例:Json响应
  1. from fastapi import FastAPI
  2. from fastapi.responses import JSONResponse
  3. import uvicorn
  4. app = FastAPI()
  5. @app.get('/user')
  6. async def user():
  7.     return JSONResponse(content={'message': 'Hello World'}, status_code=202, headers={'Access-Control-Allow-Origin': '*'})
  8. if __name__ == '__main__':
  9.     uvicorn.run('main:app', port=5050, reload=True)
复制代码

示例:HTML响应
  1. from fastapi import FastAPI
  2. from fastapi.responses import HTMLResponse
  3. import uvicorn
  4. app = FastAPI()
  5. @app.get('/user')
  6. async def user():
  7.     html_content = """
  8.     <html>
  9.         <body><p style="color:red">Hello World</p></body>
  10.     </html>
  11.     """
  12.     return HTMLResponse(content=html_content, status_code=202, headers={'Access-Control-Allow-Origin': '*'})
  13. if __name__ == '__main__':
  14.     uvicorn.run('main:app', port=5050, reload=True)
复制代码


示例:File响应
  1. from fastapi import FastAPI
  2. from fastapi.responses import FileResponse
  3. import uvicorn
  4. app = FastAPI()
  5. @app.get('/user')
  6. async def user():
  7.     pic = 'favicon.ico'
  8.     return FileResponse(path=pic, filename='jmeter.ico', status_code=202, headers={'Access-Control-Allow-Origin': '*'})
  9. if __name__ == '__main__':
  10.     uvicorn.run('main:app', port=5050, reload=True)
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81429

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表