亚洲中文字幕乱码亚洲-蜜桃成熟视频在线观看-免费中文字幕视频在线-中国五十路熟妇洗澡视频-亚洲av伊人啪啪c-国产精品成人一区二区-国产自拍视频一区在线观看-成人一区不卡二区三区四区-亚洲情精品中文字幕99在线

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

調(diào)教了一個AI Agent,全天自動寫測試用例:準(zhǔn)確率提升70%+

0
分享至

一、FastAPI框架簡介

1.1 FastAPI框架簡介

FastAPI是一個用于構(gòu)建API的現(xiàn)代、快速(高性能)的Web框架,基于Python 3.7+的類型提示,建立在Starlette和Pydantic基礎(chǔ)之上。

FastAPI框架有以下特性:

Starlette:輕量級的 ASGI 框架/工具包,是構(gòu)建高性能 Asyncio 服務(wù)的理想選擇

Pydantic:基于 Python 類型提示來定義數(shù)據(jù)驗證、序列化和文檔的庫

FastAPI 的核心特性:

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

2.智能:極佳的編輯器支持,處處皆可自動補全,減少調(diào)試時間

3.簡單:設(shè)計的易于使用和學(xué)習(xí),閱讀文檔的時間更短

4.簡短:使代碼重復(fù)最小化,通過不同的參數(shù)聲明實現(xiàn)豐富功能

5.健壯:生產(chǎn)可用級別的代碼,還有自動生成的交互式文檔

6.標(biāo)準(zhǔn)化:基于(并完全兼容)API 的相關(guān)開放標(biāo)準(zhǔn):OpenAPI 和 JSON Schema



1.2 為什么選擇FastAPI框架

讓我們從多個維度詳細(xì)對比 FastAPI、Flask 和 Django REST Framework框架:



FastAPI 的性能優(yōu)勢:

●基于 ASGI(異步服務(wù)器網(wǎng)關(guān)接口),而非傳統(tǒng)的 WSGI

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

●使用 Uvicorn 作為 ASGI 服務(wù)器,性能接近 Go 和 Node.js

選擇 FastAPI 框架的理由:

1.原生異步支持:完美支持 async/await,適合 I/O 密集型應(yīng)用

2.自動數(shù)據(jù)驗證:基于 Pydantic,自動驗證請求數(shù)據(jù)并生成清晰的錯誤信息

3.自動文檔生成:無需額外配置即可生成交互式 API 文檔(Swagger UI 和 ReDoc)

4.類型安全:完整的類型提示支持,IDE 自動補全和類型檢查

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

6.現(xiàn)代化設(shè)計:充分利用 Python 3.7+ 的新特性

二、FastAPI開發(fā)環(huán)境配置

2.1 環(huán)境準(zhǔn)備

系統(tǒng)要求:

●建議使用Python 3.12

●pip 包管理器

2.2 安裝依賴

# 創(chuàng)建虛擬環(huán)境(推薦)
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 和數(shù)據(jù)庫
pip install pydantic pydantic-settings # 數(shù)據(jù)驗證和配置
pip install chromadb # 向量數(shù)據(jù)庫
pip install crewai # Agent 框架
pip install python-multipart # 文件上傳支持

2.3 項目結(jié)構(gòu)

FastAPI項目有這著其簡潔清晰和可維護(hù)的項目結(jié)構(gòu),強烈推薦的最佳實踐的項目結(jié)構(gòu)如下:

XMaster/
├── backend/ # 后端項目
│ ├── main.py # FastAPI 應(yīng)用入口
│ ├── base/ # 基礎(chǔ)模塊
│ │ ├── config.py # 配置管理
│ │ ├── db_action.py # 數(shù)據(jù)庫操作
│ │ ├── embedding_vector.py # 向量嵌入
│ │ └── logger_config.py # 日志配置
│ ├── models/ # 數(shù)據(jù)模型
│ │ ├── user.py
│ │ ├── knowledge.py
│ │ └── test_case.py
│ ├── schemas/ # Pydantic 模式
│ ├── api/ # API 路由
│ ├── agents/ # Agent 智能體
│ │ ├── case_generator_agent.py
│ │ └── rag_retrieval_agent.py
│ ├── services/ # 業(yè)務(wù)邏輯
│ └── data/ # 數(shù)據(jù)存儲
│ ├── sys-sqlite.db # SQLite 數(shù)據(jù)庫
│ └── vector_db/ # ChromaDB 向量庫
└── vue-front/ # 前端項目
├── src/
│ ├── views/ # 頁面組件
│ ├── components/ # 通用組件
│ ├── stores/ # Pinia 狀態(tài)管理
│ └── api/ # API 接口
└── package.json



三、FastAPI實戰(zhàn)

3.1 最簡FastAPI應(yīng)用示例

import uvicorn
# 導(dǎo)入FastAPI類
from fastapi import FastAPI
# 創(chuàng)建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)

運行應(yīng)用:

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風(fēng)格的文檔。

2. 類型提示和自動驗證

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

FastAPI 會自動完成下述事務(wù):

