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

调教了一个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.

相关推荐
热点推荐
解放军地下导弹城罕见曝光,比伊朗的规模大多了!

解放军地下导弹城罕见曝光,比伊朗的规模大多了!

烽火观天下
2026-09-17 14:12:08
丢人丢到国外了!49岁中国奥运冠军严重违规被查,官方:他已辞职

丢人丢到国外了!49岁中国奥运冠军严重违规被查,官方:他已辞职

二疯说球
2026-07-31 10:14:55
总投资50亿元!新地标,广州第四高楼竣工!

总投资50亿元!新地标,广州第四高楼竣工!

大湾区发展网
2026-09-16 16:29:17
洗浴中心为什么突然没人了?内行直言:自身短板是“关键”

洗浴中心为什么突然没人了?内行直言:自身短板是“关键”

独舞独舞
2026-09-18 03:07:29
巨猛通便王!一碗下肚,直奔厕所,清空陈年宿便,浑身超通透!

巨猛通便王!一碗下肚,直奔厕所,清空陈年宿便,浑身超通透!

坠入二次元的海洋
2026-09-14 09:16:39
莫言:如果你混到没人找你吃饭,没人喊你聚会,连电话也没几个,那庆祝了,你不是人缘变差,而是真正觉醒了

莫言:如果你混到没人找你吃饭,没人喊你聚会,连电话也没几个,那庆祝了,你不是人缘变差,而是真正觉醒了

品读时刻
2026-05-27 09:00:58
威廉王储立场曝光!彻底对弟弟哈里撒手不管,最新露面印证现实

威廉王储立场曝光!彻底对弟弟哈里撒手不管,最新露面印证现实

绚丽的画卷
2026-09-18 01:55:03
39岁再夺一冠!梅西传射到位,金球奖官方盛赞他为决赛之王

39岁再夺一冠!梅西传射到位,金球奖官方盛赞他为决赛之王

老牛体育解说
2026-09-18 01:44:58
给三个孩子买吃的!七旬女士浑身搭七个包 自嘲像刚下船的一样

给三个孩子买吃的!七旬女士浑身搭七个包 自嘲像刚下船的一样

半岛晨报
2026-09-16 18:56:42
寿命长短,走路便知?寿命长的人,走路一般有这4个特征

寿命长短,走路便知?寿命长的人,走路一般有这4个特征

展望云霄
2026-08-30 14:00:06
“四人帮”之一的姚文元刑满出狱,提出两个要求,简直是痴心妄想

“四人帮”之一的姚文元刑满出狱,提出两个要求,简直是痴心妄想

扬平说史
2025-07-07 23:37:32
重磅!828新政第一刀落下!人民日报点名“现房销售”!据传苏州执行…

重磅!828新政第一刀落下!人民日报点名“现房销售”!据传苏州执行…

居者
2026-09-17 19:40:15
eSIM全面落地:联通放开全型号,移动5分钟开通,但这些要注意

eSIM全面落地:联通放开全型号,移动5分钟开通,但这些要注意

粤语音乐喷泉
2026-09-17 07:56:40
湖底惊现39年前失踪的运钞车,钞箱毫发无损,撬开后却傻眼了

湖底惊现39年前失踪的运钞车,钞箱毫发无损,撬开后却傻眼了

青青会讲故事
2025-09-17 11:32:38
大姐穿紧身裙注意点,一不小心原形毕露,亮点都被看光了!

大姐穿紧身裙注意点,一不小心原形毕露,亮点都被看光了!

舞指飞扬
2026-09-03 10:30:19
山的那一边,其实不是山

山的那一边,其实不是山

国际在线
2026-09-17 20:15:37
莱万特体育总监谈战毕包比赛推迟:暴雨下不该冒险

莱万特体育总监谈战毕包比赛推迟:暴雨下不该冒险

懂球帝
2026-09-17 09:08:37
18天9板大牛股:股价严重偏离基本面

18天9板大牛股:股价严重偏离基本面

中国基金报
2026-09-18 00:40:50
不愧是乌克兰第一美女!这颜值,真的美到犯规

不愧是乌克兰第一美女!这颜值,真的美到犯规

小虎新车推荐员
2026-09-18 01:49:58
43岁我娶22岁乌克兰姑娘,证婚人竟是她在国内偷偷领证的前夫

43岁我娶22岁乌克兰姑娘,证婚人竟是她在国内偷偷领证的前夫

真实人物采访
2026-09-16 09:00:11
2026-09-18 03:52:49
51Testing软件测试网 incentive-icons
51Testing软件测试网
中国软件测试人的精神家园
1647文章数 13285关注度
往期回顾 全部

科技要闻

影视飓风Tim反掰iPhoneDuo被质疑

头条要闻

永和豆浆视频被指擦边:女子穿蕾丝吊带 脱黑丝袜洗澡

头条要闻

永和豆浆视频被指擦边:女子穿蕾丝吊带 脱黑丝袜洗澡

体育要闻

逆转朝鲜,国足亚运队“啃老”过关

娱乐要闻

rapper赵涛恋情曝光!带甜馨妈妈散步

财经要闻

缺钱的追觅 隐藏的债务?

汽车要闻

小鹏G9L限时售23.18万 旗舰级的配置/诱人的价格

态度原创

房产
本地
手机
公开课
军事航空

房产要闻

突发!三亚安居房出台新政!

本地新闻

不止胖东来!许昌藏着半部三国史

手机要闻

鸿蒙7花粉Beta版有惊喜,华为Mate 60系列手机升级后新增支持眼动翻页功能

公开课

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

军事要闻

韩国外长表态:尚未决定是否向霍尔木兹海峡派兵

无障碍浏览 进入关怀版