网易首页 > 网易号 > 正文 申请入驻

调教了一个AI Agent,全天自动写测试用例:准确率提升70%+

0
分享至

一、FastAPI框架简介

1.1 FastAPI框架简介

FastAPI是一个用于构建API的现代、快速(高性能)的Web框架,基于Python 3.7+的类型提示,建立在Starlette和Pydantic基础之上。

FastAPI框架有以下特性:

Starlette:轻量级的 ASGI 框架/工具包,是构建高性能 Asyncio 服务的理想选择

Pydantic:基于 Python 类型提示来定义数据验证、序列化和文档的库

FastAPI 的核心特性:

1.快速:可与 NodeJS 和 Go 比肩的极高性能,是最快的 Python Web 框架之一

2.智能:极佳的编辑器支持,处处皆可自动补全,减少调试时间

3.简单:设计的易于使用和学习,阅读文档的时间更短

4.简短:使代码重复最小化,通过不同的参数声明实现丰富功能

5.健壮:生产可用级别的代码,还有自动生成的交互式文档

6.标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI 和 JSON Schema



1.2 为什么选择FastAPI框架

让我们从多个维度详细对比 FastAPI、Flask 和 Django REST Framework框架:



FastAPI 的性能优势:

●基于 ASGI(异步服务器网关接口),而非传统的 WSGI

●原生支持 async/await,充分利用 Python 异步特性

●使用 Uvicorn 作为 ASGI 服务器,性能接近 Go 和 Node.js

选择 FastAPI 框架的理由:

1.原生异步支持:完美支持 async/await,适合 I/O 密集型应用

2.自动数据验证:基于 Pydantic,自动验证请求数据并生成清晰的错误信息

3.自动文档生成:无需额外配置即可生成交互式 API 文档(Swagger UI 和 ReDoc)

4.类型安全:完整的类型提示支持,IDE 自动补全和类型检查

5.高性能:基于 ASGI,性能接近 Go 和 Node.js

6.现代化设计:充分利用 Python 3.7+ 的新特性

二、FastAPI开发环境配置

2.1 环境准备

系统要求:

●建议使用Python 3.12

●pip 包管理器

2.2 安装依赖

# 创建虚拟环境(推荐)
python -m venv venv
source venv/bin/activate # Linux/Mac
# 或
venv\Scripts\activate # Windows
# 安装 FastAPI 和 Uvicorn
pip install fastapi uvicorn[standard]
# 安装项目依赖
pip install tortoise-orm aiosqlite # ORM 和数据库
pip install pydantic pydantic-settings # 数据验证和配置
pip install chromadb # 向量数据库
pip install crewai # Agent 框架
pip install python-multipart # 文件上传支持

2.3 项目结构

FastAPI项目有这着其简洁清晰和可维护的项目结构,强烈推荐的最佳实践的项目结构如下:

XMaster/
├── backend/ # 后端项目
│ ├── main.py # FastAPI 应用入口
│ ├── base/ # 基础模块
│ │ ├── config.py # 配置管理
│ │ ├── db_action.py # 数据库操作
│ │ ├── embedding_vector.py # 向量嵌入
│ │ └── logger_config.py # 日志配置
│ ├── models/ # 数据模型
│ │ ├── user.py
│ │ ├── knowledge.py
│ │ └── test_case.py
│ ├── schemas/ # Pydantic 模式
│ ├── api/ # API 路由
│ ├── agents/ # Agent 智能体
│ │ ├── case_generator_agent.py
│ │ └── rag_retrieval_agent.py
│ ├── services/ # 业务逻辑
│ └── data/ # 数据存储
│ ├── sys-sqlite.db # SQLite 数据库
│ └── vector_db/ # ChromaDB 向量库
└── vue-front/ # 前端项目
├── src/
│ ├── views/ # 页面组件
│ ├── components/ # 通用组件
│ ├── stores/ # Pinia 状态管理
│ └── api/ # API 接口
└── package.json



三、FastAPI实战

3.1 最简FastAPI应用示例

import uvicorn
# 导入FastAPI类
from fastapi import FastAPI
# 创建FastAPI实例,实例名自定义
FastApp = FastAPI()
@FastApp.get("/")
async def root():
return {"message": "Hello World"}
@FastApp.get("/hello/{name}")
async def say_hello(name: str):
return {"message": f"Hello {name}"}
if __name__ == "__main__":
uvicorn.run("main:FastApp", host="0.0.0.0", port=8000, reload=True)