●驗證 name 是否為字符串

●在文檔中顯示參數(shù)類型

●提供編輯器自動補全

3. 異步支持

@FastApp.get("/")
async def root(): # 使用 async 關(guān)鍵字
return {"message": "Hello World"}

●使用 async def 定義異步路由

●支持 await 調(diào)用異步函數(shù)

●充分利用 Python 異步特性,提升并發(fā)性能

4. 自動 JSON 序列化

FastAPI 自動將 Python 字典轉(zhuǎn)換為 JSON 響應(yīng),無需手動序列化。

3.2 FastAPI 應(yīng)用類

FastAPI 應(yīng)用類是整個應(yīng)用的核心,負(fù)責(zé)路由注冊、中間件配置、生命周期管理等。

創(chuàng)建 FastAPI 實例
from fastapi import FastAPI
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
"""應(yīng)用生命周期管理"""
# 啟動時執(zhí)行
print("應(yīng)用啟動中...")
await init_database() # 初始化數(shù)據(jù)庫
yield # 應(yīng)用運行中
# 關(guān)閉時執(zhí)行
print("應(yīng)用關(guān)閉中...")
await close_database() # 關(guān)閉數(shù)據(jù)庫連接
# 創(chuàng)建 FastAPI 應(yīng)用實例
app = FastAPI(
title="XAuto智能體平臺",
version="1.0.0",
description="基于 FastAPI + CrewAI 的測試用例生成平臺",
lifespan=lifespan # 生命周期管理
)

FastAPI 實例參數(shù)說明:



配置 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"服務(wù)器內(nèi)部錯誤: {str(exc)}"}
)

3.3 FastAPI的請求路由系統(tǒng)

3.3.1 路由參數(shù)

路由參數(shù)(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}"}

路徑參數(shù)驗證:



3.3.2 查詢參數(shù)

查詢參數(shù)(Query Parameters)是URL中?后面的參數(shù)。

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="搜索關(guān)鍵詞"),
page: int = Query(1, ge=1, description="頁碼"),
size: int = Query(10, ge=1, le=100, description="每頁數(shù)量"),
tags: Optional[List[str]] = Query(None, description="標(biāo)簽列表")
):
"""
搜索商品
- q: 搜索關(guān)鍵詞(必填)
- page: 頁碼(默認(rèn) 1)
- size: 每頁數(shù)量(默認(rèn) 10,最大 100)
- tags: 標(biāo)簽列表(可選)
"""
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):
"""
創(chuàng)建商品
"""
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": "一本關(guān)于 FastAPI 的書",
"price": 99.99,
"tax": 10.0
}

Pydantic 模型的優(yōu)勢:

●自動數(shù)據(jù)驗證

●自動生成 JSON Schema

●自動生成 API 文檔

●類型提示和編輯器支持

3.3.4 Form表單數(shù)據(jù)

處理 HTML 表單提交的數(shù)據(jù)。

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}

??轉(zhuǎn)崗軟件測試/野路子技能提升

??想了解更多漲薪技能提升方法

??可以到我的個人號:atstudy-js

即可加入領(lǐng)取 ??????

轉(zhuǎn)行、入門、提升、需要的各種干貨資料

內(nèi)含AI測試、 車載測試、AI大模型開發(fā)、BI數(shù)據(jù)分析、銀行測試、游戲測試、AIGC

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。

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.

相關(guān)推薦
熱點推薦
安徽阜陽一服刑人員在監(jiān)獄突然死亡

安徽阜陽一服刑人員在監(jiān)獄突然死亡

黃河新聞網(wǎng)呂梁
2026-04-20 10:35:48
雷霆大勝太陽總分1-0:亞歷山大25分17罰 布克23分杰倫22+7+6

雷霆大勝太陽總分1-0:亞歷山大25分17罰 布克23分杰倫22+7+6

醉臥浮生
2026-04-20 06:07:58
真香!神操作背后!老鷹為何愿意交易肯納德?

真香!神操作背后!老鷹為何愿意交易肯納德?

籃球?qū)嶄?/span>
2026-04-19 23:11:48
馬刺半場領(lǐng)先10分:文班21分對攻阿夫迪亞19分 楊瀚森未登場

馬刺半場領(lǐng)先10分:文班21分對攻阿夫迪亞19分 楊瀚森未登場

醉臥浮生
2026-04-20 10:21:55
這張照片絕對是李宇春最想刪掉的照片!

這張照片絕對是李宇春最想刪掉的照片!

可樂談情感
2026-04-20 03:34:03
世錦賽戰(zhàn)報:16強決出5席!中國2勝2負(fù)1領(lǐng)先,世界亞軍4-10一輪游

世錦賽戰(zhàn)報:16強決出5席!中國2勝2負(fù)1領(lǐng)先,世界亞軍4-10一輪游

球場沒跑道
2026-04-20 05:38:54
換機風(fēng)波:當(dāng)期待的新電腦變成信創(chuàng)“危機”

換機風(fēng)波:當(dāng)期待的新電腦變成信創(chuàng)“危機”