运行应用:

python main.py

访问http://localhost:8000,我们会看到:

{"message": "Hello World"}

访问http://localhost:8000/hello/FastAPI,我们会看到:

{"message": "Hello FastAPI"}

FastAPI 的核心特性解析:

1. 自动生成交互式 API 文档

●访问http://localhost:8000/docs,我们会看到自动生成的Swagger UI文档:



●访问http://localhost:8000/redoc,会看到ReDoc风格的文档。

2. 类型提示和自动验证

@FastApp.get("/hello/{name}")
async def say_hello(name: str): # 类型提示:name 必须是字符串
return {"message": f"Hello {name}"}

FastAPI 会自动完成下述事务:

●验证 name 是否为字符串

●在文档中显示参数类型

●提供编辑器自动补全

3. 异步支持

@FastApp.get("/")
async def root(): # 使用 async 关键字
return {"message": "Hello World"}

●使用 async def 定义异步路由

●支持 await 调用异步函数

●充分利用 Python 异步特性,提升并发性能

4. 自动 JSON 序列化

FastAPI 自动将 Python 字典转换为 JSON 响应,无需手动序列化。

3.2 FastAPI 应用类

FastAPI 应用类是整个应用的核心,负责路由注册、中间件配置、生命周期管理等。

创建 FastAPI 实例
from fastapi import FastAPI
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
"""应用生命周期管理"""
# 启动时执行
print("应用启动中...")
await init_database() # 初始化数据库
yield # 应用运行中
# 关闭时执行
print("应用关闭中...")
await close_database() # 关闭数据库连接
# 创建 FastAPI 应用实例
app = FastAPI(
title="XAuto智能体平台",
version="1.0.0",
description="基于 FastAPI + CrewAI 的测试用例生成平台",
lifespan=lifespan # 生命周期管理
)

FastAPI 实例参数说明:



配置 CORS 中间件

from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 允许的源
allow_credentials=True,
allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"],
allow_headers=["*"],
)

全局异常处理

from fastapi import Request, HTTPException
from fastapi.responses import JSONResponse
@app.exception_handler(HTTPException)
async def http_exception_handler(request: Request, exc: HTTPException):
"""HTTP 异常处理器"""
returnJSONResponse(
status_code=exc.status_code,
content={"message": exc.detail}
)
@app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception):
"""全局异常处理器"""
returnJSONResponse(
status_code=500,
content={"message": f"服务器内部错误: {str(exc)}"}
)

3.3 FastAPI的请求路由系统

3.3.1 路由参数

路由参数(Path Parameters)是 URL 路径的一部分。

from fastapi import Path
@app.get("/items/{item_id}")
async def read_item(
item_id: int = Path(..., title="商品ID", ge=1, le=1000)
):
"""
获取商品信息
- item_id: 商品ID,范围 1-1000
"""
return{"item_id": item_id, "name": f"商品{item_id}"}

路径参数验证:



3.3.2 查询参数

查询参数(Query Parameters)是URL中?后面的参数。

from fastapi import Query
from typing import Optional, List
@app.get("/search")
async def search_items(
q: str = Query(..., min_length=1, max_length=50, description="搜索关键词"),
page: int = Query(1, ge=1, description="页码"),
size: int = Query(10, ge=1, le=100, description="每页数量"),
tags: Optional[List[str]] = Query(None, description="标签列表")
):
"""
搜索商品
- q: 搜索关键词(必填)
- page: 页码(默认 1)
- size: 每页数量(默认 10,最大 100)
- tags: 标签列表(可选)
"""
return{
"query": q,
"page": page,
"size": size,
"tags": tags or []
}

示例请求:

GET /search?q=FastAPI&page=1&size=20&tags=python&tags=web

3.3.3 请求体

使用 Pydantic 模型定义请求体。

from pydantic import BaseModel, Field
from typing import Optional
class Item(BaseModel):
"""商品模型"""
name: str = Field(..., min_length=1, max_length=100, description="商品名称")
description: Optional[str] = Field(None, max_length=500, description="商品描述")
price: float = Field(..., gt=0, description="商品价格")
tax: Optional[float] = Field(None, ge=0, description="税费")
@app.post("/items")
async def create_item(item: Item):
"""
创建商品
"""
item_dict = item.model_dump()
if item.tax:
price_with_tax = item.price + item.tax
item_dict.update({"price_with_tax": price_with_tax})
return item_dict

示例请求:

POST /items
Content-Type: application/json
{
"name": "FastAPI 教程",
"description": "一本关于 FastAPI 的书",
"price": 99.99,
"tax": 10.0
}

Pydantic 模型的优势:

●自动数据验证

●自动生成 JSON Schema

●自动生成 API 文档

●类型提示和编辑器支持

3.3.4 Form表单数据

处理 HTML 表单提交的数据。

from fastapi import Form
@app.post("/login")
async def login(
username: str = Form(..., min_length=3, max_length=50),
password: str = Form(..., min_length=6)
):
"""
用户登录
"""
return {"username": username, "message": "登录成功"}

示例请求:

POST /login
Content-Type: application/x-www-form-urlencoded
username=admin&password=123456

3.3.5 文件上传

FastAPI 支持单文件和多文件上传。