電腦吧評測室
2026-04-19 22:12:03
黑粉攻擊何潤東風(fēng)波升級!博主怒撕:蹭熱度該適可而止,又老又丑

黑粉攻擊何潤東風(fēng)波升級!博主怒撕:蹭熱度該適可而止,又老又丑

小徐講八卦
2026-04-19 15:19:03
一場1-2爆出大冷門,皇馬棄將爆發(fā):傳射建功,大巴黎主場淪陷

一場1-2爆出大冷門,皇馬棄將爆發(fā):傳射建功,大巴黎主場淪陷

足球狗說
2026-04-20 07:10:43
金像獎獲獎名單出爐:梁家輝五封影帝,章子怡馬麗坐了一晚冷板凳

金像獎獲獎名單出爐:梁家輝五封影帝,章子怡馬麗坐了一晚冷板凳

萌神木木
2026-04-19 22:54:32
1983年,陳云親自批示:立即槍斃廣東縣委書記王仲,原因為何?

1983年,陳云親自批示:立即槍斃廣東縣委書記王仲,原因為何?

莫地方
2026-04-20 09:30:18
塔圖姆25+11+7布朗26分,費城雙槍打鐵,綠軍大勝76人刷爆紀(jì)錄

塔圖姆25+11+7布朗26分,費城雙槍打鐵,綠軍大勝76人刷爆紀(jì)錄

釘釘陌上花開
2026-04-20 05:20:14
國際油價飆漲7%,黃金白銀、美股期指全線下挫,加密貨幣16萬人爆倉,美軍向伊朗商船開火

國際油價飆漲7%,黃金白銀、美股期指全線下挫,加密貨幣16萬人爆倉,美軍向伊朗商船開火

21世紀(jì)經(jīng)濟報道
2026-04-20 06:46:08
二十余年品質(zhì)夠抗打,一汽豐田通勤郊游一步到位

二十余年品質(zhì)夠抗打,一汽豐田通勤郊游一步到位

汽車網(wǎng)評
2026-04-20 09:33:33
大數(shù)據(jù)分析,在中國,找個身高1米7年入20萬的老公,到底有多難?

大數(shù)據(jù)分析,在中國,找個身高1米7年入20萬的老公,到底有多難?

深度報
2026-04-18 23:37:27
世錦賽戰(zhàn)報:16強中國鎖定3席!世界冠軍連輸5局了,恐爆冷一輪游

世錦賽戰(zhàn)報:16強中國鎖定3席!世界冠軍連輸5局了,恐爆冷一輪游

小火箭愛體育
2026-04-20 06:06:04
放棄幻想,若中日開戰(zhàn),世界各國的立場如何

放棄幻想,若中日開戰(zhàn),世界各國的立場如何

孝沛與世界
2026-04-20 01:24:36
美國妹子崩潰大哭:借9.6萬美元上大學(xué),已還16.5萬,還欠22萬

美國妹子崩潰大哭:借9.6萬美元上大學(xué),已還16.5萬,還欠22萬

賤議你讀史
2026-04-19 04:30:07
央視揭露:美國1年投1300萬美元在中國搞“滲透”,俄羅斯、伊朗、古巴也是重點目標(biāo);細(xì)節(jié)曝光

央視揭露:美國1年投1300萬美元在中國搞“滲透”,俄羅斯、伊朗、古巴也是重點目標(biāo);細(xì)節(jié)曝光

極目新聞
2026-04-19 11:39:23
輸不起,是很多國人刻在骨子里的巨嬰病

輸不起,是很多國人刻在骨子里的巨嬰病

浪子說
2026-04-19 07:06:22
2026-04-20 11:23:00
51Testing軟件測試網(wǎng) incentive-icons
51Testing軟件測試網(wǎng)
中國軟件測試人的精神家園
1558文章數(shù) 13260關(guān)注度
往期回顧 全部

科技要聞

藍(lán)色起源一級火箭完美回收 客戶衛(wèi)星未入軌

頭條要聞

失蹤女老板被找到 嫌犯曾改名整容還催警察"還我清白"

頭條要聞

失蹤女老板被找到 嫌犯曾改名整容還催警察"還我清白"

體育要聞

七大獎項候選官宣!文班或全票DPOY

娛樂要聞

章子怡!增重20斤素顏拍新片

財經(jīng)要聞

月之暗面IPO迷局

汽車要聞

外觀非常驚艷 全新一代寶馬6系有望回歸

態(tài)度原創(chuàng)

手機
家居
房產(chǎn)
數(shù)碼
健康

手機要聞

上市還沒半年!三星三折疊屏手機面臨退市 友商跟華為差距太遠(yuǎn)

家居要聞

法式線條 時光靜淌

房產(chǎn)要聞

官宣簽約最強城更!海口樓市,突然殺入神秘房企!

數(shù)碼要聞

內(nèi)存短缺或致蘋果推遲上新 新款Mac Studio據(jù)稱延遲數(shù)月發(fā)布

干細(xì)胞抗衰4大誤區(qū),90%的人都中招

無障礙瀏覽 進(jìn)入關(guān)懷版