from fastapi import File, UploadFile
from typing import List
import shutil
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
"""
单文件上传
"""
# 保存文件
file_path = f"./uploads/{file.filename}"
with open(file_path, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
return{
"filename": file.filename,
"content_type": file.content_type,
"size": file.size
}
@app.post("/upload-multiple")
async def upload_multiple_files(files: List[UploadFile] = File(...)):
"""
多文件上传
"""
uploaded_files = []
for file in files:
file_path = f"./uploads/{file.filename}"
with open(file_path, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
uploaded_files.append({
"filename": file.filename,
"size": file.size
})
return {"files": uploaded_files}

☑️转岗软件测试/野路子技能提升

☑️想了解更多涨薪技能提升方法

✔️可以到我的个人号:atstudy-js

即可加入领取 ⬇️⬇️⬇️

转行、入门、提升、需要的各种干货资料

内含AI测试、 车载测试、AI大模型开发、BI数据分析、银行测试、游戏测试、AIGC

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
“惩恶扬善”的铁头被判8年,谁的偶像塌房了?

“惩恶扬善”的铁头被判8年,谁的偶像塌房了?

关尔东
2026-09-11 17:49:42
名古屋亚运会主火炬还没点燃,1274人的中国代表团先撞上四道坎——史上首个不建亚运村的亚运会,四千多人挤邮轮、两千多人住集装箱;

名古屋亚运会主火炬还没点燃,1274人的中国代表团先撞上四道坎——史上首个不建亚运村的亚运会,四千多人挤邮轮、两千多人住集装箱;

回京历史梦
2026-09-11 17:34:26
你是怎么发现有些人不能深交的?网友:花1800请她吃饭,每上一道菜都说不好吃

你是怎么发现有些人不能深交的?网友:花1800请她吃饭,每上一道菜都说不好吃

解读热点事件
2026-08-06 00:05:08
定了!美国、俄罗斯、北约三方居然罕见达成共识——乌克兰除了从顿巴斯撤军,真的没别的路可选了!

定了!美国、俄罗斯、北约三方居然罕见达成共识——乌克兰除了从顿巴斯撤军,真的没别的路可选了!

回京历史梦
2026-09-11 17:35:57
复旦女硕士在意大利旅游被蜱虫叮咬染重症,严重时生活不能自理,家属全网求助:暂无特效药,希望找到擅长蜱传疾病的专家,寻求诊疗方案

复旦女硕士在意大利旅游被蜱虫叮咬染重症,严重时生活不能自理,家属全网求助:暂无特效药,希望找到擅长蜱传疾病的专家,寻求诊疗方案

鲁中晨报
2026-09-11 07:15:05
18岁女子加前男友微信,被现男友发现,14秒私密语音暴露,两人争吵后女子跳楼坠亡,一审宣判

18岁女子加前男友微信,被现男友发现,14秒私密语音暴露,两人争吵后女子跳楼坠亡,一审宣判

扬子晚报
2026-09-11 19:43:05
“她已经重度抑郁了!”低保女孩香港追星后续:知情人士透露:她本来也不是什么好女孩!

“她已经重度抑郁了!”低保女孩香港追星后续:知情人士透露:她本来也不是什么好女孩!

林林先生
2026-09-11 16:21:41
社死名场面啊!一件裙子把女明星的“小肚子”逼上热搜,强光一打,她吓得死死捂着肚子,满脸写着尴尬,真相流出

社死名场面啊!一件裙子把女明星的“小肚子”逼上热搜,强光一打,她吓得死死捂着肚子,满脸写着尴尬,真相流出

火山詩话
2026-09-11 10:01:05
一代鬼王,香港演员雷宇扬离世,终年62岁

一代鬼王,香港演员雷宇扬离世,终年62岁

电影票房预告片
2026-09-11 15:48:22
普京时代或将落幕,中方有必要警惕俄罗斯转向!

普京时代或将落幕,中方有必要警惕俄罗斯转向!

律法刑道
2026-09-11 10:06:21
网传宋祖德去世?个人账号停更于7月6日,其胞弟发文令人深思

网传宋祖德去世?个人账号停更于7月6日,其胞弟发文令人深思

蜜桔娱乐
2026-09-11 17:35:48
长沙“摸臀姐”,又惹了大麻烦!

长沙“摸臀姐”,又惹了大麻烦!

新动察
2026-09-11 10:24:31
欠薪、实控人失联?连锁金店千叶珠宝“爆雷”,加盟店称未受影响

欠薪、实控人失联?连锁金店千叶珠宝“爆雷”,加盟店称未受影响

21世纪经济报道
2026-09-11 19:36:05
她以为风头过了就能出国 结果央媒下场 父母发声 账号被封退路也没了

她以为风头过了就能出国 结果央媒下场 父母发声 账号被封退路也没了

再战五百回合
2026-09-11 15:21:57
坎迪尔,遇袭身亡

坎迪尔,遇袭身亡

第一财经资讯
2026-09-11 00:34:52
美媒:万斯为特朗普“每个选民发5000美元”许诺辩护,被猛烈抨击

美媒:万斯为特朗普“每个选民发5000美元”许诺辩护,被猛烈抨击

环球网资讯
2026-09-11 12:00:31
高校买商品房当学生宿舍:空调洗衣机齐全,双人间一年1320元

高校买商品房当学生宿舍:空调洗衣机齐全,双人间一年1320元

环球网资讯
2026-09-11 09:01:09
体位大揭秘:哪些姿势既能延长时间,又能提高质量和满足?

体位大揭秘:哪些姿势既能延长时间,又能提高质量和满足?

精彩分享快乐
2026-09-11 21:00:03
比腐败更可怕的,是所有人都在假装岁月静好

比腐败更可怕的,是所有人都在假装岁月静好

笑熬浆糊111
2026-08-17 09:07:45
亚运开门红!中国男篮38分狂胜哈萨克斯坦 庞峥麟19分李弘权16+9

亚运开门红!中国男篮38分狂胜哈萨克斯坦 庞峥麟19分李弘权16+9

醉卧浮生
2026-09-11 10:38:01
2026-09-12 02:55:00
51Testing软件测试网 incentive-icons
51Testing软件测试网
中国软件测试人的精神家园
1641文章数 13285关注度
往期回顾 全部

科技要闻

苹果折叠屏比小米华为贵5000元,该怎么选

头条要闻

18岁女子加前男友微信被现男友发现 争吵后跳楼身亡

头条要闻

18岁女子加前男友微信被现男友发现 争吵后跳楼身亡

体育要闻

37岁还能场场进球,还能翻跟头!

娱乐要闻

黄晓明直言帮太多白眼狼,杨颖遭殃

财经要闻

女装“玖姿”母公司跨境贸易迷局:安正时尚说谎了吗?

汽车要闻

买菜车也有小乐趣 风云T7不止是台合格家用SUV

态度原创

房产
艺术
教育
家居
公开课

房产要闻

别再等了!广州改善好房,正在进入“卖一套少一套”时代

艺术要闻

近代中国画坛谁最霸气?不是齐白石,也不是张大千,答案让人沉默!

教育要闻

现场直击!武汉科技大学2026年研究生新生开学典礼!

家居要闻

2026建博会(广州) 公装联探展交流活动

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版